如何在不打开Play商店的情况下以编程方式安装应用程序(就像Google Drive一样)

今天,Google云端硬盘应用询问我是否要安装新的应用表格和文档。

我已经接受,期待它打开Goog​​le Play商店,以便我可以按安装。

它没有 。 它只是向我展示了每个应用程序的权限确认安装的popup式窗口,与Play商店上任何应用程序上的“安装”button相同。

我不知道这可以做到。

我们如何在应用程序中重现这种行为:有一个“安装应用程序XPTO”button,不需要打开Goog​​le 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,rdotfeature参数,它可以在我的手机上工作(如果我在浏览器中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);