如何解决如何使用存储访问框架删除“Android/data”中的文件
我正在尝试制作一个应用程序,该应用程序可以使用 SAF 直接删除 Android/数据中的文件(而不是文件夹),而无需询问用户(按下按钮删除这些文件)。
我在 Android Developer 中搜索了一些信息,发现需要FLAG_SUPPORTS_DELETE
这是我下面的代码
private void requestAccessAndroidData(Activity activity){
try {
Uri uri = Uri.parse("content://com.android.externalstorage.documents/document/primary%3AAndroid%2Fdata%2Fcom.garena.game.kgtw%2Ffiles");
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI,uri);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION
| Intent.FLAG_GRANT_WRITE_URI_PERMISSION
| Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
activity.startActivityForResult(intent,6666);
} catch (Exception e) {
e.printstacktrace();
}
}
@Override
protected void onCreate(Bundle _savedInstanceState) {
super.onCreate(_savedInstanceState);
setContentView(R.layout.skin);
initialize(_savedInstanceState);
initializeLogic();
AlertDialog.Builder builder = new AlertDialog.Builder(SkinActivity.this);
builder.setTitle("Hint")
.setMessage("Request permission of Android/data")
.setCancelable(false)
.setPositiveButton("Press me to ",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,int id) {
Uri uri = Uri.parse("content://com.android.externalstorage.documents/document/primary%3AAndroid%2Fdata%2Fcom.garena.game.kgtw%2Ffiles");
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI,uri);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION
| Intent.FLAG_GRANT_WRITE_URI_PERMISSION
| Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
startActivityForResult(intent,6666);
}
}); AlertDialog alert = builder.create();
alert.show();
}
@RequiresApi(api = Build.VERSION_CODES.N)
private Object[] getDocumentValues(
String[] projection,DocumentFile documentFile) {
Object[] row = new Object[projection.length];
for (int i = 0; i < projection.length; ++i) {
switch (projection[i]) {
case DocumentsContract.Document.COLUMN_FLAGS:
int flag = documentFile.canWrite() ? DocumentsContract.Document.FLAG_DIR_SUPPORTS_CREATE : 0;
flag |= DocumentsContract.Document.FLAG_SUPPORTS_WRITE;
flag |= DocumentsContract.Document.FLAG_SUPPORTS_DELETE;
flag |= DocumentsContract.Document.FLAG_SUPPORTS_REMOVE;
row[i] = flag;
break;
}
}
return row;
}
private void initialize(Bundle _savedInstanceState) {
button1 = (Button) findViewById(R.id.button1);
//Press this to delete files that it must EXIST
button1.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View _view) {
Uri uri = Uri.parse("content://com.android.externalstorage.documents/tree/primary:Android/data/com.garena.game.kgtw/files/Resources/1.40.1/Prefab_Characters/AllActorAction.pkg.bytes");
//the file "AllActorAction.pkg.bytes" is what I want to delete
getContentResolver().delete(uri,null,null);
}
});
但是,当我尝试在 Android 11 上运行时,当我按下此按钮时,应用程序停止工作。
我想弄清楚哪一步是错误的。希望任何有这方面专业知识的人都可以帮助我。 ^_^
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。