在我的应用程序中,我想制作一个选择器,为用户提供选择音乐的选择。我想使用原生的android选择器。我使用以下代码打开本机安卓音乐选择器:
final Intent intent2 = new Intent(Intent.ACTION_PICK);
intent2.setType("audio/*");
startActivityForResult(intent2, 1);
但是当我执行它时,我得到一个ActivityNotFoundException和这个错误消息:
“您的手机没有可用于选择文件的音乐库。请尝试发送不同类型的文件”
我在那里做错了吗?
答案 0 :(得分:17)
这对我很有用:
public static final int REQ_PICK_AUDIO = 10001;
//------
Intent audio_picker_intent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI);
activity.startActivityForResult(audio_picker_intent, REQ_PICK_AUDIO);
使用Intent.ACTION_GET_CONTENT的更一般意图可以为用户提供许多选项来选择音频文件(Astro文件管理器等)。但是,用户可以选择任何文件,不一定是音频文件。我想要一个只允许用户从他们的媒体中选择一个音频文件。这就行了。
答案 1 :(得分:6)
如果您查看最新核心音乐应用的AndroidManifest.xml文件,可能会对您提供的选项有所了解。例如:
<activity android:name="com.android.music.MusicPicker"
android:label="@string/music_picker_title" android:exported="true" >
<!-- First way to invoke us: someone asks to get content of
any of the audio types we support. -->
<intent-filter>
<action android:name="android.intent.action.GET_CONTENT" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.OPENABLE" />
<data android:mimeType="audio/*"/>
<data android:mimeType="application/ogg"/>
<data android:mimeType="application/x-ogg"/>
</intent-filter>
<!-- Second way to invoke us: someone asks to pick an item from
some media Uri. -->
<intent-filter>
<action android:name="android.intent.action.PICK" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.OPENABLE" />
<data android:mimeType="vnd.android.cursor.dir/audio"/>
</intent-filter>
</activity>
基于此,您可以先尝试
final Intent intent2 = new Intent(Intent.ACTION_GET_CONTENT);
intent2.setType("audio/*");
startActivityForResult(intent2, 1);
看看它是否符合您的需求。您还可以查看添加上述示例中提到的类别标记,以帮助缩小搜索范围(例如,OPENABLE
应仅过滤为可以作为流打开的内容。
答案 2 :(得分:0)
有些事情可能会有效
// some Intent that points to whatever you like to play
Intent play = new Intent(Intent.ACTION_VIEW);
play.setData(Uri.fromFile(new File("/path/to/file")));
// create chooser for that intent
try {
Intent i = Intent.createChooser(play, "Play Music");
c.startActivity(i);
} catch(ActivityNotFoundException ex) {
// if no app handles it, do nothing
}