2017-12-10 25 views
2

사용자가 내 앱의 알림 벨소리를 선택할 수있게하려고합니다. 기본 알림 벨소리가되고 싶은 사용자 지정 사운드 파일 (.mp3 파일이/raw에 있음)이 있습니다. 내가 저장/공유 환경 설정에서/이런 식으로 선택한 벨소리 URI를 얻을 :벨소리 선택 도구 : 선택시 '없음'또는 '기본 알림 소리'확인

public static void setNotificationSound(Activity activity, String uri) { 
     SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(activity); 
     sharedPref.edit().putString("notificationSound", uri).apply(); 
    } 


    public static Uri getNotificationSound(Context context) { 
     SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context); 
     return Uri.parse(sharedPref.getString("notificationSound", "")); 
    } 

을 그리고 이것은 내가 벨소리 선택기 표시 방법은 다음과 같습니다

Uri notificationSoundUri = SharedPrefMethods.getNotificationSound(mACA); //gets the saved uri 

    Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); 
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION); 
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select Notification Ringtone"); 
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true); 
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, Uri.parse("android.resource://" + mACA.getPackageName() + "/raw/notificationbrightside")); //my custom sound 
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, notificationSoundUri); //pass the saved URI to be 'checked' 
    this.startActivityForResult(intent, 555); 

내 문제는 EXTRA_RINGTONE_EXISTING_URI 줄 것으로 보인다을 . 사용자가 시스템 벨소리를 선택하고 선택기로 돌아 오면 벨소리가 올바르게 선택됩니다. 그러나 사용자가 '없음'또는 '기본 알림 사운드'(내 맞춤 사운드)를 선택하고 선택기로 돌아 오면 아무 것도 확인되지 않습니다.

내 코드 (여기에 표시되지 않음)에있는 모든 항목이 모두 정상입니다. 사용자 정의 벨소리를 선택할 때 사운드가 내 알림에 올바르게 할당됩니다. '없음'을 선택하면 소리가 나지 않습니다. 이는 올바른 URI가 SharedPref에 저장된다는 것을 의미합니다.

의도가 'none'또는 '기본 알림 소리'가 선택 될 때 선택되도록하려면 무엇을 전달해야합니까?

답변

1

'없음'을 선택한 경우 null을 전달하십시오.

RingtoneManager.EXTRA_RINGTONE_EXISTING_URI 필드에서 '기본 알림 소리'가 선택된 경우 Settings.System.DEFAULT_NOTIFICATION_URI을 전달하십시오.