私のアプリでが通知されたときに再生される特定の着信音をユーザーが選択できるようにするには、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つしか見つけず、答えが得られる前にスレッドの活動が終了したようです。これを経験したことのある人はいませんか?これを間違ってやっていますか?
Iは、[ユーザー/デバイスからの同様のエラーを取得: \t活性ComponentInfo {アンドロイド/ com.android.internal.app.RingtonePickerActivity}開始できません:android.database.sqlite.SQLiteException:そのようなカラム:_dataを:コンパイル中に:select _data FROM system WHERE(name =?) - 私の知る限り、これはAndroidのバグであり、修正する必要があります。 –