我正在尝试打开一个现有文件,或者在外部使用SAF创建一个新文件,而用户不需要安装除我的apk之外的任何其他文件。
在我的Android10像素3上,ACTION_OPEN_DOCUMENT_TREE抛出一个异常,指示没有活动来处理这个(我想知道为什么会这样?)。android.content.ActivityNotFoundException:没有找到处理Intent{act=android.intent.action.OPEN_DOCUMENT_TREEcat=[android.intent.category.OPENABLE]typ=vnd.android.document/directory(有额外功能)}
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, "content://com.android.externalstorage.documents/document/primary:.myfolder");
intent.setType(DocumentsContract.Document.MIME_TYPE_DIR);
activity.startActivityForResult(intent, READ_DIRECTORY_CODE);
ACTION_OPEN_DOCUMENT和ACTION_CREATE_DOCUMENT似乎很合适。
但是,如果我:
>
使用ACTION_OPEN_DOCUMENT启动意图,并且文件不存在,用户无法选择任何内容或创建新文件。
final Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, "content://com.android.externalstorage.documents/document/primary:.myfolder/myfile.json");
intent.putExtra(Intent.EXTRA_TITLE, "myfile.json");
intent.setType("application/json");
activity.startActivityForResult(intent, READ_DIRECTORY_CODE);
用ACTION_CREATE_DOCUMENT启动intent,并且文件确实存在,用户只能选择创建一个新文件来覆盖旧文件。
Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT); //Opens the create file UI
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, "content://com.android.externalstorage.documents/document/primary:.myfolder");
intent.putExtra(Intent.EXTRA_TITLE, "myfile.json");
intent.setType("application/json");
activity.startActivityForResult(intent, READ_DIRECTORY_CODE);
如果我能在开始意图之前知道文件夹和文件的存在,我会有一些有用的东西。我似乎无法使用 DocumentFile.fromTreeUri(activity, uri) 注意,我从 open 命令中获取了 URI,当时文件确实存在。即。“content://com.android.externalstorage.documents/document/primary:.myfolder”当我尝试时,我只得到无效的URI异常。
try {
Uri folderUri = Uri.parse("content://com.android.externalstorage.documents/document/primary:.myfolder");
exists = DocumentFile.fromTreeUri(activity, folderUri).exists(); //This line throws the URI exception
} catch (Exception e) {
Logger.d(TAG, e.getMessage());
}
关于这些障碍的任何想法?
以下@blackapps评论给了我对ACTION_OPEN_DOCUMENT_TREE部分问题的答案。
由于语句 intent.setType(DocumentsContract.Document.MIME_TYPE_DIR;),您会收到此异常。删除它。此外,CATEGORY_OPENABLE在那里也没有用。
(编辑)由@blackapps回答:将“w”改为“wt”。而且奏效了! //-----------------------------------// 我已经尝试使用直接路径,它工作正确。我认为原因是它创建了一个新的文件来替换原来的文件。然而,我只是不想使用直接路径。 我已经尝试了PrintWriter清除内容,但它也需要直接路径创建文件,然后放入PrintWriter。 我已经尝试过使用Outp
我是Android上存储访问框架的新手。 谢谢
我有一个Xperia Neo V没有任何内部存储--只有一个SD卡作为外部存储,而Galaxy S3有内部和外部存储。 使用此函数时只能访问内部存储(S3)上的文件,但Xperia Neo V没有问题。 如何访问内部和外部存储上的文件?
@override protected void onActivityResult(int requestCode,int resultCode,@nullable Intent data){super.onActivityResult(requestCode,resultCode,data);if(requestCode==REQUEST_CODE_STORAGE_ACCESS){ }} 我可以
我在一个应用程序上工作,我想访问“/存储/仿真/0/Android/媒体/com.whatsapp/WhatsApp/Media/.Statuses”来为我的应用程序获取状态文件夹中的数据。
我试图找到所有的mp3文件在存储,但我的应用程序崩溃,我使用logcat看看为什么和问题的权限访问外部存储,但我已经把权限在清单,我不知道为什么不断崩溃。第一个错误: 03-06 14:55:24.553:E/dex2OAT(2796):创建oat文件失败:/data/dalvik-cache/x86/data@app@felipe.cursoandroid.com.musicbox-2@spli