我正在尝试找到一种在应用程序中安装插件的方法。
我的目标是拥有一个Core应用程序,并提供可在市场上下载的插件。 (它可以是任何东西,天气,广播播放器等......)
插件不会相互交互,因此核心应用程序更像是多个应用程序的目录,其中包含插件使用的SDK。
Android文档中有Tic Tac Toe示例,但需要主应用程序声明外部lib。我的愿望是核心应用程序检测到新安装的插件并显示它们。
我找到this other question,但没有答案。
有办法吗?
编辑:还有一些应用程序可以通过购买市场上的另一个应用程序来解锁。他们是如何工作的?我找不到任何有趣的东西。谷歌“android unlock”时你知道你发现了什么:)
答案 0 :(得分:4)
这有点干净,所以你不必使用try catch块。 此外,这可以避免有人创建具有相同名称的应用程序并手动将其安装在手机上。
public boolean checkIfAllowed()
{
PackageManager pm = getPackageManager();
int match = pm.checkSignatures("your.first.package", "your.second.package");
if (match == PackageManager.SIGNATURE_MATCH)
{
Log.d("ALLOWED?", "signatures match");
return true;
}
else
{
Log.d("ALLOWED?", "signatures don't match");
return false;
}
}
答案 1 :(得分:2)
您可以使用PackageManager查找其他应用程序。如果您知道所有'插件'的包名,那么您可以通过这种方式检查每个插件。
PackageManager pm = getPackageManager();
try {
ApplicationInfo appInfo = pm.getApplicationInfo("com.package.name.your.looking.for", 0);
//if we get to here then the app was found, do whatever you need to do.
} catch (NameNotFoundException e) {
//app was not found
}
答案 2 :(得分:2)
如果你想将主应用程序与插件分离(使用PackageManager.getApplicationInfo(package,int),MainApp必须知道要搜索哪个包)你可以采用这个方案: 在运行时,MainApp发送每个插件必须收听的广播意图(按合同)。 作为回应,每个插件都向MainApp的组件发送直接意图,该组件注册有关可用插件的信息以及如何与它们通信。 这样,每次创建新插件时都不必更新MainApp。