我有一個Android應用程序註冊自定義URL方案(假設應用程序://)如何從相關應用程序內部啓動自定義網址的意圖?
在我的主要活動onResume()
方法我通過調用getIntent().getData()
得到URL數據。
當我瀏覽到包含此鏈接的網頁(如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());
}
啓動活動,但仍然沒有數據。 – Alexis
@jafar:「這樣做安全嗎?」 - 我不會那樣做。只需直接使用提供給'onNewIntent()'的'Intent'。 – CommonsWare