Android 如何添加多个权限?一个来自清单,另一个来自运行时

Android 如何添加多个权限?一个来自清单,另一个来自运行时,android,android-manifest,android-permissions,runtime-permissions,Android,Android Manifest,Android Permissions,Runtime Permissions,我已在清单文件中添加了照相机的权限。因此,每当我的apk被建立时,它都会请求相机许可。 然后,我添加了运行时写入存储权限的代码,但当我构建应用程序时,它首先请求相机权限,然后如果我做了需要存储权限的事情,应用程序崩溃,当我再次打开应用程序时,它会请求权限 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" p

我已在清单文件中添加了照相机的权限。因此,每当我的apk被建立时,它都会请求相机许可。 然后,我添加了运行时写入存储权限的代码,但当我构建应用程序时,它首先请求相机权限,然后如果我做了需要存储权限的事情,应用程序崩溃,当我再次打开应用程序时,它会请求权限

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.download">
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"  />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.CAMERA" />


    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <meta-data android:name="com.google.ar.core" android:value="required" />
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>
所以,我如何设置每当我的应用程序构建时,它都会请求相机权限(从清单文件),然后在这之后请求写入外部存储权限

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.download">
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"  />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.CAMERA" />


    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <meta-data android:name="com.google.ar.core" android:value="required" />
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

首先,检查您所需的权限是否已授予

        int rc1 = ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
        int rc2 = ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
        int rc3 = ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA);
        int rc4 = ActivityCompat.checkSelfPermission(this, Manifest.permission.INTERNET);

        if (rc1 == PackageManager.PERMISSION_GRANTED &&
                rc2 == PackageManager.PERMISSION_GRANTED &&
                rc3 == PackageManager.PERMISSION_GRANTED &&
                rc4 == PackageManager.PERMISSION_GRANTED) {
            allGoodProceed();
        } else {
            requestPermission();
        }
然后调用
requestPermission
方法

    private void requestPermission() {
            final String[] permissions = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA,
Manifest.permission.INTERNET};

            boolean isPermissionDeniedPermanent = false;

            for (int i = 0, len = permissions.length; i < len; i++) {
                String permission = permissions[i];

                if (ActivityCompat.checkSelfPermission(this, permissions[i]) == PackageManager.PERMISSION_DENIED) {
                    // user rejected the permission
                    boolean showRationale = shouldShowRequestPermissionRationale(permission);

                    if (showRationale) {
                        isPermissionDeniedPermanent = showRationale;
                    }
                }
            }

            if (isPermissionDeniedPermanent) {
                                showPermissionsDialog();
            } else {
                if (!ActivityCompat.shouldShowRequestPermissionRationale(this,
                        Manifest.permission.CAMERA)) {
                    ActivityCompat.requestPermissions(this, permissions, HANDLE_STORAGE_PERMISSION);
                }
            }
        }

您可以根据需要在继续之前添加要检查的权限。如果这解决了您的问题,请返回。

您应该查看James McCracken的回答您使用的是什么android版本?从API 23开始,您必须在运行时请求权限。@Beyazidy实际上正在AR上创建一个项目,该项目有一个arcamera,它要求在开始时具有摄像头功能。(来自清单文件)。所以我只需要写外部存储,然后再问。但是不能t@IanRehwinkel是的,我在运行时问。但首先,我的apk在ap启动时检查摄像头权限,然后如果我尝试使用存储,它就会崩溃。然后在再次打开时,它会请求存储权限,这是我通过代码所做的。您是否尝试在代码中而不是清单文件中请求摄影机权限?