Xposed的开发文档 https://github.com/rovo89/XposedBridge/wiki/Development-tutorial
比如我们要做一个App(类似于http://git.oschina.net/sulliy/MinMinLock),它可以限制系统系统中其他App是不是可以启动。这里有个数据沟通的问题。我们的App设置好禁止启动App A,B,C。我们提供给Xposed的IXposedHookLoadPackage子类并不在我们的App进程环境用运行。自己做个Content Provider也可行,但是太麻烦了。能不能有简单点的办法?
XSharedPreferences应该是最简单的办法了。首先我们在自己App的调用标准的Android SP接口记录一下App A,B,C的控制状态。SP的模式很重要,设置为MODE_WORLD_READABLE,其他App才能访问。
private SharedPreferences pref;
pref = getSharedPreferences(getPackageName() + "_preferences", MODE_WORLD_READABLE);
pref.edit().putBoolean(packageName, true).commit(); //true表示禁止启动,false表示可以启动
我们知道SP实际上市对应在/data/data/<Package Name>/shared_prefs/<Package Name>_preferences.xml文件。里面按键值对的形式存放。XSharedPreferences做的工作实际上就是根据<Package Name>自己去解析这个文件,然后读出数据存放在一个HashMap当中。
因此,我们可以在自己的IXposedHookLoadPackage子类中利用XSharedPreferences来获取App A,B,C的控制状态。
private static XSharedPreferences pref;
pref = new XSharedPreferences(MY_PACKAGE_NAME);
pref.reload();
boolean block = pref.getBoolean(packageName, false);
XSharedPreferences是只读的,并不允许进行写操作。