小米判断是否有后台弹出权限

原生安卓并没有这样的做,而是定制系统自己修改的措族,大厂是有商务约定的白名单的,比如搜狗输入法等等

private fun isXiaomiBgStartPermissionAllowed(context: Context): Boolean {
	val ops = context.getSystemService(Context.APP_OPS_SERVICE) as AppOpsManager
	try {
		val op = 10021
		val method: Method = ops.javaClass.getMethod("checkOpNoThrow", Int::class.javaPrimitiveType, Int::class.javaPrimitiveType, String::class.java)
		val result = method.invoke(ops, op, android.os.Process.myUid(), context.packageName) as Int
		return result == AppOpsManager.MODE_ALLOWED
	} catch (e: Exception) {
		e.printStackTrace()
	}
	return false
}

另外就是vivo

private fun isVivoBgStartPermissionAllowed(context: Context): Boolean {
	return getVivoBgStartPermissionStatus(context) == 0
}

/**
 * 判断Vivo后台弹出界面状态, 1无权限,0有权限
 * @param context context
 */
private fun getVivoBgStartPermissionStatus(context: Context): Int {
	val uri: Uri = Uri.parse("content://com.vivo.permissionmanager.provider.permission/start_bg_activity")
	val selection = "pkgname = ?"
	val selectionArgs = arrayOf(context.packageName)
	var state = 1
	try {
		context.contentResolver.query(uri, null, selection, selectionArgs, null)?.use {
			if (it.moveToFirst()) {
				state = it.getInt(it.getColumnIndex("currentstate"))
			}
		}
	} catch (e: Exception) {
		e.printStackTrace()
	}
	return state
}

文章摘自

https://blog.csdn.net/liao_fu_yun/article/details/114971424

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注