在红米设备上启用“显示在锁屏界面”权限

12
我有一个Android应用程序,是一款VoIP应用。当有人打电话时,我们会显示一个来电屏幕。这个功能正常工作,但在一些红米设备(Note 7 Pro)上,如果设备被锁定,来电屏幕就不会出现,只能听到声音。

通过调试,我发现需要启用“在锁定屏幕上显示”权限才能正常工作。一旦我启用它,它就按预期开始工作。 我的问题是,我想通过在运行时以编程方式检查此权限来改善用户界面体验,但不幸的是,我找不到任何可以让我检查此权限的内容。 在红米设备上是否可能实现?


你找到任何解决方案了吗? - Awais Abbas
我们最终让用户手动完成了这个操作。 - TheGraduateGuy
这个问题有解决方案了吗? - Vish
我发现许多应用程序可以通过编程方式启用权限 - 参考小米的Vyng应用程序。 - sumit sonawane
4个回答

6

作为一个在Glance(壁纸轮播)上工作的人,这是小米设备锁屏上的一个产品,此权限仅由小米授予。默认情况下,仅授予一组预装应用程序和将其添加到小米的priv-permission 允许列表中并获得白名单才能获得此权限。


1

你可以尝试下面的代码,它可能会帮助你解决问题。

if (Build.MANUFACTURER.equals("Xiaomi",true)) {
        val intent = Intent("miui.intent.action.APP_PERM_EDITOR")
        intent.setClassName("com.miui.securitycenter", "com.miui.permcenter.permissions.PermissionsEditorActivity")
        intent.putExtra("extra_pkgname", packageName)
        startActivity(intent)
    }

0

我也一样,我只能展示如何检查这个权限:

    private fun isShowOnLockScreenPermissionEnable(): Boolean? {
    return try {
        val manager = context.getSystemService(APP_OPS_SERVICE) as AppOpsManager
        val method: Method = AppOpsManager::class.java.getDeclaredMethod(
            "checkOpNoThrow",
            Int::class.javaPrimitiveType,
            Int::class.javaPrimitiveType,
            String::class.java
        )
        val result = method.invoke(manager, 10020, Binder.getCallingUid(), context.packageName) as Int
        AppOpsManager.MODE_ALLOWED == result
    } catch (e: Exception) {
        null
    }
}

0

使用以下代码检查是否已授予锁屏权限:

private fun isShowOnLockScreenPermissionEnable(): Boolean {
        return try {
            val manager = context.getSystemService(APP_OPS_SERVICE) as AppOpsManager
            val method: Method = AppOpsManager::class.java.getDeclaredMethod(
                "checkOpNoThrow",
                Int::class.javaPrimitiveType,
                Int::class.javaPrimitiveType,
                String::class.java
            )
            val result =
                method.invoke(manager, 10020, Binder.getCallingUid(), context.packageName) as Int
            AppOpsManager.MODE_ALLOWED == result
        } catch (e: Exception) {
            false
        }
    }

现在使用以下代码将用户导航到权限屏幕

if(isShowOnLockScreenPermissionEnable()){
            Toast.makeText(this, "Permission is already granted!!", Toast.LENGTH_SHORT).show()
        }else{
            if (Build.MANUFACTURER.equals("Xiaomi", true)) {
                val intent = Intent("miui.intent.action.APP_PERM_EDITOR")
                intent.setClassName(
                    "com.miui.securitycenter",
                    "com.miui.permcenter.permissions.PermissionsEditorActivity"
                )
                intent.putExtra("extra_pkgname", packageName)
                startActivity(intent)
            }
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接