我正在尝试共享我的应用程序保存的音频文件。该文件已添加到媒体商店,因此所有应用都可以访问它。
Intent mediaScannerIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri fileContentUri = Uri.fromFile(finalFile);
mediaScannerIntent.setData(fileContentUri);
this.sendBroadcast(mediaScannerIntent);
我使用Intent.ACTION_SEND将文件共享给其他应用:
public void shareRecording(View view) {
Intent i = new Intent(Intent.ACTION_SEND);
i.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
i.setType("audio/mp3");
i.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///" + recording.getFilePath()));
try {
startActivity(Intent.createChooser(i, "Share " + recording.getName()));
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(this, "There are no app installed to share your audio file.", Toast.LENGTH_SHORT).show();
}
}
所有应用程序都能正常运行,如GMail,Yahoo mail,Whatsapp,...... 除BBM外,它拒绝访问。 我需要做些什么才能让它在BBM上运行?
感谢您的帮助。
更新
我用过
Uri fileUri = Uri.parse("content://" + recording.getFilePath());
而不是
Uri fileUri = Uri.parse("file:///" + recording.getFilePath());
它适用于BBM但不适用于其他应用
那么解析的URI与“file:///”和“content://”之间的区别是什么? 我如何使用它来使所有应用程序的共享工作?
答案 0 :(得分:2)
解决方案是使用实际文件初始化Uri对象。
File recordingFile = new File(recording.getFilePath());
Uri fileUri = Uri.fromFile(recordingFile);
这适用于所有可以共享文件的应用。