android - 如果用户没有授予WRITE_EXTERNAL_STORAGE权限,请关闭应用程序

时间:2017-02-02 10:20:34

标签: android android-permissions

在android 6或更高版本中当用户第一次打开应用程序时请求他获得一些许可 如果他不允许退出应用程序

一些必须要求我的应用程序的权限是读取和写入外部存储,如何实现这个

我试过这个

if (Build.VERSION.SDK_INT >= 23) {
                if (ContextCompat.checkSelfPermission(LoginActivity.this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
                        != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(LoginActivity.this, android.Manifest.permission.READ_EXTERNAL_STORAGE)
                        != PackageManager.PERMISSION_GRANTED) {
                    ActivityCompat.requestPermissions(LoginActivity.this,
                            new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE, android.Manifest.permission.READ_EXTERNAL_STORAGE},
                            1);
                } else {
                    //do something
                }
            } else {
                    //do something
            }

3 个答案:

答案 0 :(得分:5)

您需要阅读结果onRequestPermissionsResult(),如果用户拒绝了权限,请致电context.finish()context.finishAffinity()。 就像是... 修改:查看文档以了解如何处理权限:Android 6 Permissions

    @Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
        switch (requestCode) {
            case MAIN_PERMISSIONS:
                if (grantResults.length > 0) {
                    // Validate the permissions result
                    if (permissionsOk) {
                        // All good
                    } else {
                        // Close your app
                        closeNow();
                    }
                }
                break;
        }
    }

    private void closeNow() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            finishAffinity();
        } else {
            finish();
        }
    }

答案 1 :(得分:0)

使用来自@G的建议。 Brisida - Lince

我解决了这个问题,如果他们需要同样的话,我会在这里为其他人写下我的答案,

我在MainActivity中编写的所有代码:

    if(Build.VERSION.SDK_INT >= 23)
            {
                if (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE)
                                                        != PackageManager.PERMISSION_GRANTED ||
                    ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.READ_EXTERNAL_STORAGE)
                                                        != PackageManager.PERMISSION_GRANTED)
                {
     ActivityCompat.requestPermissions(MainActivity.this,
                                new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE, android.Manifest.permission.READ_EXTERNAL_STORAGE},
                                1);
    }
                else
                {
                    //do something
                }
            }
}

这是覆盖方法onRequestPermissionsResult:

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

        switch(requestCode)
        {
            case 1:
                if (grantResults.length > 0  && grantResults[0] == PackageManager.PERMISSION_GRANTED)
                {
                     // i am creating folder in external storage here
                 File create_dir=new File(Environment.getExternalStorageDirectory()+"/uca/");

                 Toast.makeText(this,"creating",Toast.LENGTH_LONG).show();
                 create_dir.mkdirs();

                }
                else
                {
                    closeNow();
                }
                break;
        }
    }

现在已经很接近了:

private void closeNow() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
        {
            finishAffinity();
        }

        else
        {
            finish();
        }
    }

答案 2 :(得分:0)

您的应用程序已关闭,原因是运行时异常而不是权限所致。只需在运行应用程序时打开logcat并检查异常或错误即可。

我希望它对您有用。