如何在android中启用“在锁定屏幕中显示”权限

Posted

技术标签:

【中文标题】如何在android中启用“在锁定屏幕中显示”权限【英文标题】:How to enable 'show in lock screen' permission in andriod 【发布时间】:2020-06-14 02:42:19 【问题描述】:

这个问题已经被问了两次但没有答案 安装在小米设备上的应用程序需要一个名为“在锁定屏幕上显示”的权限,以便在设备被锁定时允许活动启动 如何提示用户在 android studio 中以编程方式启用此权限,一些消息传递应用程序(如 Messenger、Telegram、Whatapp)已启用此权限 我已经添加了这四个标志,但是如果未授予权限,则不会显示活动

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON|
            WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD|
            WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED|
            WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

提前致谢

【问题讨论】:

您好 Ahmed,我也遇到了同样的问题。你是怎么解决的? @Arjun 我没有,我检查设备是否是小米并显示一条消息,说明如何手动移动到正确的设置并允许它 【参考方案1】:

这里是显示如何创建小部件的文档: https://developer.android.com/guide/topics/appwidgets/index.html#lockscreen

您必须创建一个具有设置为

标志 的小部件
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);

帮助用户在锁屏上进行交互

【讨论】:

我已经添加了这些标志,但在未授予权限时不起作用【参考方案2】:

我没有找到请求权限的正确方法,但如果您想手动移动到正确的设置并允许它,这就是方法。我希望它对你有用。

public static void goToNotificationSettings(Context context) 
    Intent intent = new Intent();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) 
        intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
        intent.setData(Uri.fromParts(SCHEME, context.getPackageName(), null));
     else if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1) 
        intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
        intent.putExtra("app_package", context.getPackageName());
     else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) 
        intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
        intent.putExtra("app_package", context.getPackageName());
        intent.putExtra("app_uid", context.getApplicationInfo().uid);
     else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) 
        intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        intent.setData(Uri.parse("package:" + context.getPackageName()));
     else 
        return;
    
    context.startActivity(intent);

编辑:

为了检查权限你可以使用这行代码然后调用函数。

if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_NOTIFICATION_POLICY) != PackageManager.PERMISSION_GRANTED) 
        goToNotificationSettings(getActivity());
    

【讨论】:

以上是关于如何在android中启用“在锁定屏幕中显示”权限的主要内容,如果未能解决你的问题,请参考以下文章

使用android studio运行应用程序时如何启用android 6.0中的所有权限

Flutter - 如何在 android 中自动启用位置服务?

如何更改系统警报设置文本动态

如何在 android 中启用 Network Provider?

如何在 Android 11 中检测权限的永久拒绝?

MIUI6系统如何启用root权限的教程