有些应用(例如https://play.google.com/store/apps/details?id=com.teslacoilsw.launcher)是免费的,但可以通过购买其他应用来启用付费功能(在这种情况下,这个应用https://play.google.com/store/apps/details?id=com.teslacoilsw.launcher.prime)
这是如何运作的?
我的猜测是免费应用程序启动一个显式的Intent,并可以通过try / catch结构检测应用程序是否存在。这样做的缺点是,创建具有相同包名称的应用程序并指定所有可能的Intent过滤器的人可以轻松地进行此操作。
它是如何工作的,还是以其他方式?
答案 0 :(得分:2)
有各种方法可以做到这一点。一种方法是查询将受特殊权限保护的内容提供商。
我很久以前在Github上发布了一个帮助这样做的库:Android Unlocker Library。
如果您正在处理Google生态系统之外的设备,这是一个不错的选择,但是,根据开发人员的经验,应用内购买可以提供更好的用户体验(从而带来更多销售)。
答案 1 :(得分:0)
最简单的方法是使用应用A中的startActivityForResult(...)
对应用应用B的活动,必须使用IntentFilter进行配置才能从外部应用使用。在B调用活动中,您还可以使用getCallingActivity()
检查谁在呼叫。您可以找到示例here。
在启动Activity之前,您可以测试B已安装(使用PackageManager),或者您可以启动活动并捕获异常。
在调用的Activity中,您可以使用the PackageManager.checkSignature(String,String)方法检查调用包的签名。传递A和B的包名称,如果签名匹配,则执行逻辑。