/**
* Created by chenzy on 2015/3/31.
*
* MIUI 悬浮窗判断工具类
*/
public class AlterWindowUtil {
public static final String TAG ="AlterWindowUtil";
/**
* 4.4 以上可以直接判断准确
*
* 4.4 以下非MIUI直接返回true
*
* 4.4 以下MIUI 可 判断 上一次打开app 时 是否开启了悬浮窗权限
*
* @param context
* @return
*/
@TargetApi(Build.VERSION_CODES.KITKAT)
public static boolean isFloatWindowOpAllowed(Context context) {
final int version = Build.VERSION.SDK_INT;
if(!DeviceUtil.isFlyme4() && !DeviceUtil.isMiui(context)){
return true;
}
if (version >= 19) {
return checkOp(context, 24); //自己写就是24 为什么是24?看AppOpsManager //AppOpsManager.OP_SYSTEM_ALERT_WINDOW
} else {
if(DeviceUtil.isMiui(context)){
if ((context.getApplicationInfo().flags & 1 << 27) == 1 <<27 ) {
return true;
} else {
return false;
}
}else{
return true;
}
}
}
@TargetApi(Build.VERSION_CODES.KITKAT)
public static boolean checkOp(Context context, int op) {
final int version = Build.VERSION.SDK_INT;
if (version >= 19) {
AppOpsManager manager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
try {
Class managerClass = manager.getClass();
Method method = managerClass.getDeclaredMethod("checkOp", int.class, int.class, String.class);
int isAllowNum = (Integer) method.invoke(manager, op, Binder.getCallingUid(), context.getPackageName());
if (AppOpsManager.MODE_ALLOWED == isAllowNum) {
return true;
} else {
return false;
}
} catch (Exception e) {
e.printStackTrace();
}
}
return false;
}
}
MIUI 判断悬浮窗权限
最新推荐文章于 2022-06-25 18:41:31 发布