下面列出了android.content.ContentResolver#takePersistableUriPermission ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == REQUEST_CODE_DIR_CHOOSER) {
// final int takeFlags = data.getFlags() & Intent.FLAG_GRANT_READ_URI_PERMISSION & Intent.FLAG_GRANT_WRITE_URI_PERMISSION & Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION;
final ContentResolver resolver = getActivity().getContentResolver();
Uri uriTree = data.getData();
if (uriTree != null) {
int flags = Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
try {
resolver.releasePersistableUriPermission(MimiUtil.getSaveDir().getUri(), flags);
} catch (Exception e) {
if (BuildConfig.DEBUG) {
Log.e(LOG_TAG, "Error releasing previous persistable Uri permissions", e);
}
}
resolver.takePersistableUriPermission(uriTree, flags);
MimiUtil.setSaveDir(getActivity(), uriTree.toString());
}
}
}
/**
* Now determine if it is External Storage that must be handled by the
* {@link TreeUriScannerIntentService} or whether it is External Storage
* like an SD Card that can be directly accessed via the file system.
*/
public static void onActivityResult(Context context, Intent intent) {
if (intent == null) {
return;
}
Uri uri = intent.getData();
if (uri != null) {
if (Build.VERSION.SDK_INT >= 19) {
ContentResolver contentResolver = context.getContentResolver();
int perms = Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
contentResolver.takePersistableUriPermission(uri, perms);
}
String msg = String.format(context.getString(R.string.swap_toast_using_path), uri.toString());
Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
scan(context, uri);
}
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private static void grandPermission5(Context ctx, Uri data) {
DocumentFile docPath = DocumentFile.fromTreeUri(ctx, data);
if (docPath != null) {
final ContentResolver resolver = ctx.getContentResolver();
resolver.takePersistableUriPermission(data,
Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
}
}
public void onSelectSAFRootFolder(@NonNull final Uri treeUri) {
boolean isUriPermissionPeristed = false;
ContentResolver contentResolver = getContentResolver();
String treeUriId = DocumentsContract.getTreeDocumentId(treeUri);
for (UriPermission p : contentResolver.getPersistedUriPermissions()) {
if (DocumentsContract.getTreeDocumentId(p.getUri()).equals(treeUriId)) {
isUriPermissionPeristed = true;
Timber.d("Uri permission already persisted for %s", treeUri);
break;
}
}
if (!isUriPermissionPeristed) {
Timber.d("Persisting Uri permission for %s", treeUri);
// Release previous access permissions, if different than the new one
FileHelper.revokePreviousPermissions(contentResolver, treeUri);
// Persist new access permission
contentResolver.takePersistableUriPermission(treeUri,
Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
}
DocumentFile selectedFolder = DocumentFile.fromTreeUri(this, treeUri);
if (selectedFolder != null) {
String folderName = selectedFolder.getName();
if (null == folderName) folderName = "";
// Make sure we detect the Hentoid folder if it's a child of the selected folder
if (!ImportHelper.isHentoidFolderName(folderName))
selectedFolder = ImportHelper.getExistingHentoidDirFrom(this, selectedFolder);
}
// If no existing hentoid folder is detected, tell the user to select it again
if (null == selectedFolder || null == selectedFolder.getName() || !ImportHelper.isHentoidFolderName(selectedFolder.getName()))
{
ToastUtil.toast("Please select an existing Hentoid folder. Its location is displayed on screen.");
return;
}
scanLibrary(selectedFolder);
}
public static @Result
int setAndScanFolder(
@NonNull final Context context,
@NonNull final Uri treeUri,
boolean askScanExisting,
@Nullable final ImportOptions options) {
boolean isUriPermissionPeristed = false;
ContentResolver contentResolver = context.getContentResolver();
String treeUriId = DocumentsContract.getTreeDocumentId(treeUri);
for (UriPermission p : contentResolver.getPersistedUriPermissions()) {
if (DocumentsContract.getTreeDocumentId(p.getUri()).equals(treeUriId)) {
isUriPermissionPeristed = true;
Timber.d("Uri permission already persisted for %s", treeUri);
break;
}
}
if (!isUriPermissionPeristed) {
Timber.d("Persisting Uri permission for %s", treeUri);
// Release previous access permissions, if different than the new one
FileHelper.revokePreviousPermissions(contentResolver, treeUri);
// Persist new access permission
contentResolver.takePersistableUriPermission(treeUri,
Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
}
DocumentFile docFile = DocumentFile.fromTreeUri(context, treeUri);
if (null == docFile || !docFile.exists()) {
Timber.e("Could not find the selected file %s", treeUri.toString());
return Result.INVALID_FOLDER;
}
DocumentFile hentoidFolder = addHentoidFolder(context, docFile);
if (null == hentoidFolder) {
Timber.e("Could not create Hentoid folder in root %s", docFile.getUri().toString());
return Result.CREATE_FAIL;
}
if (!FileHelper.checkAndSetRootFolder(context, hentoidFolder, true)) {
Timber.e("Could not set the selected root folder %s", hentoidFolder.getUri().toString());
return Result.INVALID_FOLDER;
}
if (hasBooks(context)) {
if (!askScanExisting) {
runImport(context, options);
return Result.OK_LIBRARY_DETECTED;
} else return Result.OK_LIBRARY_DETECTED_ASK;
} else {
// New library created - drop and recreate db (in case user is re-importing)
new ObjectBoxDAO(context).deleteAllLibraryBooks(true);
return Result.OK_EMPTY_FOLDER;
}
}