android 开发,在vivo手机上怎么获取所有文件管理权限,打开了所有文件管理,但还是没拿到相关的权限,百度搜了没搜到相应的解决办法,相关的vivo 官网也没找到相关的解决办法,有什么办法解决吗?
5条回答 默认 最新
关注引自免费微信小程序:皆我百晓生
在Android 10及以上版本,Google引入了一种新的权限模型,即“ scoped storage ”(范围存储),这要求应用只能访问其专用目录以及用户明确授予的特定文件或文件夹。对于访问其他位置的文件,你需要请求
MANAGE_EXTERNAL_STORAGE权限,但这在Android 11及更高版本中,需要系统级授权,用户必须在设置中手动开启。针对VIVO手机,你可以尝试以下步骤来请求这个权限:
- 在你的AndroidManifest.xml文件中添加以下权限:
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />- 创建一个方法来请求权限,这里是一个示例:
private void requestManageStoragePermission() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { Intent intent = new Intent(); intent.setAction(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION); try { startActivityForResult(intent, 101); // 你可以选择任何你喜欢的request code } catch (Exception e) { // 对于不支持此API的设备(例如:Android Q之前的版本),可以引导用户去设置页面手动开启权限 Intent intentQ = new Intent(); intentQ.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); Uri uri = Uri.fromParts("package", getPackageName(), null); intentQ.setData(uri); startActivity(intentQ); } } else { // 对于Android Q之前版本,可以直接请求权限 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.MANAGE_EXTERNAL_STORAGE}, 101); } }- 在你的Activity中重写onRequestPermissionsResult方法来处理结果:
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == 101 && grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 用户已授予权限,可以进行相关操作 } else { // 用户拒绝或权限被拒,可能需要提示用户开启权限 } }- 调用上述方法来请求权限:
button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { requestManageStoragePermission(); } });请确保你在目标API级别(至少Android 10)上测试这些代码,并且在运行时检查API级别以适应不同版本的行为。
注意:从Android 11开始,即使用户在设置中启用了
MANAGE_EXTERNAL_STORAGE权限,某些第三方文件管理器仍然可能无法访问所有外部存储内容。这是由于每个应用都有自己的私有空间,除非用户通过文件选择器选择特定的文件或文件夹,否则应用无法访问其他应用的数据。因此,如果你的应用需要访问非本应用的数据,通常会依赖于用户通过ACTION_GET_CONTENT或ACTION_OPEN_DOCUMENT意图来选择文件。解决 无用评论 打赏 举报 编辑记录