나는 사용자 정의 URL 스키마를 등록 안드로이드 응용 프로그램이 (의 앱을 가정 해 봅시다 : //) 내 주요 활동의 onResume()
방법에서관련 앱 내부에서 맞춤 URL로 인 텐트를 시작하는 방법은 무엇입니까?
내가 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;
}
}
}
나는 웹보기에서 링크를 클릭
, 주요 활동의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