java - 如何在没有 google play 的情况下在 Android 上安装更新?
问题描述
我已经设法在用户的手机上以编程方式下载了最新版本,现在我正试图发送一个意图来请求它安装它。
我没有使用谷歌播放。
这是代码:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/" + fileName)),
"application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ContextHolder.getInstance().getContext().startActivity(intent);
这是清单中的权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera-autofocus" />
我收到此错误:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: ro.clinicasante.viator, PID: 12019
android.os.FileUriExposedException: file:///storage/emulated/0/Download/app-debug-2.apk exposed beyond app through Intent.getData()
at android.os.StrictMode.onFileUriExposed(StrictMode.java:2141)
at android.net.Uri.checkFileUriExposed(Uri.java:2391)
at android.content.Intent.prepareToLeaveProcess(Intent.java:11152)
at android.content.Intent.prepareToLeaveProcess(Intent.java:11104)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1722)
at android.app.ContextImpl.startActivity(ContextImpl.java:1023)
at android.app.ContextImpl.startActivity(ContextImpl.java:994)
at android.content.ContextWrapper.startActivity(ContextWrapper.java:403)
at ro.clinicasante.viator.network.FTPDownloadLatestVersion.onPostExecute(FTPDownloadLatestVersion.java:81)
at ro.clinicasante.viator.network.FTPDownloadLatestVersion.onPostExecute(FTPDownloadLatestVersion.java:21)
at android.os.AsyncTask.finish(AsyncTask.java:771)
at android.os.AsyncTask.access$900(AsyncTask.java:199)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:788)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
I/Process: Sending signal. PID: 12019 SIG: 9
Disconnected from the target VM, address: 'localhost:57651', transport: 'socket'
任何线索我怎么能解决它?
解决方案
推荐阅读
- javascript - 使用javascript将逗号分隔的字符串分成多个用逗号分隔的数组
- html - 由于我的背景动画,我的输入和按钮标签不起作用
- javascript - Chrome中的“调试”功能
- c++ - for循环中的第二个变量不递增
- rust - 如何将带有“Z”后缀的 str 转换为 dateTime 结构?
- java - 如何检查一个字符是否在java中的字符串或数字中
- php - PHP 将所有异常归为一个
- ios - 启动屏幕中的 PDF 矢量图像,在设备上无法正确缩放
- javascript - 使用 d3.js 根据我的 xAxis 文本调整图表大小
- django - 将变量共享到 django 中包含的模板