Android应用:使用“打开方式...”处理在Android其他位置打开的链接

时间:2013-03-25 13:01:20

标签: android webview hyperlink

我是Android应用程序开发的新手,但我有一个有应用程序的网站 - 该应用程序只是使用webview来加载网站。到目前为止非常简单。

由于桌面用户将使用该网站本身,并且他们想要分享他们在网站上遇到的链接,移动用户可能会说,去Facebook,看到他们想要访问的链接,它只会打开网站在浏览器中,而不是在应用程序中加载该URL,这显然会破坏/混淆用户(该网站有一个登录系统,对于初学者,他们需要从Android浏览器再次登录)。

有没有办法在Android中监听网站链接并使用应用程序的webview打开这些链接,而不是在浏览器中打开?我知道Facebook有fb://链接打开应用程序。

但问题进一步复杂化。实际上,为了防止内部链接启动外部Android浏览器,我有一个过滤效果:

public boolean shouldOverrideUrlLoading(WebView view, String url) {
     if (url.contains("root_address_of_site/page/")) {

         return false;
     } else {
         view.getContext().startActivity(
                  new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
     }
        return true;

 }

在应用程序中,您可以通过基本网址分享指向Facebook,Twitter和日历的链接,因此指向Twitter的链接可能是https://twitter.com/intent/tweet?original_referer=root_address_of_site/page/&text=page_name&tw_p=tweetbutton&url=root_address_of_site/page/。当然,这只会被过滤器阻止,因为意图URL'包含''root_address_of_site / page /'。我想知道是否有办法改变过滤器,使其“以'开头',而不是'url.contains'?这意味着Twitter / facebook链接仍将在外部打开,但无论如何,仍然可以在应用程序内打开指向该网站的链接。

我希望这是有道理的 - 描述起来很难。感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

这是documentation about how to handle your own links in app

所以你需要将你的一个活动注册为所需的uri模式的处理程序:

<activity android:name="OpenCustomUriActivity">
     <intent-filter>
          <data
              android:scheme="http"
              android:host="yoursite.com"
              android:pathPrefix="pathOnYourSiteIfNeeded"
              />
      </intent-filter>
</activity>

然后只需处理活动中的意图并做你需要的事情。