0

我最近开始使用 Android Studio 3.1.2 和 SDK 19 编写我真正的第一个 android 项目。

我的一个片段使用 Intent 打开一个铃声选择器Intent(RingtoneManager.ACTION_RINGTONE_PICKER),因此用户可以选择一个铃声,然后 Uri 应将其保存到SharedPreferences. 选择器按预期打开,但在我选择铃声并按确定后,我得到了这个 RuntimeException:

java.lang.RuntimeException: Failure delivering result ResultInfo
{who=null, request=65537, result=-1, data=Intent { (has extras) }} to activity 
{com.procra.myProject/com.procra.myProject.Activities.MainActivity}: 
java.lang.NullPointerException: uriString

在获取选择器的结果时,我将结果的 Intent 传递给 my SettingsHandler,其中setNotificationRingtone()应注意所选音调,如下所示:

public synchronized static void setNotificationRingtone(Context context, Intent data) {
    SharedPreferences sharedPreferences = context.getSharedPreferences(NOTIFICATION_SETTINGS, Context.MODE_PRIVATE);
    sharedPreferences.edit().putString(NOTIFICATION_RINGTONE_URI , data.getStringExtra("uriString")).apply();
    //this is the one I suspect to be the troublemaker
    RingtoneManager.setActualDefaultRingtoneUri(context, RingtoneManager.TYPE_NOTIFICATION, Uri.parse(data.getStringExtra("uriString")));
}

如果我得到了正确的结果,我会以某种方式误解了dataonActivityResult()方法返回的 Intent 的结构。我试图在这里找到一个可以理解的答案,但没有一个真正符合我的问题。

如果有人可以解释,我将不胜感激,如何正确地从 Intent 中提取结果以及如何将相应的数据从 Intent 解析为 Uri。谢谢转发。

4

1 回答 1

1

来自文档:https ://developer.android.com/reference/android/media/RingtoneManager.html#ACTION_RINGTONE_PICKER

输出:EXTRA_RINGTONE_PICKED_URI。

所以替换data.getStringExtra("uriString")data.getStringExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI)

验证将调试器断点放入 onActivityResult 并使用调试器检查返回的意图

于 2018-10-04T14:42:15.167 回答