1. 相关代码:
由Activity发Intent跳转引起的IllegalStateException异常。
public static Intent getApkFileIntent( Context context,String param ) { Intent intent = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setAction(android.content.Intent.ACTION_VIEW); Uri uri = Uri.fromFile(new File(param )); intent.setDataAndType(uri,"application/vnd.ms-word"); context.startActivity(intent); return intent; }
2. 错误信息:
java.lang.IllegalStateException: Could not execute method of the activity
at android.view.View$1.onClick(View.java:4273)
at android.view.View.performClick(View.java:5217)
at android.view.View$PerformClick.run(View.java:20983)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6117)
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:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at android.view.View$1.onClick(View.java:4268)
... 10 more
Caused by: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=file:///storage/emulated/0/aaa.doc typ=application/vnd.ms-word flg=0x10000000 }
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1801)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1499)
at android.app.Activity.startActivityForResult(Activity.java:3954)
at android.app.Activity.startActivityForResult(Activity.java:3901)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:820)
at android.app.Activity.startActivity(Activity.java:4225)
at android.app.Activity.startActivity(Activity.java:4193)
at cn.aaa.util.FileEngine.openFile(FileEngine.java:1062)
at cn.aaa.ui.activity.TestActivity.openFile(TestActivity.java:172)
... 13 more
java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at android.view.View$1.onClick(View.java:4268)
at android.view.View.performClick(View.java:5217)
。。。
3. 原因分析:
从log来分析,很明显,是由于TestActivity发了Intent,act=android.intent.action.VIEW dat=file:///storage/emulated/0/aaa.doc typ=application/vnd.ms-word flg=0x10000000 },
从Intent的参数来看,是要用另外一个app打开word文档。但是,遗憾的是,整个手机中就没有打开这种类型的app,最终导致IllegalStateException异常。
4. 解决办法:
1. 这种异常,需要捕获,并抛出异常,提示用户“此文档无法打开”。
2. 在手机上安装一个可以打开word文档的app。
3. 将Intent相关参数改为"*/*",如:
intent.setDataAndType(uri,"*/*");