首页 > 解决方案 > 如何在没有 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'

任何线索我怎么能解决它?

标签: javaandroid

解决方案


推荐阅读