2011-08-06 5 views
3

私のアプリでが通知されたときに再生される特定の着信音をユーザーが選択できるようにするには、Androidの着信音ピッカーのアクティビティ特定の端末でクラッシュする...具体的にNexus S

これは私のテストデバイスに取り組んでいる
public void ringtonePicker() { 

    Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); 
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select ringtone"); 
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false); 
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true); 
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,RingtoneManager.TYPE_NOTIFICATION); 

    this.startActivityForResult(intent, 999); 
} 


@Override 
public void onActivityResult(int requestCode, int resultCode, Intent intent) { 

    if (resultCode != RESULT_OK) { 

    return; 
    } 

    if (requestCode == 999) { 

     Uri uri = intent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); 

     if (uri != null) 
     { 

      String ringTonePath = uri.toString(); 
      SharedPreferences.Editor editor = mySharedPreferences.edit(); //opens shared preference editor 
      editor.putString("storedRingtoneLocation", ringTonePath); 
      editor.commit(); 


      populateList(settingsList, settingsListDetails = getAndSetDetails(settingsList.length)); 
      adapter.notifyDataSetChanged(); 
     } 
     else 
     { 
      Toast.makeText(getApplicationContext(), "No Ringtone Path Found!", Toast.LENGTH_LONG).show(); 
     } 
    } 

    else 
    { 
     Toast.makeText(getApplicationContext(), "Request Code is Bad", Toast.LENGTH_LONG).show(); 
    } 

    super.onActivityResult(requestCode, resultCode, intent); 
} 

(私は一つだけ.... HTCエボを持っている)、私のエミュレータで2.2と2.3を実行している:m)は、デバイス上のデフォルトの着信音を変更しようとしていません。

これは、ユーザーが報告したようにNexus Sの強制終了を引き起こすことがわかっています。このコードで問題が発生する他のデバイスのモデル名はわかりません。何か案は?デベロッパーコンソールからスタックトレースは、これを示しています

java.lang.RuntimeException:アンドロイドでjava.lang.NullPointerExceptionが :活性ComponentInfo {アンドロイド/ com.android.internal.app.RingtonePickerActivity}を開始できません。 android.appでandroid.app.ActivityThread.access $ 2300(ActivityThread.java:125) でandroid.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) でapp.ActivityThread.performLaunchActivity(ActivityThread.java:2663) .ActivityThread $ H.handleMessage(ActivityThread.java:2033) とandroid.os.Handler.dispatchMessage(Handler.java:99) とandroid.os.Looper.loop(Looper.java:123) at android.app.ActivityThread.main(ActivityThread.java:4627) at java.lang.reflect.Method.invokeNative(ネイティブメソッド) at java.lang.reflect.Method.invoke(Method.java:521) com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:858) com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) at dalvik.system.NativeStart.main com.android.internal.app.AlertController $ AlertParams.createListViewでcom.android.internal.app.RingtonePickerActivity.onPrepareListViewでjava.lang.NullPointerExceptionが (RingtonePickerActivity.java:214) (AlertController:によって引き起こさ(ネイティブメソッド) .java:905) at com.android.internal.app.AlertController $ AlertParams.apply(AlertController.java:824) at com.android.internal.app.AlertActivity.setupAlert(AlertActivity.java:73) at com.android.internal.app.RingtonePickerActivity.onCreate(RingtonePickerActivity.java:188) android.app.Instrumentation.callActivityOnCreate( android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)より ... 11

でInstrumentation.java:1047) 具体的には、あなたはRingtonePickerActivity.java:214でNullPointerExceptionが見ることができます。 grepcodeでRingtonePickerActivity.javaを検査してクラスを見ると、クラス214が整数addDefaultRintoneItemを探していることがわかります。

私はこれをテストすることができネクサスSと誰も知らないが、私は自分のコードからのライン intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true を削除すると発生する、NullPointerを修正するかもしれないと考えていました。

誰でも私の理論を検証できますか?誰もこの問題を経験していませんか?私はこの問題に関連するSOのスレッドを1つしか見つけず、答えが得られる前にスレッドの活動が終了したようです。これを経験したことのある人はいませんか?これを間違ってやっていますか?

+0

Iは、[ユーザー/デバイスからの同様のエラーを取得: \t活性ComponentInfo {アンドロイド/ com.android.internal.app.RingtonePickerActivity}開始できません:android.database.sqlite.SQLiteException:そのようなカラム:_dataを:コンパイル中に:select _data FROM system WHERE(name =?) - 私の知る限り、これはAndroidのバグであり、修正する必要があります。 –

答えて

0

何らかの理由で着信音ピッカーが存在しない場合があります。ヌルポインタを取得しました。試しキャッシュにラップし、着信音ピッカーが存在しないことを示すダイアログを表示します。

+0

私はまだnoobですので私が間違っている場合は私を修正してください、しかし、私はRingtonePickerActivity.javaでnullpointer @行214を取得している場合は、着信音ピッカーが存在することを意味しないのですか? – dell116

関連する問題