【问题标题】:I'm seeing an `android.content.ActivityNotFoundException` when trying to open a web browser from my app尝试从我的应用程序打开网络浏览器时,我看到了“android.content.ActivityNotFoundException”
【发布时间】:2021-02-08 21:34:39
【问题描述】:

以下代码每隔一段时间就会给我一个android.content.ActivityNotFoundException

我在一些活动中使用相同的代码来引导用户访问网站上的其他信息,而且它似乎大部分时间都可以正常工作。

private void openWebPage(String url_to_view) {
    Intent open_web_page_intent = new Intent();

    if (url_to_view != null && !url_to_view.equals("")) {
        open_web_page_intent.setAction(Intent.ACTION_VIEW);
        try {
            open_web_page_intent.setData(Uri.parse(url_to_view));
            startActivity(open_web_page_intent);
        } catch (ParseException e) {
            Log.e(LOGTAG, "URI Parse Exception in Open Web Page");
        }
    }
}

有没有办法防止这个错误?

我无法从堆栈跟踪中找出问题是与调用 Activity 还是与我正在启动的新 Activity 相关? (下面的完整堆栈跟踪)

如果问题出在新活动上,在 StartActivity 语句周围的 try/catch 会是一个很好的保障吗? (崩溃并不常见,我无法在我的测试设备或 AVD 上重现它)。

另请注意,堆栈跟踪引用StartActivityForResult,在这种情况下我没有这样做,我只是正常启动新活动。

android.content.ActivityNotFoundException: 
  at android.app.Instrumentation.checkStartActivityResult (Instrumentation.java:2071)
  at android.app.Instrumentation.execStartActivity (Instrumentation.java:1717)
  at android.app.Activity.startActivityForResult (Activity.java:5252)
  at androidx.fragment.app.FragmentActivity.startActivityForResult (FragmentActivity.java:6)
  at android.app.Activity.startActivityForResult (Activity.java:5203)
  at androidx.fragment.app.FragmentActivity.startActivityForResult (FragmentActivity.java:6)
  at android.app.Activity.startActivity (Activity.java:5581)
  at android.app.Activity.startActivity (Activity.java:5549)
  at com.nooriginalthought.amalfi.FirstRun.openWebPage (FirstRun.java:27)
  at com.nooriginalthought.amalfi.FirstRun.lambda$initialize$4 (FirstRun.java:1)
  at com.nooriginalthought.amalfi.FirstRun.lambda$initialize$4$FirstRun (FirstRun.java:1)
  at com.nooriginalthought.amalfi.-$$Lambda$FirstRun$iHROIfEVj1qDNupIO6vj8JGEmlM.onClick (-.java:1)
  at android.view.View.performClick (View.java:7869)
  at android.widget.TextView.performClick (TextView.java:14958)
  at android.view.View.performClickInternal (View.java:7838)
  at android.view.View.access$3600 (View.java:886)
  at android.view.View$PerformClick.run (View.java:29362)
  at android.os.Handler.handleCallback (Handler.java:883)
  at android.os.Handler.dispatchMessage (Handler.java:100)
  at android.os.Looper.loop (Looper.java:237)
  at android.app.ActivityThread.main (ActivityThread.java:8107)
  at java.lang.reflect.Method.invoke (Method.java)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:496)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1100)

【问题讨论】:

  • 你的 url_to_view 是否包含 http?
  • @SarahKhan 是的,好吧 https。它们是从strings.xml 资源中提取的固定目的地,具体取决于用户将被引导到哪个页面。

标签: java android android-activity


【解决方案1】:

有没有办法防止这个错误?

将任何使用隐式IntentstartActivity()startActivityForResult() 调用包装在try/catch 块中,您可以在其中捕获ActivityNotFoundException。请记住,您的应用用户无需访问网络浏览器(例如,具有受限帐户的孩子)。

我无法从堆栈跟踪中找出问题是与调用 Activity 还是与我正在启动的新 Activity 相关?

来自com.nooriginalthought.amalfi.FirstRun.openWebPage (FirstRun.java:27)。我们没有您的完整文件,也无法告诉您是哪一行。

还请注意,堆栈跟踪指的是我在这种情况下没有执行的 StartActivityForResult,我只是正常启动新活动。

您的代码正在调用startActivity(),您可以在堆栈跟踪的at android.app.Activity.startActivity (Activity.java:5549) 行中看到。最终,它会在内部调用startActivityForResult()

【讨论】:

    猜你喜欢
    • 2017-11-06
    • 1970-01-01
    • 2011-01-13
    • 2018-08-18
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 2020-11-30
    相关资源
    最近更新 更多