您的位置:首页 > 产品设计 > UI/UE

MIUI 判断悬浮窗权限

2015-12-12 11:18 393 查看
/**
* 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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: