如何在不打开Play商店的情况下以编程方式安装应用程序(就像Google Drive一样)
今天,Google云端硬盘应用询问我是否要安装新的应用表格和文档。
我已经接受,期待它打开Google Play商店,以便我可以按安装。
它没有 。 它只是向我展示了每个应用程序的权限确认安装的popup式窗口,与Play商店上任何应用程序上的“安装”button相同。
我不知道这可以做到。
我们如何在应用程序中重现这种行为:有一个“安装应用程序XPTO”button,不需要打开Google Play商店? 只是显示权限对话框,并继续通过Play商店安装它?
更新:
对于那些因为认为这和其他问题一样的低调而言…这不是!
在这种情况下,APK不会被Google云端硬盘应用下载并安装。 Google云端硬盘“ 告诉 ”Play商店下载和安装。
这是我感兴趣的API。
为了支持我的情况:在按下INSIDE Google云端硬盘来安装应用程序而不打开Play商店之后,开始下载 。 在下载过程中,我打开Play商店进行检查,并:
屏幕截图certificate,不是Google云端硬盘下载APK并安装它。 这是Play商店。
Google云端硬盘的日志显示,负责“告知”Google Play商店安装应用的活动是
com.google.android.apps.docs/com.google.android.apps.docs.app.PhoneskyApplicationInstallerActivity
这显然是“告诉”
com.android.vending/com.google.android.finsky.billing.lightpurchase.LightPurchaseFlowActivity
安装所需的软件包。
所以,从理论上讲,可以创造一个意图
Intent intent = new Intent("com.android.vending.billing.PURCHASE"); intent.setClassName("com.android.vending", "com.google.android.finsky.billing.lightpurchase.LightPurchaseFlowActivity"); intent.putExtra(EXTRA_NAME, EXTRA_VALUE); startActivityForResult(intent, 0);
有正确的额外价值和voilà!
但是,从非Google签名应用程序调用LightPurchaseFlowActivity
失败,因为它们显然(根据日志)检查调用包的签名:
W/Finsky(13209): [1] LightPurchaseFlowActivity.setupFromExternalPurchaseIntent: Called from untrusted package.
那么,在这个时刻呢,这个不可能实现。
无需点击Play商店网站上的button,Google+即可实现可直接下载应用的button(请参阅此链接 )。
链接如下所示: https://play.google.com/store/apps/details?id=com.example.app&rdid=com.example.app&rdot=1&feature=md
: https://play.google.com/store/apps/details?id=com.example.app&rdid=com.example.app&rdot=1&feature=md
如果你添加了rdid,rdot和feature参数,它可以在我的手机上工作(如果我在浏览器中input它,没有testing意图,没有testing更新应用程序,只安装它)。
编辑 :
我发现你只需要添加rdid参数到url。 资料来源: http : //www.androidb.com/2014/04/increase-app-installs-with-a-single-trick/
EDIT2:
不符合意图。 🙁
我想说Google云端硬盘具有系统权限,就像Play商店一样。 可能是因为它是用Google的签名签名的。
如果您设法拥有“android.permission.INSTALL_PACKAGES”权限,您可以调用API(不包含在SDK Manager部署的android.jar中),您必须从模拟器的android.jar中获取隐藏的API实例)来安装应用程序。
所以,基本上,除非你有系统权限(通过把你的APK放入/ system / app,用OEM证书或root签名),你将无法做到这一点。
来源:已经编程的一些系统应用程序
—更新
当然,Play商店可能有一些门可以用来安装任何应用程序,但是这可能需要一个你自己无法获得的权限
如果你知道你的apk文件,你可以很容易地。
File file = new File(dir, "YourApp.apk"); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive"); startActivity(intent);