原代碼問題
Uri myuri = Uri.parse("file:///sdcard0/hua.mp3");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(myuri, "audio/mp3");
startActivity(intent);
常見失效原因
- file:// 協議限制:Android 7.0+ (API 24+) 禁止跨應用共享
file:// URI,會拋 FileUriExposedException。需用 FileProvider 生成 content:// URI。
- 文件不存在或路徑錯誤:
/sdcard0/ 可能非真實路徑,應用 Environment.getExternalStorageDirectory()。
- MP3 格式不兼容:嘗試播放其他 MP3 文件排除編碼問題。
- 無默認播放器:設備未安裝支持
audio/mp3 的應用。
修正代碼 (FileProvider)
// AndroidManifest.xml
// res/xml/file_paths.xml
// Java
File file = new File(Environment.getExternalStorageDirectory(), "hua.mp3");
Uri uri = FileProvider.getUriForFile(this, getPackageName()+".fileprovider", file);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uri, "audio/mpeg");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(intent);