Android 如何处理ActivityNotFoundException?
在我的应用程序中,我需要使用startActivity查看文件的内容,或者使用默认应用程序打开特定文件,但有时android系统可能无法安装所需的应用程序 我的问题是如何处理这个异常。我要干杯,不是FCAndroid 如何处理ActivityNotFoundException?,android,android-activity,Android,Android Activity,在我的应用程序中,我需要使用startActivity查看文件的内容,或者使用默认应用程序打开特定文件,但有时android系统可能无法安装所需的应用程序 我的问题是如何处理这个异常。我要干杯,不是FC 有什么建议吗?THX只需将该活动添加到清单文件中即可。 像 <activity android:name=".ActivityName" android:label="@string/app_name"> </activity
有什么建议吗?THX只需将该活动添加到清单文件中即可。 像
<activity android:name=".ActivityName"
android:label="@string/app_name">
</activity>
注意:捕获此ActivityNotFound异常时要小心,但不能将清单文件修改为运行时,这意味着一旦遇到异常,并且如果要在运行时添加此活动标记,则不能。如果要将错误显示为toast,则
try {
startActivity(intent);
} catch (ActivityNotFoundException e) {
// TODO: handle exception
//Show Toast...
}
发生错误的原因是清单文件中未提及该活动
<activity android:name=".yourActivity"
android:label="@string/app_name">
</activity>
我想你的问题更多:“如何捕获特定异常并防止强制崩溃”。 以下是您在代码中执行此操作的方式:
try {
// here is your code that can potentially throw the exception and the force crash
} catch (ActivityNotFoundException activityNotFound) {
Toast.makeText(this, "your error message", Toast.LENGTH_SHORT).show();
// maybe also log the exception, for future debugging?
}
警告,不要滥用:悄悄地吞下异常是危险的,会使你的应用程序不稳定,并引入奇怪且难以调试的行为。Android 11更新: 如果您的目标SDK版本为30或更高版本,则由于以下原因,您不应再使用
resolveActivity
。您最好使用公认答案中提到的try/catch解决方案。有关更多信息,请参阅
旧答案:(已弃用)
您可以使用resolveActivity
方法
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}else {
Toast.makeText(this,"No suitable app found!",Toast.LENGTH_SHORT).show();
}
如果您想处理异常,那么可以使用Try/Catch并处理它。为了解决这种类型的异常,您必须将您的活动注册到清单文件中。不需要在注册文件中注册每个活动,但当您使用startActivity时,您必须注册您的活动。好的。。我试过了。它起作用了。看看我编辑过的答案。谢谢..对不起,伙计。。这不是我需要的。我想让系统来决定运行哪个活动。请注意,我认为由于新的包可见性规则,Android 11(当您以SDK 30+为目标时)上的操作现在失败了,但这些是可配置的权限:
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}else {
Toast.makeText(this,"No suitable app found!",Toast.LENGTH_SHORT).show();
}