달달한 스토리

728x90
반응형

오늘도 여느 때와 마찬가지로

 

코딩하기 딱 좋은 날씨였다.

 

물론 독서실에 있어서 날씨에 영향을 받진

 

않지만 말이다.

 

 

평소처럼 Do it 안드로이드 앱 프로그래밍을 들었다.

 

오늘은 Intent에 대한 내용을 듣고 있었고,

 

선생님의 강의를 듣고,

 

책을 읽고 실습을 하는데,

 

아니 이런..

 

역시나 오늘도 오류가 발생하였다.

 

원래는 이렇게 만들려고 했었다.

 

 

원래는 이렇게 번호를 데이터를 넣고,

 

버튼을 누르면 저런 식으로 통화 버튼 입력창에

 

데이터가 가능 방식이었다.

 

정말 멋진 기능이었다.

 

코드는 아래와 같았다.

 

 

 

잘 안 보이는 분들을 위해 코드를 써 드리겠습니다.

 

우선 xml코드다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textPersonName"
        android:text="Name" />

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="전화걸기" />
</LinearLayout>

 

그리고 java코드다.

package org.techtown.samplecallintent;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

    EditText editText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editText = findViewById(R.id.editText);

        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String data = editText.getText().toString();

                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(data));
                startActivity(intent);
            }
        });
    }
}

책에서 나온 그대로 실행을 하고,

 

 

에뮬레이터에 그대로 값을 입력하고, 버튼을 누르니..

 

 

 

 

이런 식으로 오류가 뜨면서 튕기는 것...

 

하아.. 뭐가 문제일까?

 

우선 로그를 보자.

 

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 이라고만 입력이 될 뿐

 

양 사이드에 이 인용부호가 없다는 점을 집중했다.

 

그래서 실험해 보기로 했다.

 

 

 

 

이 부분을

 

 

 

이런 식으로 바꾸어 주었다.

 

왜 저렇게 넣었냐고?

 

인용부호(특수문자)를 자바에서 넣을 때는

 

다 다르지만,

 

검색해보니 " 이 따옴표는 앞에

 

백스페이스와 엔터 가운데 있는 백 슬래쉬를 넣어줘야 한다고 한다.

 

즉 이런 식으로 \"

 

(여기서는 백 슬래쉬가 원 모양으로 나오지만, 안드로이드 스튜디오에서는 사진과 같이 나옵니다.)

 

자 이제 다시 실행해보았다.

 

제발 이번에는 되길 바라는 간절한 마음으로..

 

 

 

성공...

 

드디어...

 

저 간단한 거 하나 때문에.. 여기까지..

 

하..

 

그래도 뿌듯하다.

 

난 성장한 거다.. 헤헷

 

그럼 오늘은 여기까지

 

https://github.com/qjsqjsaos/SampleCallIntent

 

qjsqjsaos/SampleCallIntent

just practice. Contribute to qjsqjsaos/SampleCallIntent development by creating an account on GitHub.

github.com

 

-오류가 또 생겨서 해결법 찾고 다시 올리겠습니다

 


오류 수정 후

 

정말로 이상하다. 어제 분명 안됐는데, 오늘은 또 된다.

 

그것도 이번에는 data 변수만 입력해도 잘 실행이 된다.

 

참... 신기하고 이상하다..

 

달라진 점이 있다면,

 

어제는 한의원 와이파이로 했고,

 

오늘은 집에 있는 랜선으로 했다.

 

혹시 이 차이라면...

 

아직 내가 알지 못하는 분야라고 판단하여...

 

내가 좀 더 성장하고, 다시 이 문제를 풀어보려고 한다.

728x90
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading