将音频内容Uri保存在共享首选项中以便稍后播放

时间:2015-05-26 05:14:15

标签: android android-intent sharedpreferences android-mediaplayer android-contentprovider

我正在设计一个Alarm应用,当设备被动摇时,会播放Audio

我正在Audio中使用Intent的“ACTION_GET_CONTENT”从文件系统中选择ActivityForResult。我可以抓取content uri,将其保存在SharedPreference中并使用MediaPlayer与其他Activity一起通过URI传递Intent Audio

但是,一旦我关闭我的应用并重新打开它并尝试播放URI SharedPrederence中的Audio,就不会播放content uri

可以做些什么,以便我可以在SharedPreference中保存的Intent intent = new Intent(); intent.setType("audio/*"); intent.setAction(Intent.ACTION_GET_CONTENT); intent.addCategory(Intent.CATEGORY_OPENABLE); startActivityForResult(intent, 1); @Override protected void onActivityResult(int requestCode,int resultCode,Intent data){ if(requestCode == 1){ if(resultCode == RESULT_OK){ //the selected audio. String aud_uri = data.getData(); String quri = aud_uri.toString(); //Write to shared preferences SharedPreferences.Editor editor = sharedPref.edit(); editor.putString("quake_uri",quri); editor.commit(); // } } 播放音频?

从存储中获取uri的代码:

sharedPref = this.getPreferences(Context.MODE_PRIVATE);
String quri = sharedPref.getString("quake_uri", "defaultString");

从共享偏好中提取的代码

String audio = getIntent().getStringExtra("audio");
Uri uri = Uri.parse(audio);
Mediaplayer player = new MediaPlayer();

在通过意图传递uri之后播放不同活动中的音频的代码

05-26 12:53:44.103: E/MediaPlayer(17183): Unable to create media player
05-26 12:53:44.103: V/Error(17183): setDataSource failed.: status=0x80000000
05-26 12:53:44.113: W/System.err(17183): java.io.IOException: setDataSource failed.: status=0x80000000
05-26 12:53:44.113: W/System.err(17183):    at android.media.MediaPlayer.nativeSetDataSource(Native Method)
05-26 12:53:44.113: W/System.err(17183):    at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1061)

...

播放音频时的Logcat

\yii::t('app','Some message text');

我正在将uri传递给一个服务,该服务反过来打开活动,用意图从服务中传递uri播放音频

1 个答案:

答案 0 :(得分:0)

我为此苦了一段时间,我设法用'Intent.ACTION_OPEN_DOCUMENT'代替了'Intent.ACTION_GET_CONTENT'。

似乎,如果您希望对该文件的引用对多个会话有效,则需要使用打开文档操作。 我在以下Android文档中发现了这一点:https://developer.android.com/guide/topics/providers/document-provider

我意识到您几年前曾问过这个问题,但希望此信息仍然有用。