我从这样的意图中收到了一个文件:
Uri incoming = getIntent().getParcelableExtra(Intent.EXTRA_STREAM);
File toStream = new File(incoming.getPath());
我无法读取它,并且toStream.canRead()返回false。
我是从Gallery应用中的分享按钮收到的,其他应用似乎正好接收此文件。有什么想法吗?
答案 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