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

更多相关文章

  1. C语言函数的递归(上)
  2. Android(安卓)修改权限
  3. Android之Camera的简单实例
  4. android6.0下载路径设置
  5. android activity 生命周期详解
  6. 通过JNI实现c/c++和Android的java层函数互调
  7. Android几个面试题解答
  8. 可视化操作Android的SQLite数据库
  9. Cocos2d-x学习之创建Android工程和编译

随机推荐

  1. C语言函数基础知识有哪些?
  2. c语言中==是什么意思?
  3. 适合小白入门C语言的简单教程
  4. 数组指针的用法有哪些?
  5. c语言中include用法是什么?
  6. visual c++6.0怎么新建C语言项目
  7. c语言字符数组与字符串应用方法是什么?
  8. c语言fgets函数用法是什么?
  9. C语言中continue的作用是什么
  10. c语言break什么意思?