6

현재 일부 HTML 전화 번호 및 URL이 포함 된 TextView가 있습니다. 나는 우리가이 링크를 클릭 할 수 있도록하기 위해 setMovementMethod를 사용할 수있는 것으로 나타났습니다LinkMovementMethod를 사용하는 동안 예외 (ActivityNotFoundException)을 catch하는 방법

:이 꽤 잘 작동하지만, 일부 장치에, 그것은 ActivityNotFoundException와 충돌하고 매우 understanble입니다

tv.setText("Phone number is: +32485123456 and url is http://www.blabla.com"); 
tv.setMovementMethod(LinkMovementMethod.getInstance()); 

. (아래 코드 참조)

이러한 문제는 내 개발자 콘솔에 표시되며이를 재현 할 수 없습니다.

내가 직면하고 큰 문제는 클릭이 LinkMovementMethod

으로 내가 이러한 오류를 피할 수있는 방법에 대한 아이디어를 처리로 내 활동에/catch 코드를 시도 할 수 없다는 것입니다?

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=www.vlaamsbrabant.be/zoutleeuw (has extras) } 
    at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1408) 
    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1378) 
    at android.app.Activity.startActivityForResult(Activity.java:2817) 
    at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:817) 
    at android.app.Activity.startActivity(Activity.java:2923) 
    at android.text.style.URLSpan.onClick(URLSpan.java:62) 
    at android.text.method.LinkMovementMethod.onTouchEvent(LinkMovementMethod.java:216) 
    at android.widget.TextView.onTouchEvent(TextView.java:6788) 
    at android.view.View.dispatchTouchEvent(View.java:3766) 
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936) 
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936) 
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936) 
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936) 
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936) 
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936) 
    at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1896) 
    at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1159) 
    at android.app.Activity.dispatchTouchEvent(Activity.java:2086) 
    at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1880) 
    at android.view.ViewRoot.handleMessage(ViewRoot.java:1811) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:123) 
    at android.app.ActivityThread.main(ActivityThread.java:4627) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:521) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
    at dalvik.system.NativeStart.main(Native Method) 

답변

18

언제든지 LinkMovementMethod를 확장하고 거기에서 오류를 catch 할 수 있습니다. 같은

뭔가 :

private class MovementCheck extends LinkMovementMethod { 

    @Override 
    public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) { 
     try { 
      return super.onTouchEvent(widget, buffer, event) ; 
     } catch(Exception ex) { 
      Toast.makeText(MainActivity.this, "Could not load link", Toast.LENGTH_LONG).show(); 
      return true; 
     } 
    } 

} 

이 텐트를 처리 할 응용 프로그램 설치가 없음을 경우 오류 메시지가 표시됩니다.

또 다른 옵션은 this question에있는 방법을 사용하여 링크를 처리 할 준비가되었는지 미리 결정하는 것입니다.

+0

아직 테스트하지는 않았지만 완벽한 대답처럼 들립니다. 답변을 수락했습니다! –

+3

다음과 같이 사용하십시오. - setMovementMethod (new MovementCheck()); – David

+0

또는 이렇게 사용하십시오.추가 : \t private static MovementCheck sInstance; \t 공용 static MovementCheck의 getInstance() { \t \t 경우 (sInstance == NULL) \t \t \t sInstance = 새로운 MovementCheck(); \t \t return sInstance; \t} 또한 TextView에서 컨텍스트를 얻을 수 있습니다. widget.getContext(); – Yar

0

그의 기원은 XML에 당신의 텍스트 뷰 경우가 aproach가 here을 정의 시도 할 수 있습니다.
마비 (나는 거의 확신한다.) 하지만 OS가 이것을 처리 할 것이다.

그래도 작동하지 않는다면 태블릿과 휴대 전화에 기기 독립적 코드를 작성해야합니다. 이 경우, 머위는 this 게시물을 안내합니다. 전화가 연결되면 연결을 허용하고 그렇지 않으면 실 거예요. 당신이 도움이 PHONENUMBER 하나 개

희망을 클릭 할 때 OS가 어느 쪽이든 링크 (웹 사이트) 중 하나를 수행 할 수 있기 때문에

Maby 2 textviews에서이 링크를 오토넷은 확률값은 클릭 할 수 있습니다 방법과 충돌 이잖아 .

+0

xml로 설정 한 경우에도 충돌이 발생하며 일부 휴대 전화에서도 오류가 발생합니다 (URL 충돌) –

+0

기기 유형 확인을 시도한 적이 있습니까? –

+0

또는 maby와 2 개의 텍스트 뷰로 전화 번호와 URL을 분리하십시오 –