【问题标题】:Unable to prompt to install apk file in Android安卓无法提示安装apk文件
【发布时间】:2017-05-14 08:25:21
【问题描述】:

我正在开发一个 Android 应用程序。在我的应用程序中,我正在检查 MainActivity 中最新 apk 的新版本。如果需要更新应用程序,我只需使用 Retrofit 从服务器下载 apk 文件,然后提示用户安装下载的 apk 文件。所有下载过程完成没有任何问题。但是我在提示用户时遇到问题。我关注了this link

这是我在 MainActivity 中的提示方式

public void promptToInstallDownloadedApk(String path)
    {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(Uri.fromFile(new File(path)), "application/com.football.waiyanhein.tonightfootballreport");
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }

当我运行代码时,它会抛出这个错误。

.354 12750-12750/com.football.waiyanhein.tonightfootballreport E/AndroidRuntime: 致命异常: main 进程:com.football.waiyanhein.tonightfootballreport,PID:12750 android.content.ActivityNotFoundException:找不到要处理的活动 意图{act=android.intent.action.VIEW dat=file:///storage/emulated/0/Android/data/com.football.waiyanhein.tonightfootballreport/files/tonight_football_report.apk typ=application/com.football.waiyanhein.tonightfootballreport 标志=0x10000000 } 在 android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1798) 在 android.app.Instrumentation.execStartActivity(Instrumentation.java:1512) 在 android.app.Activity.startActivityForResult(Activity.java:3917) 在 android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:48) 在 android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:77) 在 android.app.Activity.startActivityForResult(Activity.java:3877) 在 android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:859) 在 android.app.Activity.startActivity(Activity.java:4200) 在 android.app.Activity.startActivity(Activity.java:4168) 在 com.football.waiyanhein.tonightfootballreport.MainActivity.promptToInstallDownloadedApk(MainActivity.java:912) 在 com.football.waiyanhein.tonightfootballreport.MainActivity.writeApkDownloadResponseBodyToDisk(MainActivity.java:893) 在 com.football.waiyanhein.tonightfootballreport.MainActivity$15.onResponse(MainActivity.java:850) 在 retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:68) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5417) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 05-14 04:19:18.359 679-1124/system_process W/ActivityManager: Force 收尾活动 com.football.waiyanhein.tonightfootballreport/.MainActivity 05-14 04:19:18.387 664-664/? E/EGL_emulation:tid 664: eglCreateSyncKHR(1215): 错误 0x3004 (EGL_BAD_ATTRIBUTE) 05-14 04:19:18.505 679-10967/system_process I/OpenGLRenderer:已初始化 EGL,版本 1.4

为什么我不能提示?我将“application/com.football.waiyanhein.tonightfootballreport”设置为促销。这是我的包名。

我也试过了,还是不行。

public void promptToInstallDownloadedApk(String path)
    {
        Intent promptInstall = new Intent(Intent.ACTION_VIEW)
                .setDataAndType(Uri.parse(path),
                        "application/vnd.android.package-archive");
        startActivity(promptInstall);
    }

【问题讨论】:

  • 应该是"application/vnd.android.package-archive" 100% 使用这个,然后贴出你得到的错误,这不应该是你的包名。可能是path 有问题吗?

标签: android file apk


【解决方案1】:

最后一个例子应该可以工作。我是这样使用它的:

File updatedApk = new File(Environment.getExternalStorageDirectory(),
                        "your_file_name");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(updatedApk),
        "application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 2018-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    相关资源
    最近更新 更多