2017-10-19 112 views
0

我在我的活动onActivityResult内请求权限,发生的情况是我的活动在显示请求权限对话框时被暂停。为什么是这样,我可以以某种方式防止它?请求权限对话框暂停我的活动

所有我做的是在一个正常的方式请求许可:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED || 
       ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)) { 
       requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 
         REQUEST_LOCATION_ACCESS_CODE); 
+0

“为什么会这样” - 您正在开始另一项活动(请求权限对话框)。 “我能以某种方式阻止它吗?” - 不要使用'危险'权限,所以你不需要调用'requestPermissions()'。 – CommonsWare

回答

2

正在发生的事情是,虽然显示的请求 权限对话框我的活动被暂停。这是为什么?

requestPermissions docs says

This method may start an activity allowing the user to choose which permissions to grant and which to reject. Hence, you should be prepared that your activity may be paused and resumed。此外,授予某些权限的 可能需要重新启动您的应用程序。在 这种情况下,系统将在 将结果传递给onRequestPermissionsResult(int, String [],int [])之前重新创建活动堆栈。

虽然另一种解决方案是在onStop如果移动你的代码的方法活动#requestPermissions的可能,适合

0

源代码:

public final void requestPermissions(@NonNull String[] permissions, int requestCode) { 
    if (requestCode < 0) { 
     throw new IllegalArgumentException("requestCode should be >= 0"); 
    } 
    if (mHasCurrentPermissionsRequest) { 
     Log.w(TAG, "Can reqeust only one set of permissions at a time"); 
     // Dispatch the callback with empty arrays which means a cancellation. 
     onRequestPermissionsResult(requestCode, new String[0], new int[0]); 
     return; 
    } 
    Intent intent = getPackageManager().buildRequestPermissionsIntent(permissions); 
    startActivityForResult(REQUEST_PERMISSIONS_WHO_PREFIX, intent, requestCode, null); 
    mHasCurrentPermissionsRequest = true; 
} 

我们可以清楚地看到,一个新活动打开。因此调用活动中的肯定会被调用。所以这是的预期行为。

如果要防止暂停活动,请确保在打开该活动前已拥有所需的权限。

如果您的活动是主要活动,请添加活动活动。否则,请在开启活动前检查权限。