由Activity发Intent引起的IllegalStateException异常

本文介绍了一个由Activity通过Intent启动另一个应用处理文件时引发的IllegalStateException异常案例。异常原因是目标设备上未安装能处理指定类型文件的应用。文中提供了修改代码以避免此类异常的方法,并建议检查设备上是否已安装合适的应用来处理特定文件类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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,"*/*");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liranke

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值