android.content.Intent#FLAG_GRANT_WRITE_URI_PERMISSION源码实例Demo

下面列出了android.content.Intent#FLAG_GRANT_WRITE_URI_PERMISSION 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: keemob   文件: FileChooser.java
@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {

    if (resultCode != Activity.RESULT_OK) {
        return;
    }

    if (requestCode == CODE_CHOOSE_FILE) {
        Uri uri = intent.getData();

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            final int takeFlags = intent.getFlags()
                    & (Intent.FLAG_GRANT_READ_URI_PERMISSION
                    | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
            cordova.getActivity().getContentResolver().takePersistableUriPermission(uri, takeFlags);
        }

        callbackContext.success(asFile(uri));
        callbackContext = null;
    }

    super.onActivityResult(requestCode, resultCode, intent);
}
 
源代码2 项目: android_9.0.0_r45   文件: UriPermission.java
/**
 * @return if mode changes should trigger persisting.
 */
boolean takePersistableModes(int modeFlags) {
    modeFlags &= (Intent.FLAG_GRANT_READ_URI_PERMISSION
            | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

    if ((modeFlags & persistableModeFlags) != modeFlags) {
        Slog.w(TAG, "Requested flags 0x"
                + Integer.toHexString(modeFlags) + ", but only 0x"
                + Integer.toHexString(persistableModeFlags) + " are allowed");
        return false;
    }

    final int before = persistedModeFlags;
    persistedModeFlags |= (persistableModeFlags & modeFlags);

    if (persistedModeFlags != 0) {
        persistedCreateTime = System.currentTimeMillis();
    }

    updateModeFlags();
    return persistedModeFlags != before;
}
 
源代码3 项目: android_9.0.0_r45   文件: DocumentsProvider.java
private static int getCallingOrSelfUriPermissionModeFlags(Context context, Uri uri) {
    // TODO: move this to a direct AMS call
    int modeFlags = 0;
    if (context.checkCallingOrSelfUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION)
            == PackageManager.PERMISSION_GRANTED) {
        modeFlags |= Intent.FLAG_GRANT_READ_URI_PERMISSION;
    }
    if (context.checkCallingOrSelfUriPermission(uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
            == PackageManager.PERMISSION_GRANTED) {
        modeFlags |= Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
    }
    if (context.checkCallingOrSelfUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION
            | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION)
            == PackageManager.PERMISSION_GRANTED) {
        modeFlags |= Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION;
    }
    return modeFlags;
}
 
源代码4 项目: AndroidComponentPlugin   文件: ContextImpl.java
@Override
public int checkUriPermission(Uri uri, String readPermission,
        String writePermission, int pid, int uid, int modeFlags) {
    if (DEBUG) {
        Log.i("foo", "checkUriPermission: uri=" + uri + "readPermission="
                + readPermission + " writePermission=" + writePermission
                + " pid=" + pid + " uid=" + uid + " mode" + modeFlags);
    }
    if ((modeFlags&Intent.FLAG_GRANT_READ_URI_PERMISSION) != 0) {
        if (readPermission == null
                || checkPermission(readPermission, pid, uid)
                == PackageManager.PERMISSION_GRANTED) {
            return PackageManager.PERMISSION_GRANTED;
        }
    }
    if ((modeFlags&Intent.FLAG_GRANT_WRITE_URI_PERMISSION) != 0) {
        if (writePermission == null
                || checkPermission(writePermission, pid, uid)
                == PackageManager.PERMISSION_GRANTED) {
            return PackageManager.PERMISSION_GRANTED;
        }
    }
    return uri != null ? checkUriPermission(uri, pid, uid, modeFlags)
            : PackageManager.PERMISSION_DENIED;
}
 
