2020-12-25 22:28:23.445 18108-18108/org.techtown.samplecallintent E/AndroidRuntime: FATAL EXCEPTION: main
Process: org.techtown.samplecallintent, PID: 18108
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=01077777777 }
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:2067)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1727)
at android.app.Activity.startActivityForResult(Activity.java:5320)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:676)
at android.app.Activity.startActivityForResult(Activity.java:5278)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:663)
at android.app.Activity.startActivity(Activity.java:5664)
at android.app.Activity.startActivity(Activity.java:5617)
at org.techtown.samplecallintent.MainActivity$1.onClick(MainActivity.java:31)
at android.view.View.performClick(View.java:7448)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:992)
at android.view.View.performClickInternal(View.java:7425)
at android.view.View.access$3600(View.java:810)
at android.view.View$PerformClick.run(View.java:28305)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
흐음.. 딱 봐도 정상은 아닌 것 같다.
그래도 저기 가운데를 보면 MainActivity.java: 31번째 줄에 문제가 있다고 하는 것 같아 확인해보니,
흐음.. 딱히 이게 문제는 아닌 듯했다.
intent값을 제대로 전달을 못 받은 건가 하고..
스택오버플로우와 앱 오픈 채팅을 수소문 끝에
알아낸 방법은 키보드를 안드로이드 키보드로 바꾸라는 소리!
하는데..
일단 이런 오류가 API28부터 많이 발생되었다고 한다. (내 건 API 30이다)
이 밖에 다른 Intent 실행 시 말이다.
근데, 초보자인 나로서는 설정 들어가서 키보드 바꿔 보고
별짓을 다했지만,
변화는 없는 듯했다.
하지만 이대로 원인도 모르고 넘어가기에는,
내 성격상 오늘 잠을 못 잘 것 같기에,
무조건 저 오류를 알아내어 다음부터는
저 오류를 만나도 겁내지 않기로 다짐했다.!!
그러고 2시간이나 지난 뒤에..
한 가지 사실을 알아냈다.
이 부분을 다시 보면 tel:010-0000-0000이라고 써져있는 것이다.
나는 010-7777-7777이라고 입력했다.
뭐가 다른지 모르겠나?
tel: 을 입력하지 않았다는 것이다.
뒤통수를 빡 맞은 듯한 기분이었지만,
아무렴 그래도 해결한 것 같아 기분이 좋아져
그대로 입력을 해보았다.
하지만...
한번 더 오류,..
카카오톡 오픈 채팅 어느 초보 개발자 분도 말씀하시길..
자기도 별짓 다해봤는데 안됬다고..
아 정말.. 이거 자체가 안 되는 건가 싶을 때,
마지막으로 구글링을 해서 Intent에서 ACTION_VIEW를 했을 때,
안에 파라미터 값이 뭐가 들어가 있는지 보았다.
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("tel:012-3456-7890"));
여기서 유심히 봐야 할 부분은 바로 저 따옴표이다.
"
이 녀석이다.
다른 말로는 "인용부호"라고 하는 녀석..
그러고 보니 내가 변수로 넣었던 data에서는 내가 입력한
tel:010-7777-7777 이라고만 입력이 될 뿐
양 사이드에 이 인용부호가 없다는 점을 집중했다.
그래서 실험해 보기로 했다.
이 부분을
이런 식으로 바꾸어 주었다.
왜 저렇게 넣었냐고?
인용부호(특수문자)를 자바에서 넣을 때는
다 다르지만,
검색해보니 " 이 따옴표는 앞에
백스페이스와 엔터 가운데 있는 백 슬래쉬를 넣어줘야 한다고 한다.
즉 이런 식으로 \"
(여기서는 백 슬래쉬가 원 모양으로 나오지만, 안드로이드 스튜디오에서는 사진과 같이 나옵니다.)