通过 Provider 进行冻结解冻以及数据查询等操作

版本要求

  • 自冻(FreezeYou) 版本不小于 9.0
  • 部分需要更高版本(已标注)。

授权范围

  • 获取当前 自冻(FreezeYou) 的运行模式、获取已冻结应用列表、获取是否可通过 自冻(FreezeYou) 安装应用9.2+、进行冻结应用操作、进行解冻应用操作。

如何使用

声明权限

  • 需要在AndroidManifest.xml中声明权限(按需申请)
    • 获取当前 自冻(FreezeYou) 的运行模式:
      <uses-permission android:name="cf.playhi.freezeyou.permission.QUERY_STATUS" />
      
      1
    • 获取应用是否被冻结:
      <uses-permission android:name="cf.playhi.freezeyou.permission.QUERY_STATUS" />
      
      1
    • 进行解冻应用操作:
      <uses-permission android:name="cf.playhi.freezeyou.permission.ENABLE_APPLICATIONS" />
      
      1
    • 进行冻结应用操作:
      <uses-permission android:name="cf.playhi.freezeyou.permission.DISABLE_APPLICATIONS" />
      
      1

代码示例

  • 获取当前运行模式:

    Bundle resultBundle = getContentResolver().call(
        Uri.parse("content://cf.playhi.freezeyou.export.QUERY"), 
        "QUERY_MODE", null, new Bundle()
    );
    String currentMode = resultBundle.getString("currentMode", "Failed");
    
    1
    2
    3
    4
    5
  • 获取应用是否被冻结:

    Bundle willBeSend = new Bundle();
    willBeSend.putString("packageName", packageName);
    Bundle resultBundle = getContentResolver().call(
        Uri.parse("content://cf.playhi.freezeyou.export.QUERY"), 
        "QUERY_FREEZE_STATUS", null, willBeSend
    );
    int resultStatusCode = resultBundle.getInt("status", 123456);
    
    1
    2
    3
    4
    5
    6
    7
  • 进行解冻应用操作:

    Bundle willBeSend = new Bundle();
    willBeSend.putString("packageName", pkgName);
    Bundle resultBundle = getContentResolver().call(
        Uri.parse("content://cf.playhi.freezeyou.export.UNFREEZE"), 
        "MODE_AUTO", null, willBeSend
    );
    int resultCode = resultBundle.getInt("result", 123456);
    
    1
    2
    3
    4
    5
    6
    7
  • 进行冻结应用操作:

    Bundle willBeSend = new Bundle();
    willBeSend.putString("packageName", pkgName);
    Bundle resultBundle = getContentResolver().call(
        Uri.parse("content://cf.playhi.freezeyou.export.FREEZE"), 
        "MODE_AUTO", null, willBeSend
    );
    int resultCode = resultBundle.getInt("result", 123456);
    
    1
    2
    3
    4
    5
    6
    7

参数要求

用途UriMethodArgExtras
获取当前运行模式Uri.parse("content://cf.playhi.freezeyou.export.QUERY")QUERY_MODE不适用空 Bundle
获取应用是否被冻结Uri.parse("content://cf.playhi.freezeyou.export.QUERY")QUERY_FREEZE_STATUS不适用Bundle,键 packageName 必须包含被查询的应用包名
获取是否可通过自冻安装应用9.2+Uri.parse("content://cf.playhi.freezeyou.export.QUERY)QUERY_IF_CAN_INSTALL_APPLICATIONS_STATUS不适用空 Bundle
进行解冻应用操作Uri.parse("content://cf.playhi.freezeyou.export.UNFREEZE")MODE_AUTOMODE_ROOTMODE_MROOT不适用Bundle,键 packageName 必须包含被解冻的应用包名
进行冻结应用操作Uri.parse("content://cf.playhi.freezeyou.export.FREEZE")MODE_AUTOMODE_ROOTMODE_MROOT不适用Bundle,键 packageName 必须包含被冻结的应用包名

返回数据

如果对应键值为 null,则检查请求时的 Method 以及 Extras 是否为 null

返回值获取当前运行模式(键 currentMode )获取应用是否被冻结(键 status )进行解冻应用操作(键 result )进行冻结应用操作(键 result )获取是否可通过自冻安装应用(键 status )
dpmDPM(免ROOT)模式(ROOT模式可能可用)不适用不适用不适用不适用
rootROOT模式(DPM模式不可用)不适用不适用不适用不适用
unavailableDPM 与 ROOT 模式均不可用不适用不适用不适用不适用
-4不适用不适用ROOT 模式解冻失败ROOT 模式冻结失败不适用
-3不适用不适用DPM 模式解冻失败DPM 模式冻结失败不适用
-2不适用Bundle 中 packageName 键值为 nullBundle 中 packageName 键值为 nullBundle 中 packageName 键值为 null不适用
-1不适用自冻(FreezeYou) 内部错误自冻(FreezeYou) 内部错误自冻(FreezeYou) 内部错误不适用
0不适用未冻结解冻成功冻结成功不适用
1不适用ROOT 模式冻结不适用不适用不适用
2不适用DPM 模式冻结不适用不适用不适用
3不适用DPM + ROOT 双模式冻结不适用不适用不适用
998不适用没有找到对应应用没有找到对应应用没有找到对应应用不适用
999不适用不适用检查发现未冻结,无需解冻检查发现未解冻,无需冻结不适用
其它不适用不适用不适用不适用boolean[]{预估功能可用,安装通道可用,有ROOT权限,有DPM权限}

开发样例

疑难解答

SecurityException

  • 是否已经在 Manifest 中声明了权限呢(冻结\解冻应用还需要类似请求敏感权限一样进行 requestPermissions )。

目前局限

  • 需要在安装自冻 FreezeYou后再安装或更新(覆盖安装)使用相关权限的应用,否则可能会报 Exception (在 Android Google 的文档中有提及需要在请求前安装)。

需要帮助