【问题标题】:How to handle the ActivityNotFoundException?如何处理 ActivityNotFoundException?
【发布时间】:2021-05-10 09:43:42
【问题描述】:

在我的应用程序中,我需要使用startActivity来查看文件的内容,或者使用默认应用程序打开某个文件,但有时android系统可能没有安装需要的应用程序。

我的问题是如何处理这个异常。我要干杯,不是FC..

有什么建议吗?谢了

【问题讨论】:

  • 如果你想处理异常,那么你可以使用 Try/Catch 来处理它。为了解决这种类型的异常,您必须将您的活动注册到清单文件中。无需在注册文件中注册每个活动,但是当您使用 startActivity 时,您必须注册您的活动。
  • 好的..我试过了。有用。 THX
  • 看看我编辑的答案。谢谢..

标签: android android-activity


【解决方案1】:

只需在清单文件中添加该活动即可。

喜欢,

<activity android:name=".ActivityName"
                  android:label="@string/app_name">
        </activity>

编辑:

现在抓住ActivityNOtFoundException 把你的代码放进去,

try {

  // Your startActivity code wich throws exception  
} catch (ActivityNotFoundException activityNotFound) {

    // Now, You can catch the exception here and do what you want
}

注意:当你捕捉到这个 ActivityNotFound 异常但你不能修改清单文件以运行时要小心,这意味着一旦你遇到异常并且如果你想在运行时添加这个活动标签那你就不行了。

【讨论】:

  • 对不起,伙计。这不是我需要的。我想让系统决定运行哪个活动。
【解决方案2】:

Android 11 更新:

如果您以 SDK 版本 30 或更高版本为目标,则不应再使用 resolveActivity,因为 new package visibility rules。您最好只使用接受的答案中提到的 try/catch 解决方案。更多信息请参考CommonsWare's answer

旧答案:(已弃用)

你可以使用resolveActivity方法

    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }else {
        Toast.makeText(this,"No suitable app found!",Toast.LENGTH_SHORT).show();
    }

【讨论】:

【解决方案3】:

我认为您的问题更多:“我怎样才能捕获某个异常并防止强制崩溃”。 这就是你在代码中的做法:

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?
}

警告,不要滥用:“默默地吞下”异常是危险的,并且可能使您的应用程序不稳定并引入奇怪且难以调试的行为。

【讨论】:

    【解决方案4】:

    如果您想将错误显示为 toast 则

    try {
        startActivity(intent);
    
    } catch (ActivityNotFoundException e) {
        // TODO: handle exception
        //Show Toast...
    }
    

    由于清单文件中未提及的活动而发生错误。

    <activity android:name=".yourActivity"
          android:label="@string/app_name">
    </activity>
    

    【讨论】:

      猜你喜欢
      • 2013-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-06
      • 1970-01-01
      相关资源
      最近更新 更多