这两天老大发话说要我研究一下安卓安全软件的功能,先抽取了一个小模块,研究权限管理

一开始就去packagemanager 去看发现有几个方法:

就先去看了一下IPackagemanager 里面的方法:

有很多 这里我之列出跟权限有关的

     PermissionInfo getPermissionInfo(String name, int flags);  

        List<PermissionInfo> queryPermissionsByGroup(String group, int flags);  

        PermissionGroupInfo getPermissionGroupInfo(String name, int flags);  

        List<PermissionGroupInfo> getAllPermissionGroups(int flags);  

        int checkPermission(String permName, String pkgName);  

        int checkUidPermission(String permName, int uid);  

        boolean addPermission(in PermissionInfo info);  

        void removePermission(String name);  

        void grantPermission(String packageName, String permissionName);  

        void revokePermission(String packageName, String permissionName);  

      String[] getAppOpPermissionPackages(String permissionName);  

    ParceledListSlice getPackagesHoldingPermissions(in String[] permissions,
int flags, int userId);
boolean addPermissionAsync(in PermissionInfo info);
void setPermissionEnforced(String permission, boolean enforced);

看安全软件上的功能:

通过包名找权限

通过权限找包名

禁用 提示  允许 三种状态

首先:就发现了2个方法:

void removePermission(String name);
void grantPermission(String packageName, String permissionName);
我很高兴的就开始写代码了 测试结果:
java.lang.SecurityException: Can't change android.permission.INTERNET. It is required by the application
一直报这个错 查看源码其实查到了是需要检查权限,源码就不贴了,想要绕过检查这个方法,可以通过hook的方式,猜测把源码修改一下也可以用,目前这种方案先放弃。

我又去网上查了一部分资料:看到这个类AppOpsManager  我就明白了 我找到相应的服务端代码IAppOpsService:

    interface IAppOpsService {
// These first methods are also called by native code, so must
// be kept in sync with frameworks/native/include/binder/IAppOpsService.h
int checkOperation(int code, int uid, String packageName);
int noteOperation(int code, int uid, String packageName);
int startOperation(IBinder token, int code, int uid, String packageName);
void finishOperation(IBinder token, int code, int uid, String packageName);
void startWatchingMode(int op, String packageName, IAppOpsCallback callback);
void stopWatchingMode(IAppOpsCallback callback);
IBinder getToken(IBinder clientToken); // Remaining methods are only used in Java.
int checkPackage(int uid, String packageName);
List<AppOpsManager.PackageOps> getPackagesForOps(in int[] ops);
   List<AppOpsManager.PackageOps> getOpsForPackage(int uid, String packageName, in int[] ops);
void setMode(int code, int uid, String packageName, int mode);
void resetAllModes(int reqUserId, String reqPackageName);
int checkAudioOperation(int code, int usage, int uid, String packageName);
void setAudioRestriction(int code, int usage, int uid, int mode, in String[] exceptionPackages); void setUserRestrictions(in Bundle restrictions, int userHandle);
void removeUser(int userHandle);
}

它通过mode的方式来设置状态,

可以通过包名获取权限

也可以通过权限获取包名

更重要的是返回权限不是全部的 会根据级别 系统写好的返回给你

你可以根据权限做个分级,这一切就明朗了

android获取其他应用权限(修改状态)的更多相关文章

  1. android获取/更改gps和WIFI状态

    一.WIFI状态的获取和更改 适用于 SDK1.0 , SDK1.5 1.获取WIFI状态 方法1:通过WifiManager进行操作 1WifiManager wifiManager = (Wifi ...

  2. 朝花夕拾-android 获取当前手机的内存卡状态和网络连接状态

    序言: 人的一生是一个选择的过程. 如果脚下只有一条路,只要一往无前即可,不用担心走错.即使是错也别无它法.然而人是不安分的,况且安于独木桥的行走,其目的地由于没有蜿蜒曲折去遮挡行路人的视线,一往无前 ...

  3. android 获取设备拔插状态广播事件易漏掉的一行属性!

    我们都知道设备拔插的状态获取需要一个权限   <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILES ...

  4. Android获取当前网络状态

    Android获取当前网络状态 效果图 有网络 没有网络 源码 下载地址(Android Studio工程):http://download.csdn.net/detail/q4878802/9052 ...

  5. Android获取网络状态

    Android获取网络状态 学习自 https://developer.android.google.cn/reference/android/net/ConnectivityManager http ...

  6. Android 获取手机信息,设置权限,申请权限,查询联系人,获取手机定位信息

    Android 获取手机信息,设置权限,申请权限,查询联系人,获取手机定位信息 本文目录: 获取手机信息 设置权限 申请权限 查询联系人 获取手机定位信息 调用高德地图,设置显示2个坐标点的位置,以及 ...

  7. Win7获取管理权限修改Host文件以其他权限问题

    ——win7管理员权限修改Host文件——百度经验 win7管理员权限获取办法: win7管理员权限 获取办法——经验——百度 win7最高权限获取: win7最高权限 获取——百度经验

  8. Android获取Root权限之后的静默安装实现代码示例分析

    转:http://blog.csdn.net/jiankeufo/article/details/43795015 Adroid开发中,我们有时会遇到一些特殊功能的实现,有些功能并没有太高技术难度,但 ...

  9. android获取系统wifi状态等

    WIFI 获取WIFI状态 WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); ...

随机推荐

  1. windows笔记-一个简单的windows GUI应用程序

    #include<windows.h> // 编写Windows程序必须包含的头文件 LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); ...

  2. USB Type-C“三剑客”: 连接器、控制器和电缆

    USB Type-C™是最新的有关电缆布线的USB连接器标准.您会看到,从笔记本电脑.智能手机.闪存到视频系统,这些设备上有一个小型可逆的Type-C连接器.由于Type-C电缆既可以给主机和设备提供 ...

  3. Android 颜色Color

    Android中使用4个数字来表示颜色,分别是alpha.红(red).绿(green).蓝(blue)四个颜色值(ARGB).每个数字取值0-255,因此一个颜色可以用一个整数来表示.为了运行效率, ...

  4. Adobe Flash Builder 4.7下载地址及破解补丁(32位&64位)

    Adobe FlashBuilder 4.7是开发flex的利器,能显著提高flex的开发效率.最新版的是4.7,去官网上下载时每次都要登录才能下载,特麻烦,这次下载时就把相关的下载地址给记录了下来, ...

  5. 利用if else 求已发奖金总数

    class Program    {        static void Main(string[] args)        {            while (true)           ...

  6. bzoj3876

    不高兴的回忆啊啊啊当初这种简单题因为自己作死就暴零0了这题在OJ上是简单的最小有下界费用流,增广到正费用为止因为算的是总时限但实际的话似乎要用pacman吃豆豆那题的方法先用dp跑出第一次的增广路再用 ...

  7. android Spinner的使用

    首先是MainActivity package com.example.spinnertest; import java.util.ArrayList; import java.util.List; ...

  8. WebView loadData出错(奇怪的设计)

    今天遇到一个奇怪的问题. 我使用WebView加载一个网页.  方法1. 直接使用 loadUrl() 方法,没有问题.完全可以.方法2. 使用loadData()方法,出现问题,无法显示.方法3. ...

  9. 基础题:HDU 5122 K.Bro Sorting

    Matt's friend K.Bro is an ACMer.Yesterday, K.Bro learnt an algorithm: Bubble sort. Bubble sort will ...

  10. HDU 5949 Relative atomic mass 【模拟】 (2016ACM/ICPC亚洲区沈阳站)

    Relative atomic mass Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...