我正在开发一个分别用于处理文件的应用程序,我请求访问所有文件的许可.然而,在新版本的Android中,你需要在其他应用程序中找到你的应用程序,然后点击切换才能访问.

当我打开请求权限的意图时,我的应用程序不在列表中

MainActivity.java

package com.example.quazzyapp;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.provider.Settings;

public class MainActivity extends AppCompatActivity {
    private static final int PERMISSION_STORAGE = 101;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (!PremissionUtils.hasPermissions(MainActivity.this)) {
            PremissionUtils.requestPermissions(MainActivity.this, PERMISSION_STORAGE);
        }
    }
}

PremissionUtils.java

package com.example.quazzyapp;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.Settings;

import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

public class PremissionUtils {
    public static boolean hasPermissions(Context context) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
            return Environment.isExternalStorageManager();
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            return ContextCompat.checkSelfPermission(context, android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
                    == PackageManager.PERMISSION_GRANTED;
        } else {
            return true;
        }
    }

    public static void requestPermissions(Activity activity, int requestCode) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
            try {
                Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
                intent.addCategory("android.intent.category.DEFAULT");
                intent.setData(Uri.parse(String.format("package:%s", activity.getPackageName())));
                activity.startActivityForResult(intent, requestCode);
            } catch (Exception e) {
                Intent intent = new Intent();
                intent.setAction(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
                activity.startActivityForResult(intent, requestCode);
            }
        } else {
            ActivityCompat.requestPermissions(activity,
                    new String[] { android.Manifest.permission.WRITE_EXTERNAL_STORAGE },
                    requestCode);
        }
    }
}

Build.gradle.kts

plugins {
    id("com.android.application")
}

android {
    namespace = "com.example.quazzyapp"
    compileSdk = 34

    defaultConfig {
        applicationId = "com.example.quazzyapp"
        minSdk = 24
        targetSdk = 33
        versionCode = 1
        versionName = "1.0"

        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            isMinifyEnabled = false
            proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
        }
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
}

dependencies {

    implementation("androidx.appcompat:appcompat:1.6.1")
    implementation("com.google.android.material:material:1.8.0")
    implementation("androidx.constraintlayout:constraintlayout:2.1.4")
    testImplementation("junit:junit:4.13.2")
    androidTestImplementation("androidx.test.ext:junit:1.1.5")
    androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
}

AndriodManifest.xml

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <uses-permission android:name="android.permission.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION" />

    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.QuazzyApp"
        tools:targetApi="31">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

问题可能出在本地测试的智能手机上,不幸的是,我无法在其他设备上进行判断

我创建了在新项目中请求权限的意图,以排除其他代码片段的影响,但什么都没有发生,问题仍然存在

推荐答案

    <uses-permission android:name="android.permission.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION" />

这不是权限字符串.这是一个Intent动作的字符串.将该XML元素替换为:

    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />

请参见the documentation.

Java相关问答推荐

编译期间错误(Java 0000)Android .Net MAUI

缩小画布比例后更改滚动窗格的内部大小

使用动态ID从json获取详细信息的Jolt规范

Java Swing:初始化身份验证类后未检测到ATM_Interface键事件

SpringBootreact 式Web应用程序的Spring Cloud Configer服务器中的资源控制器损坏

通过合并Akka Streams中的多个慢源保持订购

嵌入式ActiveMQ Artemis Web控制台加载错误

如何创建同一类的另一个对象,该对象位于变量中?

使用Jolt将字段转换为列表

使用多个RemoteDatabase对象的一个线程

Spring安全令牌刷新和JWT签名与本地计算的签名不匹配

在VS代码中,如何启用Java Main函数的&Q;Run|DEBUG&Q;代码?

从LineChart<;字符串、字符串和gt;中删除数据时出现特殊的ClassCastException;

Quarkus:运行时出现EnumConstantNotPresentException

如何生成指定范围内的11位序列号?

在单例类上获取Java锁,了解原因

使用@ExceptionHandler的GlobalExceptionHandler还是来自服务器的REST应答的ResponseEntity?

如何在更改分辨率时将鼠标坐标计算为世界坐标

MapStruct记录到记录的映射不起作用

Springboot应用程序无法识别任何@RestController或@Service,我认为@Repository也无法识别