我正在设计一个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播放音频
答案 0 :(得分:0)
我为此苦了一段时间,我设法用'Intent.ACTION_OPEN_DOCUMENT'代替了'Intent.ACTION_GET_CONTENT'。
似乎,如果您希望对该文件的引用对多个会话有效,则需要使用打开文档操作。 我在以下Android文档中发现了这一点:https://developer.android.com/guide/topics/providers/document-provider
我意识到您几年前曾问过这个问题,但希望此信息仍然有用。