如何检查权限并请求权限(简单编码且易于理解)

Ali*_*Ali 4 android android-permissions

我在 android 中搜索运行时权限,找到很多链接,但我看到有复杂的代码。

注意:我在这里分享我的简单代码,因此它对新开发人员或弗雷泽很有帮助。另外,我在这里没有使用任何第三方库。

Ali*_*Ali 5

首先,在Manifest文件中写入权限(我获取了一些基本权限):

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)

现在我做了两种方法checkPermission()requestPermission()还有@Override一种方法名称是onRequestPermissionsResult()照顾结果。

现在我将向您展示它的样子:

private boolean checkPermission() {
        int internetPermission = ContextCompat.checkSelfPermission(getApplicationContext(), INTERNET);
        int cameraPermission = ContextCompat.checkSelfPermission(getApplicationContext(), CAMERA);
        int readStoragePermission = ContextCompat.checkSelfPermission(getApplicationContext(), READ_EXTERNAL_STORAGE);
        int writeStoragePermission = ContextCompat.checkSelfPermission(getApplicationContext(), WRITE_EXTERNAL_STORAGE);

        return internetPermission == PackageManager.PERMISSION_GRANTED &&
                cameraPermission == PackageManager.PERMISSION_GRANTED &&
                readStoragePermission == PackageManager.PERMISSION_GRANTED &&
                writeStoragePermission == PackageManager.PERMISSION_GRANTED;
    }
Run Code Online (Sandbox Code Playgroud)

Alt您在上面的代码中看到定义了 INTERNET、CAMERA 等。这是通过单击+导入的Enter,它看起来像下面的代码:

import static android.Manifest.permission.CAMERA;
import static android.Manifest.permission.INTERNET;
import static android.Manifest.permission.READ_EXTERNAL_STORAGE;
import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
Run Code Online (Sandbox Code Playgroud)

现在请看下面的requestPermission()方法代码:

private void requestPermission() {
        ActivityCompat.requestPermissions(MainActivity.this, new String[]{INTERNET, CAMERA, READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE}, 1);
    }
Run Code Online (Sandbox Code Playgroud)

现在最后一个方法是onRequestPermissionsResult()。在此方法中,您可以看到权限是授予还是拒绝:

@Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

        switch (requestCode) {

            case 1:
                if (grantResults.length > 0) {
                    boolean internet = grantResults[0] == PackageManager.PERMISSION_GRANTED;
                    boolean camera = grantResults[1] == PackageManager.PERMISSION_GRANTED;
                    boolean readStorage = grantResults[2] == PackageManager.PERMISSION_GRANTED;
                    boolean writeStorage = grantResults[3] == PackageManager.PERMISSION_GRANTED;

                    if (internet && camera && readStorage && writeStorage) {
                        init();
                       // Permission GRANTED (Here write your code what you want).
                    } else {
                        // Permission DENY (If user click on DENY then finish the activity);
                        finish();
                    }
                }
        }
    }
Run Code Online (Sandbox Code Playgroud)

太好了,您已经完成了 checkPermission 和 requestPermission。

笔记:

上面的代码适用于Activity. 片段有一个微小的变化。

如果我在片段中使用此代码,那么我应该更改什么:

您只想更改requestPermission()方法:

private void requestPermission() {
            requestPermissions(new String[]{INTERNET, CAMERA, READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE}, 1);
        }
Run Code Online (Sandbox Code Playgroud)