Android canRead()返回false

时间:2013-08-02 07:47:22

标签: java android

我从这样的意图中收到了一个文件:

Uri incoming = getIntent().getParcelableExtra(Intent.EXTRA_STREAM);
File toStream = new File(incoming.getPath());

我无法读取它,并且toStream.canRead()返回false。

我是从Gallery应用中的分享按钮收到的,其他应用似乎正好接收此文件。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);遇到了同样的问题。返回的路径类似于“ /document/primary:Download/a.c ”。当我使用该路径创建File对象时,它显示exists()canRead()false。我做的是,在“”之后的路径,即“下载/交流”并将其与“ / storage / emulated / 0 / <合并/强>”。所以最终路径是“ /storage/emulated/0/Download/a.c ”。内部存储工作得很好。

如果只有权限问题,请使用此功能。

ActivityCompat.requestPermissions(MainActivity.this, new String[]{READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE},THIS_REQUEST_CODE);

并覆盖此

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
{
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
} 

答案 1 :(得分:0)

尝试为您的应用添加权限READ_EXTERNAL_STORAGE

答案 2 :(得分:0)

SDK 23+中存在一个具有权限的新问题,即使您在清单中修复了它,也会导致您的读/写失败。即使您在尝试读/写时第一次遇到它,也会在权限下讨论它。 Link to thread where it is discussed