onRequestPermissionsResult被无限调用

时间:2016-08-15 10:32:22

标签: android permissions runtime

我正在使用运行时权限请求,但是存在问题。看起来回调方法onRequestPermissionsResult被无限调用。因此,当用户拒绝该请求时,应用程序无响应..

每次用户点击“拒绝”时,权限对话框都会重新出现。只有点击“再也不要问”,它才会再次出现。 *按'允许'时效果很好 - 没有任何问题。

有没有办法取消一次后被调用的方法?

if (ActivityCompat.checkSelfPermission( this, Manifest.permission.ACCESS_FINE_LOCATION ) != PackageManager.PERMISSION_GRANTED )
{
    ActivityCompat.requestPermissions( this, new String[]{ Manifest.permission.ACCESS_FINE_LOCATION }, LOCATION_PERMISSION_CUSTOM_REQUEST_CODE );
}


@Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        switch( requestCode )
        {
            case LOCATION_PERMISSION_CUSTOM_REQUEST_CODE:   
                // If request is cancelled, the result arrays are empty.
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    // permission was granted
                    MyManager.connect();
                    return;
                } else {
                    // permission denied
                    return;
                }
            default:
                return;
        }
    }

1 个答案:

答案 0 :(得分:23)

正如您在评论中提到的,此处的问题是,在onResume方法中调用了触发请求权限对话框的代码。

当请求对话框权限完成时,运行时会对触发它的活动调用onResume,就像任何以对话为主题的活动一样。

在您的情况下,拒绝该权限将再次触发对onResume的调用,这将再次显示该对话框并导致无休止的循环。

将此权限请求移至onCreate或其他一些流程将解决您的问题。