2012-12-10 4 views
1

나는 사용자 정의 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()); 
} 

답변

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

을해야한다.

+0

활동을 시작하지만 데이터는 계속 실행합니다. – Alexis

+1

@ jafar : "이 작업을 수행하는 것이 안전할까요?" - 그러지 않을거야. 단지'onNewIntent()'에 제공된'Intent'를 직접 사용하십시오. – CommonsWare

관련 문제