前言
我们在运动中一般都会带上耳机听歌,那在计步器中跑步运动的时候,自然也就需要打开喜欢的音乐播放器。为了方便,我就在计步器内加了个按钮,作用是调用已安装的音乐播放器,可是我怎么查,都找不到可以打开的APP,但我的手机上明明有音乐播放器呀。折腾了半天,我只查到了系统自带的音乐播放器,别的都找不到。直到我看到了<queries>标签,才恍然大悟。
实现
AndroidManifest.xml文件中
...
<queries>
<intent>
<action android:name="android.intent.action.VIEW"/>
<data android:scheme="audio/*"/>
</intent>
<intent>
<action android:name="android.intent.action.MEDIA_BUTTON"/>
</intent>
</queries>
<application
...
具体实现:
private void getMedia(){
String TAG = "music";
Log.i(TAG, "test: ");
// 创建一个 Intent 对象,设置 action 为 ACTION_VIEW,type 为 audio/*
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse("file://"),"audio/mp3");
// 查询所有可以处理该 Intent 的应用程序
PackageManager pm = getPackageManager();
List<ResolveInfo> resolveInfos = pm.queryIntentActivities(intent, 0);
List<String> apps = new ArrayList<>();
// 遍历查询结果,获取所有可以处理音频的应用程序的信息
for (ResolveInfo resolveInfo : resolveInfos) {
String packageName = resolveInfo.activityInfo.packageName;
String className = resolveInfo.activityInfo.name;
String label = resolveInfo.loadLabel(pm).toString();
// 处理查询结果
Log.i(TAG, "packageName: "+packageName);
Log.i(TAG, "className: "+className);
Log.i(TAG, "label: "+label);
apps.add(label);
}
}
可以看到,在加了<query>标签里的内容后,就都能拿到了