如何在Android中将资产文件粘贴到授权目录



我正在创建一个应用程序,它将文件粘贴到游戏的android数据文件夹中。但我不知道如何在获得目录访问权限后粘贴资产文件。以下是我请求目录访问的方法:

private void requestAccess() {
StorageManager sm = (StorageManager) getSystemService(Context.STORAGE_SERVICE);
Intent intent = sm.getPrimaryStorageVolume().createOpenDocumentTreeIntent();
String startDir = "Android/data/com.game/file/configuration/xx";
Uri uri = intent.getParcelableExtra("android.provider.extra.INITIAL_URI");
String scheme = uri.toString();
intent.addCategory(Intent.ACTION_CREATE_DOCUMENT);

scheme = scheme.replace("/root/", "/document/");
startDir = startDir.replace("/", "%2F");
scheme += "%3A" + startDir;
uri = Uri.parse(scheme);

intent.putExtra("android.provider.extra.INITIAL_URI", uri);

startActivityForResult(intent, 0);

}

上面的代码很有效,我可以访问目录,但我不知道如何从onActivityResult方法粘贴任何资产文件。

protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 0 && resultCode == RESULT_OK){
Toast.makeText(getApplicationContext(), "Granted Permission", Toast.LENGTH_SHORT).show();

if (data != null){
Uri dataUri = data.getData();
if (dataUri.getPath().endsWith("Android")){
Toast.makeText(getApplicationContext(), "Result:" + dataUri.getPath(), Toast.LENGTH_SHORT).show();
final int flags = data.getFlags() & Intent.FLAG_GRANT_READ_URI_PERMISSION;
getContentResolver().takePersistableUriPermission(dataUri, flags);
} else {
Toast.makeText(getApplicationContext(), "Wrong Path", Toast.LENGTH_SHORT).show();
}
Toast.makeText(getApplicationContext(), "Done", Toast.LENGTH_SHORT).show();


}
} else {
Toast.makeText(getApplicationContext(), "Denied", Toast.LENGTH_SHORT).show();
}
}

使用IO api写入目标文件

例如:步骤1,将资产文件读取到InputStream

InputStream is = context.getAssets().open("assets_file_name");

第2步,将InputStream写入目标文件,也可以使用FileIOUitls来完成

FileIOUtils.writeFileFromIS(desFilePath, is);