저장소 액세스 프레임 워크를 사용하여 파일을 삭제하려고 시도하지만 deleteDocument는 항상 false를 반환합니다. 나는 안드로이드 5.0을 가진 Asus zenfone 5를 가지고있다 나는 contentprovider와 uri가 맞는지 아닌지 궁금하다. URI는 문제는 당신이 Uri.parse을 사용한다는 것입니다 SDCard에 (/storage/MicroSD/test123123.apk)에서 경로저장소 액세스 프레임 워크 deleteDocument
String t = "";
void deleteFunc(String filepath) {
t = filepath;
Intent intent = new Intent("android.intent.action.OPEN_DOCUMENT_TREE");
intent.putExtra("android.content.extra.SHOW_ADVANCED", true);
startActivityForResult(intent, 1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Toast.makeText(this, "S: " + data.getData(), Toast.LENGTH_SHORT).show();
Toast.makeText(this, "D: " + t, Toast.LENGTH_SHORT).show();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
DocumentFile test = DocumentFile.fromFile(new File(t));
DocumentsContract.deleteDocument(getApplicationContext().getContentResolver(), Uri.parse(t));
Toast.makeText(this, "P: " + test.delete(), Toast.LENGTH_SHORT).show();
Toast.makeText(this, "T: " + DocumentsContract.deleteDocument(getApplicationContext().getContentResolver(), Uri.parse(t)), Toast.LENGTH_SHORT).show();
}
}
여기
는 deleteDocument
09-23 11:46:13.054 8216 8216 W Documents: Failed to delete document
09-23 11:46:13.054 8216 8216 W Documents: java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Bundle android.content.ContentProviderClient.call(java.lang.String, java.lang.String, android.os.Bundle)' on a null object reference
09-23 11:46:13.054 8216 8216 W Documents: at android.provider.DocumentsContract.deleteDocument(DocumentsContract.java:987)
09-23 11:46:13.054 8216 8216 W Documents: at android.provider.DocumentsContract.deleteDocument(DocumentsContract.java:971)
09-23 11:46:13.054 8216 8216 W Documents: at com.test.example.ResultActivity.onActivityResult(SourceFile:364)
09-23 11:46:13.054 8216 8216 W Documents: at android.app.Activity.dispatchActivityResult(Activity.java:6177)
09-23 11:46:13.054 8216 8216 W Documents: at android.app.ActivityThread.deliverResults(ActivityThread.java:3551)
09-23 11:46:13.054 8216 8216 W Documents: at android.app.ActivityThread.handleSendResult(ActivityThread.java:3598)
09-23 11:46:13.054 8216 8216 W Documents: at android.app.ActivityThread.access$1300(ActivityThread.java:147)
09-23 11:46:13.054 8216 8216 W Documents: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1330)
09-23 11:46:13.054 8216 8216 W Documents: at android.os.Handler.dispatchMessage(Handler.java:102)
09-23 11:46:13.054 8216 8216 W Documents: at android.os.Looper.loop(Looper.java:135)
09-23 11:46:13.054 8216 8216 W Documents: at android.app.ActivityThread.main(ActivityThread.java:5253)
09-23 11:46:13.054 8216 8216 W Documents: at java.lang.reflect.Method.invoke(Native Method)
09-23 11:46:13.054 8216 8216 W Documents: at java.lang.reflect.Method.invoke(Method.java:372)
09-23 11:46:13.054 8216 8216 W Documents: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
09-23 11:46:13.054 8216 8216 W Documents: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
왜 사용자가 OPEN_DOCUMENT_TREE을 (를) 사용하여 문서를 선택하게합니까? 그리고 그 후에 당신은 의도 된 데이터를 던져 버리므로 선택된 URL을 버리고 파일 경로를 사용하고 그 파일 경로에서 DocumentFile을 만들려고합니까? 모든 것이 말이되지 않습니다. 선택한 URL을 대신 사용해야합니다. 'test == null' 왜'NullPointerException'을 가지고 있는지 궁금해 할 때. – greenapps
또한'ACTION_OPEN_DOCUMENT_TREE'을 사용하면 '디렉토리'트리를 선택할 것입니다.'tag를 사용하여'storage-access-framework' 태그를 읽는 것이 좋습니다. – greenapps
난 그냥 전체 SD 카드에서 오른쪽 삭제 싶어요. 그런 다음 원하는 파일을 삭제하려고합니다. 가능한가? –