源代码5 项目: AndroidComponentPlugin   文件: ContextImpl.java
@Override
public int checkUriPermission(Uri uri, String readPermission,
        String writePermission, int pid, int uid, int modeFlags) {
    if (DEBUG) {
        Log.i("foo", "checkUriPermission: uri=" + uri + "readPermission="
                + readPermission + " writePermission=" + writePermission
                + " pid=" + pid + " uid=" + uid + " mode" + modeFlags);
    }
    if ((modeFlags&Intent.FLAG_GRANT_READ_URI_PERMISSION) != 0) {
        if (readPermission == null
                || checkPermission(readPermission, pid, uid)
                == PackageManager.PERMISSION_GRANTED) {
            return PackageManager.PERMISSION_GRANTED;
        }
    }
    if ((modeFlags&Intent.FLAG_GRANT_WRITE_URI_PERMISSION) != 0) {
        if (writePermission == null
                || checkPermission(writePermission, pid, uid)
                == PackageManager.PERMISSION_GRANTED) {
            return PackageManager.PERMISSION_GRANTED;
        }
    }
    return uri != null ? checkUriPermission(uri, pid, uid, modeFlags)
            : PackageManager.PERMISSION_DENIED;
}
 
源代码6 项目: android_9.0.0_r45   文件: ContextImpl.java
@Override
public int checkUriPermission(Uri uri, String readPermission,
        String writePermission, int pid, int uid, int modeFlags) {
    if (DEBUG) {
        Log.i("foo", "checkUriPermission: uri=" + uri + "readPermission="
                + readPermission + " writePermission=" + writePermission
                + " pid=" + pid + " uid=" + uid + " mode" + modeFlags);
    }
    if ((modeFlags&Intent.FLAG_GRANT_READ_URI_PERMISSION) != 0) {
        if (readPermission == null
                || checkPermission(readPermission, pid, uid)
                == PackageManager.PERMISSION_GRANTED) {
            return PackageManager.PERMISSION_GRANTED;
        }
    }
    if ((modeFlags&Intent.FLAG_GRANT_WRITE_URI_PERMISSION) != 0) {
        if (writePermission == null
                || checkPermission(writePermission, pid, uid)
                == PackageManager.PERMISSION_GRANTED) {
            return PackageManager.PERMISSION_GRANTED;
        }
    }
    return uri != null ? checkUriPermission(uri, pid, uid, modeFlags)
            : PackageManager.PERMISSION_DENIED;
}
 
源代码7 项目: AndroidComponentPlugin   文件: ContextImpl.java
@Override
public int checkUriPermission(Uri uri, String readPermission,
        String writePermission, int pid, int uid, int modeFlags) {
    if (DEBUG) {
        Log.i("foo", "checkUriPermission: uri=" + uri + "readPermission="
                + readPermission + " writePermission=" + writePermission
                + " pid=" + pid + " uid=" + uid + " mode" + modeFlags);
    }
    if ((modeFlags&Intent.FLAG_GRANT_READ_URI_PERMISSION) != 0) {
        if (readPermission == null
                || checkPermission(readPermission, pid, uid)
                == PackageManager.PERMISSION_GRANTED) {
            return PackageManager.PERMISSION_GRANTED;
        }
    }
    if ((modeFlags&Intent.FLAG_GRANT_WRITE_URI_PERMISSION) != 0) {
        if (writePermission == null
                || checkPermission(writePermission, pid, uid)
                == PackageManager.PERMISSION_GRANTED) {
            return PackageManager.PERMISSION_GRANTED;
        }
    }
    return uri != null ? checkUriPermission(uri, pid, uid, modeFlags)
            : PackageManager.PERMISSION_DENIED;
}
 
