Android默认音调选择器问题(带有通知和警报的默认音调)

Android默认音调选择器问题(带有通知和警报的默认音调),android,uri,picker,ringtone,Android,Uri,Picker,Ringtone,我不知道这是不是一个简单的愚蠢问题。我有一个铃声选择器,显示默认铃声选项(用于通知)。像这样: Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION); intent.putExtra(RingtoneManager.EXTRA_RINGTON

我不知道这是不是一个简单的愚蠢问题。我有一个铃声选择器,显示默认铃声选项(用于通知)。像这样:

Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
startActivityForResult(intent, RingtoneManager.TYPE_NOTIFICATION);
然后我得到了结果:

protected void onActivityResult(int requestCode, int resultCode, Intent mRingtone) {
    switch (requestCode) {
        case RingtoneManager.TYPE_NOTIFICATION:
            if (resultCode == RESULT_OK) {
                notifToneUri = mRingtone.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
                Ringtone ringtone = RingtoneManager.getRingtone(this, uri);
                Log.d(TAG,"Uri = " + notifToneUri.toString() + " and title = " + ringtone.getTitle(this));
            }
        break;
    } 
}
发生了一件奇怪的事情,如果我选择“默认通知音”选项,uri应该是:*content://settings/system/notification_sound*但是uri是content://settings/system/ringtone (这是铃声的默认值,而不是通知)。默认报警音也会发生同样的情况

我是这样解决的:

if (notifToneUri.equals(Settings.System.DEFAULT_RINGTONE_URI)){
    notifToneUri = Settings.System.DEFAULT_NOTIFICATION_URI;
}
好的,这很有效。。。但是我想知道是否有更好的方法或者我做错了什么


提前谢谢。

我认为您没有正确检索
Uri
。下面是一个例子:

启动
铃声管理器

final Intent ringtone = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
ringtone.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION);
ringtone.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
ringtone.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI,
            RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
startActivityForResult(ringtone, 0);
if (requestCode == 0 && resultCode == RESULT_OK) {
    final Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
    final Ringtone ringtone = RingtoneManager.getRingtone(this, uri);
    // Get your title here `ringtone.getTitle(this)`
}
检索
活动中的
Uri
和标题。onActivityResult

final Intent ringtone = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
ringtone.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION);
ringtone.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
ringtone.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI,
            RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
startActivityForResult(ringtone, 0);
if (requestCode == 0 && resultCode == RESULT_OK) {
    final Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
    final Ringtone ringtone = RingtoneManager.getRingtone(this, uri);
    // Get your title here `ringtone.getTitle(this)`
}

您可以看到,只有当
Uri
的AUTHORITY等于
Settings.AUTHORITY
和never
MediaStore.AUTHORITY
时,才会添加前缀。对不起,我的错,我没有编写所有代码。我也在做你建议的事情(启动选择器并获取结果)。但我有我描述的问题。如果我在选择器中选择“Default notification tone”,而不是接收正确的uri,我将接收默认铃声的uri。我进行了编辑。您需要将
铃声管理器.EXTRA\u RINGTONE\u DEFAULT\u URI
作为额外内容包含在内。是的!这就是诀窍,我想如果你把TYPE_NOTIFICATION和EXTRA_RINGTONE_SHOW_DEFAULT设置为true就足够了,但事实并非如此。非常感谢你。