Jim*_*Jim 5 installation android android-activity
我制作了一个应用程序,我从内部服务器下载 APK,将其保存在本地并希望提示用户安装它。
我的代码如下:
protected void onPostExecute(String path) {
Intent promptInstall = new Intent(Intent.ACTION_VIEW);
promptInstall.setDataAndType(Uri.parse(path), "application/vnd.android.package-archive");
promptInstall.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(promptInstall);
}
Run Code Online (Sandbox Code Playgroud)
该路径包含 APK 文件,因此下载没有问题,但在尝试启动活动时,我得到:
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=/storage/sdcard/download/internalLocalApplication.apk typ=application/vnd.android.package-archive flg=0x10000000 }
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1765)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1602)
at android.app.Activity.startActivityFromFragment(Activity.java:4340)
at android.app.Activity.startActivityFromFragment(Activity.java:4312)
at android.app.Fragment.startActivity(Fragment.java:1075)
at android.app.Fragment.startActivity(Fragment.java:1054)
Run Code Online (Sandbox Code Playgroud)
我在这里做错了什么?
更新:
似乎如果我按如下方式更改代码,它会起作用!好像Uri有问题?
@Override
protected void onPostExecute(String path) {
Uri fileLoc = Uri.fromFile(new File(path));
Intent promptInstall = new Intent(Intent.ACTION_VIEW);
promptInstall.setDataAndType(fileLoc, "application/vnd.android.package-archive");
promptInstall.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(promptInstall);
}
Run Code Online (Sandbox Code Playgroud)
当您调用 时Uri.parse(path),path参数需要包含如下内容:
file:///storage/sdcard/download/internalLocalApplication.apk
Run Code Online (Sandbox Code Playgroud)
目前您的path参数不包含方案(即:部分file://),这就是无法正确解析它的原因。
然后,当 Android 寻找Activity可以查看此 URI 的对象时,它找不到匹配的对象,因为该 URI 没有“方案”。
| 归档时间: |
|
| 查看次数: |
4420 次 |
| 最近记录: |