这是我用来将 Uri 的字符串表示形式保存到 SharedPreferences 的代码:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQ_CODE_PICK_SOUNDFILE && resultCode == Activity.RESULT_OK){
if ((data != null) && (data.getData() != null)){
SharedPreferences sharedPref = getSharedPreferences("customName", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString("uritostring", data.getData().toString());
editor.apply();
}
}
}
请注意,当我在此处附加以下两个内容之一时,它可以正常工作:
MediaPlayer mp=MediaPlayer.create(this,data.getData());
MediaPlayer mp=MediaPlayer.create(this,Uri.parse(data.getData().toString()));
但是,当我尝试稍后在类似这样的另一个活动中创建 MediaPlayer 时,它不起作用:
SharedPreferences sharedPref = getSharedPreferences("customName", Context.MODE_PRIVATE);
Uri uri = Uri.parse(sharedPref.getString("uritostring","defaultUriString"));
mp.create(this,uri);
我不知道保存和加载到共享首选项可以合理地产生什么差异。据我所知,从调试来看uri与结果相同Uri.parse(data.getData().toString())从上面。
非常感谢任何帮助和指示。
此致
Julius
EDIT:
我以为我通过调用解决了这个问题MediaPlayer.create()
方法与getApplicationContext()
上下文,但关闭应用程序并重新打开它会使方法调用再次失效。