源代码8 项目: android_9.0.0_r45   文件: UriPermission.java
boolean releasePersistableModes(int modeFlags) {
    modeFlags &= (Intent.FLAG_GRANT_READ_URI_PERMISSION
            | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

    final int before = persistedModeFlags;

    persistableModeFlags &= ~modeFlags;
    persistedModeFlags &= ~modeFlags;

    if (persistedModeFlags == 0) {
        persistedCreateTime = INVALID_TIME;
    }

    updateModeFlags();
    return persistedModeFlags != before;
}
 
源代码9 项目: AndroidComponentPlugin   文件: ContextImpl.java
@Override
public int checkUriPermission(Uri uri, String readPermission,
        String writePermission, int pid, int uid, int modeFlags) {
    if (DEBUG) {
        Log.i("foo", "checkUriPermission: uri=" + uri + "readPermission="
                + readPermission + " writePermission=" + writePermission
                + " pid=" + pid + " uid=" + uid + " mode" + modeFlags);
    }
    if ((modeFlags&Intent.FLAG_GRANT_READ_URI_PERMISSION) != 0) {
        if (readPermission == null
                || checkPermission(readPermission, pid, uid)
                == PackageManager.PERMISSION_GRANTED) {
            return PackageManager.PERMISSION_GRANTED;
        }
    }
    if ((modeFlags&Intent.FLAG_GRANT_WRITE_URI_PERMISSION) != 0) {
        if (writePermission == null
                || checkPermission(writePermission, pid, uid)
                == PackageManager.PERMISSION_GRANTED) {
            return PackageManager.PERMISSION_GRANTED;
        }
    }
    return uri != null ? checkUriPermission(uri, pid, uid, modeFlags)
            : PackageManager.PERMISSION_DENIED;
}
 
源代码10 项目: AndroidComponentPlugin   文件: ContextImpl.java
private String uriModeFlagToString(int uriModeFlags) {
    StringBuilder builder = new StringBuilder();
    if ((uriModeFlags & Intent.FLAG_GRANT_READ_URI_PERMISSION) != 0) {
        builder.append("read and ");
    }
    if ((uriModeFlags & Intent.FLAG_GRANT_WRITE_URI_PERMISSION) != 0) {
        builder.append("write and ");
    }
    if ((uriModeFlags & Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION) != 0) {
        builder.append("persistable and ");
    }
    if ((uriModeFlags & Intent.FLAG_GRANT_PREFIX_URI_PERMISSION) != 0) {
        builder.append("prefix and ");
    }

    if (builder.length() > 5) {
        builder.setLength(builder.length() - 5);
        return builder.toString();
    } else {
        throw new IllegalArgumentException("Unknown permission mode flags: " + uriModeFlags);
    }
}
 
源代码11 项目: openlauncher   文件: ShareUtil.java
/**
 * Request edit of image (by image editor/viewer - for example to crop image)
 *
 * @param file File that should be edited
 */
public void requestPictureEdit(final File file) {
    Uri uri = getUriByFileProviderAuthority(file);
    int flags = Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION;

    Intent intent = new Intent(Intent.ACTION_EDIT);
    intent.setDataAndType(uri, "image/*");
    intent.addFlags(flags);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
    intent.putExtra(EXTRA_FILEPATH, file.getAbsolutePath());

    for (ResolveInfo resolveInfo : _context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY)) {
        String packageName = resolveInfo.activityInfo.packageName;
        _context.grantUriPermission(packageName, uri, flags);
    }
    _context.startActivity(Intent.createChooser(intent, null));
}
 
源代码12 项目: ImagePicker   文件: DocumentPicker.java
@Nullable
@Override
public Uri onResult(Intent data) {
    Uri imageUri = data.getData();
    if (imageUri == null) {
        return null;
    }
    if (isUpAPI19()) {
        final int takeFlags = data.getFlags()
                & (Intent.FLAG_GRANT_READ_URI_PERMISSION
                | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
        // Check for the freshest data.
        mPickerConfig.getActivity().getContentResolver().takePersistableUriPermission(imageUri, takeFlags);
    }

    String content = "DocumentPicker pick data:" + imageUri.toString();
    try {
        // 取出文件真实路径
        String path = MediaUtils.getMediaRealPathFromUri(mPickerConfig.getActivity(), data.getData());
        if (path == null) {
            content += "\npath=null";
            return null;
        } else {
            content += "\npath=" + path;
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                return ImagePickerFileProvider.getUriForFile(mPickerConfig.getActivity(), new File(path));
            }
            return Uri.fromFile(new File(path));
        }
    } finally {
        LogUtils.d(content);
    }
}
 
源代码13 项目: Aegis   文件: PreferencesFragment.java
private void onSelectBackupsLocationResult(int resultCode, Intent data) {
    Uri uri = data.getData();
    if (resultCode != Activity.RESULT_OK || uri == null) {
        return;
    }

    int flags = data.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
    getContext().getContentResolver().takePersistableUriPermission(data.getData(), flags);

    _prefs.setBackupsLocation(uri);
    _prefs.setIsBackupsEnabled(true);
    _prefs.setBackupsError(null);
    _backupsLocationPreference.setSummary(String.format("%s: %s", getString(R.string.pref_backups_location_summary), Uri.decode(uri.toString())));
    updateBackupPreference();
}
 
