拒绝在Android中拒绝后接受权限请求窗口?

时间:2016-10-02 13:06:47

标签: android permissions android-permissions

当应用启动时,会运行此代码,请求权限。

public void requestPermission()
{
    ActivityCompat.requestPermissions(this,
            new String[] {  android.Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION  },
            Integer.parseInt(this.getString(R.string.LOCATION_REQUESTCODE)));
}

然后,用户可以接受或拒绝该权限。然后它运行以下代码。

  @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults)
    {
        if(requestCode == Integer.parseInt(this.getString(R.string.LOCATION_REQUESTCODE)))
        {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
            {
                // permission was granted
                // Continue running the application
            }
            else
            {
                // permission denied
                Toast.makeText(this, R.string.gps_required, Toast.LENGTH_LONG).show();

                // Ask again to accept the permissions
                requestPermission();
            }
        }
    }

因此,如果请求被拒绝,则Toast会显示用户需要接受它才能运行应用程序(因为需要GPS坐标),并且应用程序再次向用户请求权限。

但问题是:在拒绝时,弹出窗口又来了。如果我拒绝5次,那么我想接受,我需要在所有弹出窗口消失之前单击“接受”5次。

知道造成这种情况的原因是什么?接受后为什么还有权限弹出窗口?

1 个答案:

答案 0 :(得分:0)

找到了答案!

ActivityCompat.requestPermissions(this,
        new String[] {  android.Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION  },
        Integer.parseInt(this.getString(R.string.LOCATION_REQUESTCODE)));

我正在请求2个权限:android.Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION这就是弹出窗口出现两次的原因。

解决方法是删除android.Manifest.permission.ACCESS_COARSE_LOCATION,因为Manifest.permission.ACCESS_FINE_LOCATION已包含该内容。