我使用Android ACTION_CREATE_DOCUMENT
来选择保存PDF文件的位置。在获得uri
并写入文件(如下面的代码所做的)之后,我希望显示一个Snackbar
,其操作设置为打开文件的位置。
为了明确起见,我不想打开文件本身,而是帮助用户使用文件资源管理器应用程序定位文件。是否有"developer.android.com“推荐的方法来做到这一点?当前代码如下所示。
private void getSaveLocation() {
Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("application/pdf");
intent.putExtra(Intent.EXTRA_TITLE, "MyFile.pdf");
startActivityForResult(intent, MY_CODE);
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != Activity.RESULT_OK || data == null || data.getData() == null) return;
Uri uri = data.getData();
OutputStream out = getContext().getContentResolver().openOutputStream(uri);
// write the pdf to out
try {
out.close();
showSnackbar(uri);
} catch (IOException e) {
e.printStackTrace();
}
}
void showSnackbar(Uri uri) {
Snackbar snackbar = Snackbar.make(getView(), "Saved to MyFile.pdf", Snackbar.LENGTH_LONG);
snackbar.setAction("Locate file", new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
// NEED TO SETUP THE INTENT CORRECTLY USING uri
activity.startActivity(intent);
}
});
snackbar.show();
}
发布于 2022-08-16 23:39:50
是否有一种"developer.android.com“推荐的方法来做到这一点?
不是的。
首先,没有标准的“在特定位置打开文件资源管理器”Intent
操作。
其次,不需要使用ACTION_OPEN_DOCUMENT
来打开一个文档,该文档是可以探索的内容的一部分。用户可以使用它来访问其他内容(加密的容器、云存储等)中的文档。这不一定是文件管理器可以访问的。
发布于 2022-08-17 05:08:41
如果您使用uri,ACTION_CREATE_DOCUMENT会为您提供文件的uri和该文件的读写权限。
即使您能够为父目录解码uri,也无法使用uri作为读写权限。
https://stackoverflow.com/questions/73381273
复制相似问题