shouldOverrideUrlLoading() & parseUri()


마켓에서 브라우저 application 을 다운로드 받았을 경우에 우리는 둘 중 어느 것을 실행하겠느냐는 팝업 창을 보게된다..


1. 링크를 따라 이동할 때마다.

2. 서버가 redirection 할 때마다.
 (www.naver.com 으로 치고 가면 m.naver.com 으로 redirection 이 된다.)

3. 어떤 application 에서 브라우저 연동을 할 경우.


위에서 1, 2 는 shouldOverrideUrlLoading() 때문에 선택 팝업이 생기고...
 
           3 은 activitymanager 에서 알아서 해주는 것 같다...



그런데 링크를 이동 시에 선택 팝업 창에서 default 선택을 했음에도 불구하고 또 다시 선택 팝업이 뜨는 경우가 있다..

아래 소스 때문이다..


intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);


아래 설명을 참고하면 위 소스는 url 을 가지고 intent object 를 만들어 낸다..

이 때 intent 에 몇가지 정보가 들어 간다.

1. ACTION_VIEW

2. uri 정보. ( http:// , https:// , javascript  등을 구분해 주는..)

==> 링크 이동 중에 http:// 로 시작되는 주소들은 default setting 된 값이 적용되지만..
      https:// 로 시작되는 주소들은 새로운 intent 로 인식하기 때문에 선택 팝업이 새로 뜨는 것이다..



default 로 셋팅했는데도 또 다시 물어 본다고 당황하지 마시라....

intent 가 다르기 때문이다..


---------------------------

public static Intent parseUri (String uri, int flags)

Since: API Level 4

Create an intent from a URI. This URI may encode the action, category, and other intent fields, if it was returned by toUri(int). If the Intent was not generate by toUri(), its data will be the entire URI and its action will be ACTION_VIEW.

The URI given here must not be relative -- that is, it must include the scheme and full path.

Parameters
uriThe URI to turn into an Intent.
flagsAdditional processing flags. Either 0 or URI_INTENT_SCHEME.
Returns
  • Intent The newly created Intent object.
Throws
URISyntaxExceptionThrows URISyntaxError if the basic URI syntax it bad (as parsed by the Uri class) or the Intent data within the URI is invalid.
See Also

--------------------------------

참고로 shouldOverrideUrlLoading 함수에서 선택 팝업이 구동되도록 하는 부분이다...

        try {

            if (startActivityIfNeeded(intent, -1)) {
                return true;
            }
        } catch (ActivityNotFoundException ex) {
             // ignore the error. If no application can handle the URL,
            // eg about:blank, assume the browser can handle it.
        }

















by 수영사랑 | 2010/08/23 16:10 | 트랙백 | 덧글(2)

트랙백 주소 : http://skyswim42.egloos.com/tb/3819613
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 사평하 at 2011/12/27 20:06
안녕하세요. 안드로이드 URL관련 정보를 찾다가 많은 도움이 되었습니다.
제가 할려고 하는 작업은 서비스상태에서, 브라우저나 웹킷에서 사용되는 URL 감시하고 있다가 특정 URL이 나오면 메세지를 띄우고 차단할려는 작업입니다.
그런 작업이 가능한가요?
Commented by 하이에나 at 2012/09/25 17:18
좋은 정보네요 감사합니다. 많은 도움이 되었습니다.

:         :

:

비공개 덧글

◀ 이전 페이지다음 페이지 ▶