源代码14 项目: FitAndroid7   文件: FileProvider7.java
public static void grantPermissions(Context context, Intent intent, Uri uri, boolean writeAble) {

        int flag = Intent.FLAG_GRANT_READ_URI_PERMISSION;
        if (writeAble) {
            flag |= Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
        }
        intent.addFlags(flag);
        List<ResolveInfo> resInfoList = context.getPackageManager()
                .queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
        for (ResolveInfo resolveInfo : resInfoList) {
            String packageName = resolveInfo.activityInfo.packageName;
            context.grantUriPermission(packageName, uri, flag);
        }
    }
 
源代码15 项目: android_9.0.0_r45   文件: UriPermission.java
/**
 * Initialize persisted modes as read from file. This doesn't issue any
 * global or owner grants.
 */
void initPersistedModes(int modeFlags, long createdTime) {
    modeFlags &= (Intent.FLAG_GRANT_READ_URI_PERMISSION
            | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

    persistableModeFlags = modeFlags;
    persistedModeFlags = modeFlags;
    persistedCreateTime = createdTime;

    updateModeFlags();
}
 
源代码16 项目: android_9.0.0_r45   文件: GrantedUriPermissions.java
public static boolean checkGrantFlags(int grantFlags) {
    return (grantFlags & (Intent.FLAG_GRANT_WRITE_URI_PERMISSION
            |Intent.FLAG_GRANT_READ_URI_PERMISSION)) != 0;
}
 
源代码17 项目: belvedere   文件: MediaSource.java
/**
 * Internal helper method to create an {@link MediaIntent} for opening
 * an installed camera app.
 *
 * @param context A valid application {@link Context}
 * @return An {@link MediaIntent} or null if this action isn't supported by
 *      the system.
 */
private Pair<MediaIntent, MediaResult> pickImageFromCameraInternal(Context context, int requestCode){

    final File imagePath = storage.getFileForCamera(context);

    if (imagePath == null){
        L.w(Belvedere.LOG_TAG, "Camera Intent: Image path is null. There's something wrong with the storage.");
        return null;
    }

    final Uri uriForFile = storage.getFileProviderUri(context, imagePath);

    if (uriForFile == null) {
        L.w(Belvedere.LOG_TAG, "Camera Intent: Uri to file is null. There's something wrong with the storage or FileProvider configuration.");
        return null;
    }

    L.d(Belvedere.LOG_TAG, String.format(Locale.US, "Camera Intent: Request Id: %s - File: %s - Uri: %s", requestCode, imagePath, uriForFile));

    final Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, uriForFile);
    int permission = Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION;
    storage.grantPermissionsForUri(context, intent, uriForFile, permission);

    /*
        https://code.google.com/p/android/issues/detail?id=188073&q=label%3APriority-Medium&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars&start=100
     */
    final boolean cameraPermissionInManifestButNoGranted =
            PermissionUtil.hasPermissionInManifest(context, Manifest.permission.CAMERA) &&
            !PermissionUtil.isPermissionGranted(context, Manifest.permission.CAMERA);

    final MediaResult r = Storage.getMediaResultForUri(context, uriForFile);
    final MediaResult belvedereResult = new MediaResult(imagePath, uriForFile, uriForFile, imagePath.getName(), r.getMimeType(), r.getSize(), r.getWidth(), r.getHeight());
    final MediaIntent mediaIntent = new MediaIntent(
            requestCode,
            intent,
            cameraPermissionInManifestButNoGranted ? Manifest.permission.CAMERA : null,
            true,
            MediaIntent.TARGET_CAMERA
    );

    return new Pair<>(mediaIntent, belvedereResult);
}
 
