去除悬浮窗权限判断

This commit is contained in:
yitao_hello
2021-12-25 09:36:58 +08:00
committed by zu
parent c1f30d54d3
commit fdab66abb6
2 changed files with 3 additions and 68 deletions

View File

@@ -38,12 +38,6 @@ enum class PermissionEntity(
Manifest.permission.GET_ACCOUNTS Manifest.permission.GET_ACCOUNTS
) )
), ),
WINDOW(
"悬浮窗",
"悬浮窗口显示在其他应用上层",
R.drawable.icon_permission_common,
arrayOf(Manifest.permission.SYSTEM_ALERT_WINDOW)
),
MICROPHONE( MICROPHONE(
"录音", "录音",
"录制音频", "录制音频",

View File

@@ -1,15 +1,11 @@
package com.yizhuan.erban.utils package com.yizhuan.erban.utils
import android.Manifest
import android.app.AppOpsManager
import android.content.ComponentName import android.content.ComponentName
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.net.Uri import android.net.Uri
import android.os.Binder
import android.os.Build import android.os.Build
import android.provider.Settings
import com.microquation.linkedme.android.v4.ContextCompatLKMe import com.microquation.linkedme.android.v4.ContextCompatLKMe
import com.yizhuan.erban.BuildConfig import com.yizhuan.erban.BuildConfig
import com.yizhuan.erban.ui.setting.bean.PermissionEntity import com.yizhuan.erban.ui.setting.bean.PermissionEntity
@@ -31,12 +27,8 @@ class PermissionUtil {
it it
} else { } else {
it.filter { s -> it.filter { s ->
val granted = ContextCompatLKMe.checkSelfPermission(context, s) == PackageManager.PERMISSION_GRANTED ContextCompatLKMe.checkSelfPermission(context, s) ==
if (s == Manifest.permission.SYSTEM_ALERT_WINDOW) { PackageManager.PERMISSION_GRANTED
granted && checkFloatPermission(context)
} else {
granted
}
} }
} }
} }
@@ -59,58 +51,7 @@ class PermissionUtil {
else -> toCommonPermission(context) else -> toCommonPermission(context)
} }
} }
//悬浮窗权限判断
private fun checkFloatPermission(context: Context): Boolean {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT)
return true
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
try {
val contextClazz = Context::class.java
val declaredField = contextClazz.getDeclaredField("APP_OPS_SERVICE")
declaredField.isAccessible = true
val filedValue = declaredField.get(contextClazz)
if (filedValue !is String) {
return false
}
val methodValue = contextClazz.getMethod("getSystemService", String::class.java)
.invoke(context, filedValue)
val osManagerClazz = Class.forName("android.app.AppOpsManager")
val filedMode = osManagerClazz?.getDeclaredField("MODE_ALLOWED")
filedMode?.isAccessible = true
val checkOpMethod = osManagerClazz.getMethod(
"checkOp",
Integer.TYPE,
Integer.TYPE,
String::class.java
)
val result = checkOpMethod?.invoke(
methodValue,
24,
Binder.getCallingUid(),
context.packageName
)
return result == filedMode?.getInt(osManagerClazz)
} catch (e: Exception) {
return false
}
} else {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val appOpsMgr =
context.getSystemService(Context.APP_OPS_SERVICE) as AppOpsManager
val mode = appOpsMgr?.checkOpNoThrow(
"android:system_alert_window", android.os.Process.myUid(), context
.packageName
)
mode == AppOpsManager.MODE_ALLOWED || mode == AppOpsManager.MODE_IGNORED
} else {
Settings.canDrawOverlays(context)
}
}
}
private fun toHuaWeiPermission(context: Context) { private fun toHuaWeiPermission(context: Context) {
try { try {
val intent = Intent() val intent = Intent()