【发布时间】:2018-10-21 06:16:34
【问题描述】:
我有一个音频文件,我希望设备默认应用或任何其他可以处理音频文件的已安装应用播放此音频。所以我有这个:
private void playMedia(String mediaPath) {
try {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_APP_MUSIC);
String extension = FilenameUtils.getExtension(mediaPath);
String mimetype = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
intent.setDataAndType(Uri.parse(mediaPath), mimetype);
startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
}
如果我不设置setDataAndType,我的两个玩家会回复,
但是如果我设置setDataAndType:
ActivityNotFoundException: 找不到处理 Intent 的 Activity { act=android.intent.action.MAIN cat=[android.intent.category.APP_MUSIC] dat=/storage/emulated/0/Audio.mp3 typ=audio/mpeg
我正在使用的设备(API 24)有几个播放器,例如mxPlayer,playerPro,shareIt Music,google play music,default player ...
我在这里做错了吗?
更新(最终答案)
正如接受的答案所建议的那样,我尝试使用文件,所以工作代码是:
private void playMedia() {
try {
Intent intent = new Intent(Intent.ACTION_VIEW);
String extension = FilenameUtils.getExtension(inPath);
String mimetype = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
String type = null;
try {
type = mimetype.split("/")[0].toLowerCase().trim();
} catch (Exception e) {
e.printStackTrace();
}
if (type==null)
type="*";
File file = new File(inPath);
intent.setDataAndType(Uri.fromFile(file), type+"/*");
startActivity(Intent.createChooser(intent, FilenameUtils.getBaseName(inPath)));
} catch (Exception e) {
e.printStackTrace();
}
}
【问题讨论】: