1

我有一个注册自定义 url 方案的 android 应用程序(比如说 app://)

onResume()我的主要活动的方法中,我通过调用从 url 获取数据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()主要活动的方法称为 BUT getIntent().getData()returns 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());
}
4

1 回答 1

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

应该这样做。

于 2012-12-10T16:34:56.133 回答