美文网首页
[Point] Android 跳转浏览器

[Point] Android 跳转浏览器

作者: simplehych | 来源:发表于2018-12-14 15:42 被阅读0次

理想代码如下即可

String url = "http://www.baidu.com";
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(browserIntent);

奔溃日志
android.content.ActivityNotFoundException: No Activity found to handle Intent

原因
url 为非法地址,包含%3A,将其转换为 ' : ' 即可。且必须为 ' http ' 或 ' https ' 开头的字符串

锁定:h5页面传过来的url 存在问题
http%3A//finance.people.com.cn/n1/2018/1213/c1004-30464034.html

解决方式
String decode = URLDecoder.decode(url)
输出结果:http://finance.people.com.cn/n1/2018/1213/c1004-30464034.html

未避免其他异常,建议 try catch

分析可能原因

  1. 问题出在 WebView JsBridge @JavascriptInterface 方法中,怀疑是否需要主线程或子线程处理,验证无影响
MainHandler.runOnUiThread(new Runnable() {
      @Override
      public void run() {
         //跳转浏览器
      }
 });
getActivity.runOnUiThread(new Runnable() {
      @Override
       public void run() {
          //跳转浏览器
       }
 });
 new Handler().post(new Runnable() {
      @Override
      public void run() {
          //跳转浏览器
      }
});
  1. 检查清单文件 Activity 配置(name, intent-filter),验证无影响
<activity
    android:name="com.peopletech.gov.mvp.ui.activity.GovListActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="${GOV_SCHEME}" />
    </intent-filter>
</activity>
  1. 项目中用到了路由,猜测没有获取到 Activity,故新建了 Activity 进行跳转操作,依旧无效。

  2. Android 版本问题,8.0更换了本地浏览器包名,不属于该问题原因

// 8.0以下
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
Uri content_url = Uri.parse("https://xxx");         //要跳转的网页
intent.setData(content_url);
intent.setClassName("com.android.browser", "com.android.browser.BrowserActivity");
context.startActivity(intent);

//8.0 以上
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
Uri content_url = Uri.parse("http://xxx");
intent.setData(content_url);
intent.setClassName("org.chromium.webview_shell","org.chromium.webview_shell.WebViewBrowserActivity");
context.startActivity(intent);

另对 url 进行编解码操作:

String originUrl = "http%3A//finance.people.com.cn/n1/2018/1213/c1004-30464034.html";
String encodeUrl = URLEncoder.encode(originUrl);
String decodeUrl = URLDecoder.decode(originUrl);
String utf8Url = new String(originUrl.getBytes("UTF-8"), "UTF-8");

//结果依次为:
//encodeUrl: http%253A%2F%2Ffinance.people.com.cn%2Fn1%2F2018%2F1213%2Fc1004-30464034.html 
//decodeUrl: http://finance.people.com.cn/n1/2018/1213/c1004-30464034.html
//utf8Url: http%3A//finance.people.com.cn/n1/2018/1213/c1004-30464034.html 

相关文章

网友评论

      本文标题:[Point] Android 跳转浏览器

      本文链接:https://www.haomeiwen.com/subject/pikghqtx.html