源代码18 项目: Augendiagnose   文件: SettingsFragment.java
/**
 * After triggering the Storage Access Framework, ensure that folder is really writable. Set preferences
 * accordingly.
 *
 * @param requestCode The integer request code originally supplied to startActivityForResult(), allowing you to identify who
 *                    this result came from.
 * @param resultCode  The integer result code returned by the child activity through its setResult().
 * @param data        An Intent, which can return result data to the caller (various data can be attached to Intent
 *                    "extras").
 */
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
private void onActivityResultLollipop(final int requestCode, final int resultCode, @NonNull final Intent data) {
	int preferenceKeyUri;
	int preferenceKeyFolder;
	String oldFolder;
	if (requestCode == REQUEST_CODE_STORAGE_ACCESS_PHOTOS) {
		preferenceKeyUri = R.string.key_internal_uri_extsdcard_photos;
		preferenceKeyFolder = R.string.key_folder_photos;
		oldFolder = mFolderPhotos;
	}
	else if (requestCode == REQUEST_CODE_STORAGE_ACCESS_INPUT) {
		preferenceKeyUri = R.string.key_internal_uri_extsdcard_input;
		preferenceKeyFolder = R.string.key_folder_input;
		oldFolder = mFolderInput;
	}
	else {
		return;
	}

	Uri oldUri = PreferenceUtil.getSharedPreferenceUri(preferenceKeyUri);
	if (oldUri == null) {
		// Backward compatibility to the version where only the base key existed
		oldUri = PreferenceUtil.getSharedPreferenceUri(R.string.key_internal_uri_extsdcard_photos);
	}
	Uri treeUri = null;

	if (resultCode == Activity.RESULT_OK) {
		// Get Uri from Storage Access Framework.
		treeUri = data.getData();
		// Persist URI - this is required for verification of writability.
		PreferenceUtil.setSharedPreferenceUri(preferenceKeyUri, treeUri);
	}

	// If not confirmed SAF, or if still not writable, then revert settings.
	if (resultCode != Activity.RESULT_OK || !FileUtil.isWritableNormalOrSaf(mCurrentFolder)) {
		DialogUtil.displayError(getActivity(), R.string.message_dialog_cannot_write_to_folder_saf, false,
				mCurrentFolder);

		PreferenceUtil.setSharedPreferenceString(preferenceKeyFolder, oldFolder);
		findPreference(getString(preferenceKeyFolder)).setSummary(oldFolder);

		mCurrentFolder = null;
		PreferenceUtil.setSharedPreferenceUri(preferenceKeyUri, oldUri);
		return;
	}

	// After confirmation, update stored value of folder.
	if (preferenceKeyFolder == R.string.key_folder_photos) {
		mFolderPhotos = mCurrentFolder.getAbsolutePath();
	}
	if (preferenceKeyFolder == R.string.key_folder_input) {
		mFolderInput = mCurrentFolder.getAbsolutePath();
	}
	PreferenceUtil.setSharedPreferenceString(preferenceKeyFolder, mCurrentFolder.getAbsolutePath());
	findPreference(getString(preferenceKeyFolder)).setSummary(mCurrentFolder.getAbsolutePath());

	// Persist access permissions.
	final int takeFlags = data.getFlags()
			& (Intent.FLAG_GRANT_READ_URI_PERMISSION
			| Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
	// noinspection ResourceType
	getActivity().getContentResolver().takePersistableUriPermission(treeUri, takeFlags);
}
 
源代码19 项目: belvedere   文件: Belvedere.java
/**
 * Revoke {@link Intent#FLAG_GRANT_READ_URI_PERMISSION} and {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION} that were
 * previously granted by {@link #grantPermissionsForUri(Intent, Uri)}.
 *
 * @param uri An {@link Uri}
 */
public void revokePermissionsForUri(@NonNull Uri uri) {
    L.d(LOG_TAG, String.format(Locale.US, "Revoke Permission - Uri: %s", uri));
    int permissions = Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
    storage.revokePermissionsFromUri(context, uri, permissions);
}
 
源代码20 项目: belvedere   文件: Belvedere.java
/**
 * Grant all Apps that are resolvable through the provided {@link Intent} {@link Intent#FLAG_GRANT_READ_URI_PERMISSION} and
 * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION}.
 *
 * @param intent An {@link Intent}
 * @param uri    An {@link Uri}
 */
public void grantPermissionsForUri(@NonNull Intent intent, @NonNull Uri uri) {
    L.d(LOG_TAG, String.format(Locale.US, "Grant Permission - Intent: %s - Uri: %s", intent, uri));
    int permissions = Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
    storage.grantPermissionsForUri(context, intent, uri, permissions);
}
 
 方法所在类
 同类方法