在Android Marshmallow 6.0中,什么时候需要在运行时请求权限?

13
我正在测试我的应用程序,运行在Marshmallow 6.0上,但是它由于缺少android.permission.READ_EXTERNAL_STORAGE权限而被强制关闭。即使该权限已在清单文件中定义。我在某个地方读到,如果我在运行时请求权限,则不会强制关闭您的应用程序。我也阅读过这篇安卓文档,其中提供了请求运行时权限的方法。

所以,我知道我们可以按照安卓文档中所述的方式请求权限,如下:

// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(thisActivity,
                Manifest.permission.READ_CONTACTS)
        != PackageManager.PERMISSION_GRANTED) {

    // Should we show an explanation?
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
            Manifest.permission.READ_CONTACTS)) {

        // Show an expanation to the user *asynchronously* -- don't block
        // this thread waiting for the user's response! After the user
        // sees the explanation, try again to request the permission.

    } else {

        // No explanation needed, we can request the permission.

        ActivityCompat.requestPermissions(thisActivity,
                new String[]{Manifest.permission.READ_CONTACTS},
                MY_PERMISSIONS_REQUEST_READ_CONTACTS);

        // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
        // app-defined int constant. The callback method gets the
        // result of the request.
    }
}

上述代码有一个回调方法 onRequestPermissionsResult,它获取结果。

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

     }
}

我的问题是在哪里向用户请求权限?我们应该在应用程序开始时请求权限,还是在需要权限时才这样做?


请看这个视频:https://youtu.be/iZqDdvhTZj0 - 里面解释了一些最佳实践。 - Thomas R.
在需要权限时执行操作。同时,在 M 版本中,要在清单文件中验证 l-o-c 权限:<uses-permission-sdk-23 android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> - Pararth
因此,在需要时请求权限是最佳实践。 - Pankaj
尝试这个,它可能有效:https://dev59.com/J1wX5IYBdhLWcg3w-Thv#41221852 - Bipin Bharti
请参见此链接:https://dev59.com/B1wX5IYBdhLWcg3wjwJZ#41978011 - Zar E Ahmer
这回答您的问题吗?Android marshmallow 请求权限? - Josh Correia
11个回答

-1
if ( ActivityCompat.shouldShowRequestPermissionRationale (this, Manifest.permission.CAMERA) ||
                ActivityCompat.shouldShowRequestPermissionRationale (this,
                        Manifest.permission.RECORD_AUDIO) ) {
            Toast.makeText (this,
                    R.string.permissions_needed,
                    Toast.LENGTH_LONG).show ();
        } else {
            ActivityCompat.requestPermissions (
                    this,
                    new String[]{Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO},
                    CAMERA_MIC_PERMISSION_REQUEST_CODE);
        }

你的代码缺少注释,你在回答中和之前的回答中有什么不同? - not2qubit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接