首页 文章

使用Intent.ACTION_SEND进行文件共享会在BBM上拒绝访问

提问于
浏览
2

我正在尝试共享我的应用程序保存的音频文件 . 该文件将添加到媒体商店,以便所有应用程序都可以访问它 .

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,雅虎邮件,Whatsapp,...除了BBM,它提供访问被拒绝 . 我需要做些什么才能让它在BBM上运行?

谢谢你的帮助 .

UPDATE:

我用了

Uri fileUri = Uri.parse("content://" + recording.getFilePath());

代替

Uri fileUri = Uri.parse("file:///" + recording.getFilePath());

它适用于BBM但不适用于其他应用程序

那么解析的URI与“file:///”和“content://”之间的区别是什么?我如何使用它来获得所有应用程序的共享?

Error on BBM

1 回答

  • 2

    解决方案是使用实际文件初始化Uri对象 .

    File recordingFile = new File(recording.getFilePath());
    Uri fileUri = Uri.fromFile(recordingFile);
    

    这适用于可以共享文件的所有应用程序 .

相关问题