我在我的活动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 :(得分:3)
正在发生的事情是我的活动在请求时暂停 显示权限对话框。那是为什么?
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,以将其从活动堆栈中删除,而不是在清单中。
这是我的情况!