如何从相关应用程序内部启动自定义URL的意图?

时间:2012-12-10 15:58:23

标签: android android-intent android-webview intentfilter

我有一个注册自定义网址方案的Android应用程序(让我们说app://)

在我的主要活动的onResume()方法中,我通过调用getIntent().getData()从网址获取数据。

当我浏览包含此类链接的网页(例如app://action/1234)时,getIntent().getData()会返回我需要采取适当行动的信息。没关系。

现在我希望在我的应用程序中使用WebView来执行相同操作。这是我的代码:

WebView banner = ...
banner.setWebViewClient(new WebViewClient() {

    @Override
    public void onLoadResource(WebView view, String url) {

        if (url.startsWith("app://")) {

            try {
                Intent i = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
                startActivity(i);

                return true;

            } catch (URISyntaxException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return false;

        }
    }
}

当我点击WebView中的链接时,主要活动的onResume()方法被称为但是getIntent().getData()返回null

我想

Intent i = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
startActivity(i);

不是这样做的好方法。

如何重现在浏览器中点击链接时发生的同一事件?

编辑:

我的活动有android:launchMode="singleTop",这似乎是我的问题的原因,但如果我没有设置启动模式,则启动另一个活动副本(我不希望这样)。我试图通过覆盖onNewIntent()来处理意图,并且在给予它的意图中我可以看到数据。但我希望我的应用程序能够以相同的方式对其内部或其他应用程序启动

这样做是否安全? :

@Override
public void onNewIntent(Intent intent) {
    getIntent().setData(intent.getData());
}

1 个答案:

答案 0 :(得分:1)

Intent i=new Intent(Intent.ACTION_VIEW, Uri.parse(url));

应该这样做。