2

我有一种情况,我知道文件的路径,并以这种方式解决它:

File f = new File(Environment.getExternalStorageDirectory(), "image.jpg");

然后从中创建一个 Uri:

Uri uri = Uri.fromFile(f);

但是,这个 Uri 会打印出如下内容:

file://.....

但我想要:

content://.....

“为什么?”。因为某些应用程序对方案敏感,例如 Facebook。如果您在附加图像时将文件方案 Uri 传递给 Facebook,它什么也不做。如果您将内容方案 Uri 传递给同一图像,则它可以完美运行。

那么如何通过知道绝对路径或将文件方案 Uri 转换为内容方案 Uri 来获取内容 Uri?

编辑(2012 年 8 月 24 日):最新的 Facebook 应用程序更新“解决”了这个问题,只需删除选择器,只显示图库。在 Facebook 中,您根本无法再通过意图进行选择。

4

2 回答 2

3

到目前为止,我最好的选择似乎是这种扫描文件的方法,然后返回带有内容方案的 Uri:

File f = new File(Environment.getExternalStorageDirectory(), "image.jpg");

MediaScannerConnection.scanFile(this, new String[]{f.toString()}, null, new MediaScannerConnection.OnScanCompletedListener() {
    public void onScanCompleted(String path, Uri contentUri) {
        // TODO: Do something useful with contentUri, which now has content-scheme
    }
});
于 2012-08-20T06:22:02.377 回答
1

试试这个'

Uri uri = Uri.parse(f);

而不是 Uri uri = Uri.fromFile(f);

于 2012-08-20T04:58:22.613 回答