如何从 ACTION_RINGTONE_PICKER 的 Intent 中提取 Uri
How to extract a Uri out of an Intent from ACTION_RINGTONE_PICKER
我最近开始使用 Android Studio 3.1.2 和 SDK 19 编写我真正的第一个 android 项目。
我的一个片段使用 Intent(RingtoneManager.ACTION_RINGTONE_PICKER)
通过 Intent 打开了一个铃声选择器,因此用户可以 select 一个铃声,Uri 然后将其保存到 SharedPreferences
。选择器按预期打开,但在我 select 一个铃声并按确定后,我得到这个 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 传递给我的 SettingsHandler
,其中 setNotificationRingtone()
应该注意 selected 音调,如下所示:
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")));
}
如果我猜对了,我不知何故误解了 Intent data
和 onActivityResult()
方法 returns 的结构。我试图在这里找到一个可以理解的答案,但 none 确实符合我的问题。
如果有人能解释一下如何正确地从 Intent 中提取结果以及如何将 Intent 中的相应数据解析为 Uri,我将不胜感激。感谢转发。
来自文档:https://developer.android.com/reference/android/media/RingtoneManager.html#ACTION_RINGTONE_PICKER
Output: EXTRA_RINGTONE_PICKED_URI.
因此将 data.getStringExtra("uriString")
替换为 data.getStringExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI)
验证将调试器断点放入 onActivityResult 并使用调试器检查返回的意图
我最近开始使用 Android Studio 3.1.2 和 SDK 19 编写我真正的第一个 android 项目。
我的一个片段使用 Intent(RingtoneManager.ACTION_RINGTONE_PICKER)
通过 Intent 打开了一个铃声选择器,因此用户可以 select 一个铃声,Uri 然后将其保存到 SharedPreferences
。选择器按预期打开,但在我 select 一个铃声并按确定后,我得到这个 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 传递给我的 SettingsHandler
,其中 setNotificationRingtone()
应该注意 selected 音调,如下所示:
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")));
}
如果我猜对了,我不知何故误解了 Intent data
和 onActivityResult()
方法 returns 的结构。我试图在这里找到一个可以理解的答案,但 none 确实符合我的问题。
如果有人能解释一下如何正确地从 Intent 中提取结果以及如何将 Intent 中的相应数据解析为 Uri,我将不胜感激。感谢转发。
来自文档:https://developer.android.com/reference/android/media/RingtoneManager.html#ACTION_RINGTONE_PICKER
Output: EXTRA_RINGTONE_PICKED_URI.
因此将 data.getStringExtra("uriString")
替换为 data.getStringExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI)
验证将调试器断点放入 onActivityResult 并使用调试器检查返回的意图