2011-08-06 3 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); 
} 

(I 단 하나 .... HTC 에보가) 내 에뮬레이터에서 2.2 및 2.3을 실행 : m)는 장치의 기본 벨소리를 변경하려고하지.

사실 내 사용자가 신고 한대로 Nexus S에서 강제 폐쇄가 발생한다는 사실을 알고 있습니다. 이 코드에 문제가 발생하는 다른 장치의 모델 이름을 알지 못합니다. 어떤 아이디어? 개발자 콘솔에서 스택 추적이를 보여줍니다

java.lang.RuntimeException가 : 활동 ComponentInfo를 시작할 수 없습니다 {안드로이드/com.android.internal.app.RingtonePickerActivity} : 안드로이드에서 java.lang.NullPointerException이 . 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) at 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 (RingtonePickerActivity.java:214)에서 java.lang.NullPointerException이 (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 (Instrumentation.java:1047) android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2627) 에서 ... 특히 11 개의

, 당신은 RingtonePickerActivity.java:214에서 NullPointerException이 볼 수 있습니다. grepcode에서 RingtonePickerActivity.java을 검사하고 클래스를 보면 라인이 214에서 클래스가 정수 addDefaultRintoneItem을 찾고 있음을 알 수 있습니다.

나는 넥서스 S와 사람의 모르는이를 테스트 할 수 있지만 나는 내 코드에서 줄 intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true 을 제거하면 nullPointer를 해결할 수 있다고 생각했다.

누구든지 내 이론을 검증 할 수 있습니까? 아무도이 문제를 경험하지 않았습니까? 난 단지이 문제에 관한 한 스레드를 발견하고 스레드 활동이 응답을 파생되기 전에 사망 것으로 보인다. 아무도 이것을 경험하지 않았습니까, 아니면 제가 잘못하고있는 것입니까?

+0

내가 선택한 사용자/장치에서 비슷한 오류를 얻을 : \t 활동을 시작할 수 없습니다 ComponentInfo {안드로이드/com.android.internal.app.RingtonePickerActivity} : android.database.sqlite.SQLiteException을 : 그런 열 : _data를 : , 컴파일하는 동안 : select _data FROM system WHERE (name =?) - 내가 알 수있는 한, 이것은 Android의 버그이므로 수정해야합니다. –

답변

0

어떤 이유로 든 벨소리 선택 도구가 존재하지 않습니다.null 포인터를 얻었으므로 try 캐시에 랩핑하고 벨소리 선택 도구가 존재하지 않는다는 대화 상자를 보여줍니다.

+0

나는 여전히 멍청하기 때문에 내가 틀렸다면 나에게 정정 해주세요.하지만 RingtonePickerActivity.java에서 nullpointer @ line 214를 얻는다면, Ringtone picker가 있다는 것을 의미하지 않습니까? – dell116