如何解决以编程方式安装APK-返回值
|| 在我的应用中,我正在通过活动调用JavaScript接口。在与此界面相关联的网络视图中,我要求用户下载并安装APK。我正在使用\“ startActivityForResult \”开始安装过程(下载文件后)。这是代码:Intent promptInstall = new Intent(Intent.ACTION_VIEW);
promptInstall.setDataAndType(Uri.fromFile(new File(PATH + \"app.apk\")),\"application/vnd.android.package-archive\");
startActivityForResult(promptInstall,ACCEPT_INSTALL);
我在主要活动类中使用\“ onActivityResult \”来捕获上述活动的返回值。这是代码:
@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data) {
super.onActivityResult(requestCode,resultCode,data);
Log.d(\"requestCode,resultCode from Install APK: \",Integer.toString(requestCode) + \",\" + Integer.toString(resultCode));
}
我面临的问题是\“ resultCode \”始终返回0,与用户是否选择安装应用程序无关。我真的需要知道用户是否安装了该应用程序。关于为什么返回值始终为0的任何想法?
我的最后一招是使用packagemanager在onActivityResult函数中检查应用程序是否存在,以确定是否已安装该应用程序,但我想知道为什么返回值始终为0。
非常感谢...
解决方法
我们开发了一个应用程序市场,并遇到了同样的问题。我们的解决方案是按照您的建议使用数据包管理器。
我研究了一些意图过滤器,因为在安装过程中似乎有一些意图。但是我们无法使其运行。数据包管理器解决方案可以正常工作,因为您可以检查对应用程序更新很重要的应用程序版本。
, 您可以检查firstInstallTime / lastUpdateTime并与您向PackageInstaller的请求时间进行比较以安装软件包,请参见以下示例:
try {
PackageInfo installedPackageInfo = getPackageManager()
.getPackageInfo(installedPackageName,PackageManager.GET_ACTIVITIES);
long firstInstallTime = installedPackageInfo.firstInstallTime;
long lastUpdateTime = installedPackageInfo.lastUpdateTime;
// installationRequestTime is the time which you request for the PackageInstaller to install your package. This time should be got from System.currentTimeMillis()
return firstInstallTime > installationRequestTime || lastUpdateTime > installationRequestTime;
} catch (PackageManager.NameNotFoundException e) {
// First time installation and user choose to not install the app
return false;
}
该解决方案并不理想,但是很遗憾,PackageInstaller无法为我们提供清晰的resultCode。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。