从Activity上下文外部调用startActivity()是否需要FLAG_ACTIVITY_NEW_TASK标志? nabinbhandari / Android-Permissions库

时间:2019-03-14 19:36:04

标签: android android-permissions

使用

  

nabinbhandari / Android-Permissions库:Link

我在Android设备API级别> 20上运行应用程序时出现错误

这是非活动类。 MainApp.getmContext()返回应用程序上下文:

String[] permissions = {Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION};
    Permissions.check(MainApp.getmContext(), permissions, null/*rationale*/, null/*options*/, new PermissionHandler() {
        @Override
        public void onGranted() {
            // do your task.
            Toast.makeText(MainApp.getmContext(), "Granted", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onDenied(Context context, ArrayList<String> deniedPermissions) {
            Toast.makeText(MainApp.getmContext(), "Denied", Toast.LENGTH_SHORT).show();
        }
    });

错误出现在 Permissions.check 行上。

3 个答案:

答案 0 :(得分:2)

我们必须在权限参数中传递活动[您要在其上显示权限的]上下文:

public static void permissionGrant(Context mContext){
    String[] permissions = {Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION};
    Permissions.check(mContext, permissions, null/*rationale*/, null/*options*/, new PermissionHandler() {
        @Override
        public void onGranted() {
            // do your task.
            Toast.makeText(MainApp.getmContext(), "Granted", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onDenied(Context context, ArrayList<String> deniedPermissions) {
            Toast.makeText(MainApp.getmContext(), "Denied", Toast.LENGTH_SHORT).show();
        }
    });
}

答案 1 :(得分:1)

我相信是因为您的MainApp.getmContext。那实际上是应用程序上下文。您需要一个活动上下文。

答案 2 :(得分:0)

在某些设备中,从服务上下文开始新活动时,需要使用Intent.FLAG_ACTIVITY_NEW_TASK中的Intent。为此,请将以下对象用作options参数。

Options options = new Options().setCreateNewTask();

有关更多信息,请参见this issuethis pull request.

相关问题