Android判断手机中的应用是否具有某些权限(例如小米手机中是否具有悬浮窗权限)

Android原生权限管理:AppOps                     


op 的值是 0 ~ 47,其中0代表粗略定位权限,1代表精确定位权限,24代表悬浮窗权限。(具体可以看看android源码在android.app下就有个AppOpsManager类)

uid 当前应用用到的uid ,可通过 Binder.getCallingUid()获得。
packageName 应用程序的包名,通过getPackageName获得。

通过上面的知识,写一函数 用来判断 程序是否具有某些权限的函数

    private static int checkOp(Context context, int op){
        final int version = Build.VERSION.SDK_INT;
        if (version >= 19){
            Object object = context.getSystemService("appops");
            Class c = object.getClass();
            try {          
                Class[] cArg = new Class[3];
                cArg[0] = int.class;
                cArg[1] = int.class;
                cArg[2] = String.class;
                Method lMethod = c.getDeclaredMethod("checkOp", cArg);
                return (Integer) lMethod.invoke(object, op, Binder.getCallingUid(), context.getPackageName());
            } catch(NoSuchMethodException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }        
        }
        return -1;
    }

调用上面的函数,返回 0 就代表有权限,1代表没有权限,-1函数出错啦


详细情况请参考:http://blog.csdn.net/a_long_/article/details/51987145

你可能感兴趣的:(Android)