我有一个音频文件,我希望设备默认应用程序或任何其他可以处理音频文件的已安装应用程序播放此音频。所以我有这个:
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:未找到处理意图的活动{act = android.intent.action.MAIN cat = [android.intent.category.APP_MUSIC] dat = / storage / emulated / 0 / Audio.mp3 typ = audio / mpeg < / p>
我正在使用的设备(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();
}
}
答案 0 :(得分:1)
您可以尝试:
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);
File sdcard = Environment.getExternalStorageDirectory();
File audioFile = new File(sdcard.getPath() + "/Music/goodmorningandroid.mp3");
intent.setDataAndType(Uri.fromFile(audioFile), mimetype); //notice this line
已编辑: 需要读写sdcard的权限。