请求权限对话框暂停我的活动

时间:2017-10-19 09:42:32

标签: android

我在我的活动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);

3 个答案:

答案 0 :(得分:3)

  

正在发生的事情是我的活动在请求时暂停   显示权限对话框。那是为什么?

requestPermissions docs says

  

ecommerce-order-0.0.1-SNAPSHOT.jar   This method may start an activity allowing the user to choose which   permissions to grant and which to reject. Hence, you should be。进一步,   授予某些权限可能需要重新启动您的应用程序。在   在这种情况下,系统将重新创建活动堆栈   将结果传递给onRequestPermissionsResult(int,   String [],int [])。

虽然另一种解决方案是在prepared that your activity may be paused and resumed移动您的代码(如果可能且合适的话)

答案 1 :(得分:0)

方法活动#requestPermissions的源代码:

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;
}

我们可以清楚地看到新活动已经开启。因此,肯定会调用调用活动中的onPause。所以这是预期的行为。

如果您想阻止暂停活动,请确保在开启该活动之前您已拥有所需的权限。

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

答案 2 :(得分:0)

您的Activity(例如MainActivity)也有可能调用

requestPermissions()

可能已被声明为标志

android:noHistory="true" 

在清单中。

因此,MainActivity已暂停,并最终在finish()期间requestPermissions()结束。 来自Android文档requestPermissions

  

如果您的活动将noHistory设置为,则您无法请求权限   清单中为真

如果是这种情况。 您可以在finish()内以编程方式进行MainActivity { .. } clear specific activity,以将其从活动堆栈中删除,而不是在清单中。

这是我的情况!