【问题标题】:Saving audio content Uri in sharedpreference to play later将音频内容 Uri 保存在 sharedpreference 中以便稍后播放
【发布时间】:2015-05-26 05:14:15
【问题描述】:

我正在尝试设计一个Alarm 应用程序,当设备摇晃时播放Audio

我正在使用IntentActivityForResult 中的“ACTION_GET_CONTENT”从文件系统中选择Audio。我能够获取content uri,将其保存在SharedPreference 中并在另一个Activity 上使用MediaPlayer 播放它,并在Intent 中传递URI

但是,一旦我关闭我的应用程序并重新打开它并尝试从URI 播放SharedPrederence 中的Audio,则不会播放Audio

如何才能播放保存在content uriSharedPreference 中的音​​频?

从存储中获取 uri 的代码:

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();
        //

    }
  }

从 sharedpreference 中获取的代码

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

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

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

...

不播放音频时的Logcat

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)

我将 uri 传递给一个服务,该服务反过来打开 Activity 以使用从服务传递的 uri 播放音频

【问题讨论】:

  • 分享一些可能的代码!
  • 我已添加代码
  • 你确定用“audio”键传递字符串吗?我在代码中看不到。
  • 是的.,.,.,.dialogIntent.putExtra("audio", AUDI);开始活动(对话意图);当我不关闭应用程序时正在播放音频..,.,但是如果我关闭并重新打开或从后台服务启动活动,则音频无法正常工作,.,.,为此提供了 logcat

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


【解决方案1】:

我为此苦苦挣扎了一段时间,我设法通过将“Intent.ACTION_GET_CONTENT”替换为“Intent.ACTION_OPEN_DOCUMENT”来使其正常工作。

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

我知道您几年前就问过这个问题,但希望这些信息仍然有用。

【讨论】:

    猜你喜欢
    • 2017-10-04
    • 2014-07-08
    • 1970-01-01
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 2011-10-03
    • 2019-11-26
    相关资源
    最近更新 更多