铃声选择器:选中 'none' 或 'default notification sound'

ringtone picker: check 'none' or 'default notification sound' when they're picked

我希望用户能够 select 我的应用程序的通知铃声。我有一个自定义声音文件(放在 /raw 中的 .mp3 文件),我想将其作为默认通知铃声。我 save/get 选择的铃声 uris in/from 共享首选项是这样的:

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 行有关。 当用户选择系统铃声并返回选择器时,铃声被正确检查。但是当用户选择 'none' 或 'default notification sound'(我的自定义声音)并返回选择器时,没有任何检查。

我代码中的其他所有内容(此处未显示)都正常 - 当我选择任何铃声(包括自定义铃声)时,声音会正确分配给我的通知。当我选择 'none' 时,没有声音播放。这意味着正确的 URI 被保存到 SharedPref。

我必须将什么传递给 Intent,以便在选择 'none' 或 'default notification sound' 时检查它们?

选择'none'时传递null

当在 RingtoneManager.EXTRA_RINGTONE_EXISTING_URI 字段中选择 'default notification sound' 时,传递 Settings.System.DEFAULT_NOTIFICATION_URI