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

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

源代码1 项目: OneText_For_Android   文件: MainActivity.java
@Override
public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
    super.onActivityResult(requestCode, resultCode, resultData);
    if (requestCode == 233 && resultCode == Activity.RESULT_OK) {
        Uri uriTree = resultData.getData();
        if (uriTree != null) {
            final int takeFlags = getIntent().getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
            getContentResolver().takePersistableUriPermission(uriTree, takeFlags);
            editor.putString("pic_uri_tree", uriTree.toString());
            editor.apply();
            // 创建所选目录的DocumentFile,可以使用它进行文件操作
            DocumentFile root = DocumentFile.fromTreeUri(this, uriTree);
            // 比如使用它创建文件夹
            //DocumentFile[] rootList = root.listFiles();
            shotOneTextViaSAF(root);
        }
    }
}
 
源代码2 项目: 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;
}
 
源代码3 项目: 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);
    }
}
 
源代码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 项目: 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));
}
 
源代码6 项目: 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;
}
 
源代码7 项目: ml   文件: MainActivity.java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Logger.debug("requestCode = %d, resultCode = %d, data = %s",
            requestCode,
            resultCode,
            data);
    if (requestCode == REQUEST_PICK_IMAGE
            && resultCode == RESULT_OK) {
        Uri pickedImageUri = data.getData();
        Logger.debug("picked: %s", pickedImageUri);

        if (pickedImageUri != null) {
            if(Build.VERSION.SDK_INT >= 19){
                final int takeFlags = data.getFlags() & Intent.FLAG_GRANT_READ_URI_PERMISSION;
                getContentResolver()
                        .takePersistableUriPermission(pickedImageUri, takeFlags);
            }

            analyzeImage(pickedImageUri);
        }
    } else {
        super.onActivityResult(requestCode, resultCode, data);
    }
}
 
源代码8 项目: 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;
}
 
源代码9 项目: 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;
}
 
源代码10 项目: 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);
}
 
源代码11 项目: Ucount   文件: MainActivity.java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
        case SELECT_PIC4MAIN:
            if (data == null) return;
            // 用户从图库选择图片后会返回所选图片的Uri
            Uri uri1 = data.getData();
            this.headerImg.setImageURI(uri1);
            saveImageUri(SELECT_PIC4MAIN, uri1);

            // 获取永久访问图片URI的权限
            int takeFlags = data.getFlags();
            takeFlags &=(Intent.FLAG_GRANT_READ_URI_PERMISSION
                    | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
            getContentResolver().takePersistableUriPermission(uri1, takeFlags);
            break;

        case SELECT_PIC4DRAWER:
            if (data == null) return;
            // 用户从图库选择图片后会返回所选图片的Uri
            Uri uri2 = data.getData();
            this.drawerBanner.setImageURI(uri2);
            saveImageUri(SELECT_PIC4DRAWER, uri2);

            // 获取永久访问图片URI的权限
            int takeFlags2 = data.getFlags();
            takeFlags2 &=(Intent.FLAG_GRANT_READ_URI_PERMISSION
                    | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
            getContentResolver().takePersistableUriPermission(uri2, takeFlags2);
            break;
    }
}
 
源代码12 项目: AndroidComponentPlugin   文件: ContextImpl.java
private String uriModeFlagToString(int uriModeFlags) {
    switch (uriModeFlags) {
        case Intent.FLAG_GRANT_READ_URI_PERMISSION |
                Intent.FLAG_GRANT_WRITE_URI_PERMISSION:
            return "read and write";
        case Intent.FLAG_GRANT_READ_URI_PERMISSION:
            return "read";
        case Intent.FLAG_GRANT_WRITE_URI_PERMISSION:
            return "write";
    }
    throw new IllegalArgumentException(
            "Unknown permission mode flags: " + uriModeFlags);
}
 
源代码13 项目: android_9.0.0_r45   文件: UriPermission.java
private void addReadOwner(UriPermissionOwner owner) {
    if (mReadOwners == null) {
        mReadOwners = Sets.newArraySet();
        ownedModeFlags |= Intent.FLAG_GRANT_READ_URI_PERMISSION;
        updateModeFlags();
    }
    if (mReadOwners.add(owner)) {
        owner.addReadPermission(this);
    }
}
 
源代码14 项目: 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();
}
 
源代码15 项目: AndroidComponentPlugin   文件: ContextImpl.java
private String uriModeFlagToString(int uriModeFlags) {
    switch (uriModeFlags) {
        case Intent.FLAG_GRANT_READ_URI_PERMISSION |
                Intent.FLAG_GRANT_WRITE_URI_PERMISSION:
            return "read and write";
        case Intent.FLAG_GRANT_READ_URI_PERMISSION:
            return "read";
        case Intent.FLAG_GRANT_WRITE_URI_PERMISSION:
            return "write";
    }
    throw new IllegalArgumentException(
            "Unknown permission mode flags: " + uriModeFlags);
}
 
源代码16 项目: Android-BLE   文件: 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);
        }
    }
 
源代码17 项目: Android-BitherCompress   文件: MainActivity.java
@SuppressWarnings("ResourceType")
@TargetApi(Build.VERSION_CODES.KITKAT)
public static Uri ensureUriPermission(Context context, Intent intent) {
    Uri uri = intent.getData();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        final int takeFlags = intent.getFlags() & Intent.FLAG_GRANT_READ_URI_PERMISSION;
        context.getContentResolver().takePersistableUriPermission(uri, takeFlags);
    }
    return uri;
}
 
源代码18 项目: Dashchan   文件: FileProvider.java
public static int getIntentFlags() {
	return C.API_NOUGAT ? Intent.FLAG_GRANT_READ_URI_PERMISSION : 0;
}
 
源代码19 项目: 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);
}
 
源代码20 项目: 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);
}
 
 方法所在类
 同类方法