android日常--ActivityNotFoundException错误

记2018年6月22日

学习android版本更新功能

使用intent隐式调用系统应用安装apk时遇到的问题。


这是异常信息:

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.example.sanqian.splashdemo, PID: 24544
                  android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW cat=[android.intent.category.DEFAULT] typ=application/vnd.android.package-archive flg=0x10000000 }
                      at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1792)
                      at android.app.Instrumentation.execStartActivity(Instrumentation.java:1512)
                      at android.app.Activity.startActivityForResult(Activity.java:3896)
                      at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:54)
                      at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:75)
                      at android.app.Activity.startActivityForResult(Activity.java:3845)
                      at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:708)
                      at android.app.Activity.startActivity(Activity.java:4232)
                      at android.app.Activity.startActivity(Activity.java:4147)
                      at com.example.sanqian.splashdemo.com.sanqian.Activity.SplashActivity.installApk(SplashActivity.java:104)
                      at com.example.sanqian.splashdemo.com.sanqian.Activity.SplashActivity$4.onSuccess(SplashActivity.java:167)
                      at com.lidroid.xutils.http.HttpHandler.onProgressUpdate(HttpHandler.java:218)
                      at com.lidroid.xutils.task.PriorityAsyncTask$InternalHandler.handleMessage(PriorityAsyncTask.java:385)
                      at android.os.Handler.dispatchMessage(Handler.java:111)
                      at android.os.Looper.loop(Looper.java:224)
                      at android.app.ActivityThread.main(ActivityThread.java:5958)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at java.lang.reflect.Method.invoke(Method.java:372)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1113)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:879)

上网找了好多类似的异常,加了权限,加了setFLAG,但问题都不在这,后来索性把整个intent隐式调用copy下来运行,居然成功运行,后来比对一下发现是setData和setType方法的问题。

修改前的bug代码:

protected void installApk(File file){
        //系统界面,源码,安装apk入口
        Intent intent = new Intent("android.intent.action.VIEW");
        intent.addCategory("android.intent.category.DEFAULT");
        //文件作为数据源,设置安装的类型
        
        intent.setData(Uri.fromFile(file));
        intent.setType("application/vnd.android.package-archive");
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        startActivity(intent);
    }

修改后的代码:

    /**
     * 下载完成,提示用户安装
     */
    private void installApk(File file) {
        //调用系统安装程序
        Intent intent = new Intent();
        intent.setAction("android.intent.action.VIEW");
        intent.addCategory("android.intent.category.DEFAULT");
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
        startActivity(intent);
    }

可见,单独使用intent.setData()和intent.setType()会报错,后来使用intent.setDataAndType()居然成功运行,,,实在是。。。

至于为什么还是不清楚,有大佬知道还望留言相告,在此感谢。

   

另外,我的运行环境是android5.1,  API 22

猜你喜欢

转载自blog.csdn.net/qq_35284431/article/details/80778816
今日推荐