본문 바로가기

Blog/Android

CallIntent, 전화번호 받아오기

어플 액티비티에서 전화번호를 받아 그 정보를 인텐트로 넘겨주고 전화앱에 전달해줌<br>

즉, 데이터 전달

 

MainActivity.java

    import android.content.ComponentName;
    import android.content.Intent;
    import android.net.Uri;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;

    public class MainActivity extends AppCompatActivity {
        Button button;
        EditText editText;

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

            button = (Button)findViewById(R.id.button);
            editText = (EditText)findViewById(R.id.editText);
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String receiver = editText.getText().toString();//전화번호, 입력상자에서 입력한 값을 가져옴
                    Intent intent1 = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:"  + receiver));//원래는 tel 붙이게 되어있는데(xml), 여기서는
                    //tel없이 걍 전화번호만 입력하고 전화걸기 누르면 자바코드에서 "tel:"(띄어쓰기 주의!!!) 이거 붙여준거고 전화걸기 화면이 뜸(d이 "tel:"로 인해 전화걸기인가보다 라고 알게됨
                    //인텐트 만들어서 전화걸기 앱을 만들거라고 정보 넣기, Uri.parse는 아마 여기로 전화걸기를 할 수 있게 문자열이 만들어짐 이런 뜻인듯
                    startActivity(intent1);

                    Intent intent2 = new Intent();//인텐트 정보 넣을 때 위의 방법말고도 다른 방법 있음, 파라미터 안 넣는 방법
                    ComponentName name = new ComponentName("com.example.callinitent", "com.example.callinitent.MenuAcitivity");//컴포넌트 이름이라는 거를 여기 만들 거,
                    // 파라미터 = 패키지 이름(메인액티비티의 패키지 이름), 패키지 이름.MenuActivity는 메뉴 액티비티를 가리키는 컴포넌트 이름의 정보
                    //컴포넌트 네임 정보가 만들어짐, 그리고 setComponent로 넣는다는 거
                    intent2.setComponent(name);//여기다가 컴포넌트 이름을 넣을거임
                    startActivity(intent2);
                    //지금은 메뉴 액티비티 안 만들어서 에러나겠지만 메뉴 액티비티 있다면 인텐트를 저런 식으로 만들어서 정보 넣을 수 있음
                    //이렇게 했을 때 장점은 MenuActivity.class라고 해서 객체를 지정하는 것이 아니라 그냥 문자열로 컴포넌트를, 즉 액티비티를 지정할 수 있는 방법이 됨
                    //그러면 액티비티나 이런 것들이 만들어지지 않은 상태에서 또는 남들이 만들어 놓은 액티비티가 있을 때 그거를 지정해서 띄워줄 수 있음

                }
            });
        }
    }
    //또 다른 예제로 pdf파일을 띄워주는 앱도 있음, 보통 단말에 설치되어 있음, 그거를 우리가 intent를 이용해서 띄워주겠다는 거
    //그거를 띄워줄 때 pdf파일 자체를 같이 Extra 정보로 넣어주거나 전달을 해주면 그 앱에서 정보를 받아서 pdf파일을 띄워줄 수 있음
    //pdf파일을 띄워주려면 pdf 파일이 뭔가 하나 단말이 있어야 함, 그래서 단말에 데이터를 미리 넣어줘야 함
    //만약 pdf파일을 sd카드 쪽에 넣어줬다면 sd카드 쪽에는 READ_EXTERNAL_STORAGE와 WRITE_EXTERNAL_STORAGE라는 권한이 필요
    //권한은 매니페스트 파일에서 추가 가능 <uses-permission android:name = "READ_EXTERNAL_STORAGE"/>, ~~"WRITE_EXTERNAL_STORAGE"
    //근데 이게 마시멜로 버전 이후에 위험 권한으로 분류됨, 그래서 매니페스트뿐만 아니라 앱이 실행됐을 때도 권한을 달라고 대화상자를 띄워주거나 해야 함
    //근데 그걸 안하고 싶다고 하면 왼쪽에 Gradle Script -> build.gradle을 클릭하면 targetSdkVersion 얘를 22버전으로 바꿔주면(23부터 도입) -> Sync Now

 

activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout 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"
        tools:context=".MainActivity">

        <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="전화걸기"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <EditText
            android:id="@+id/editText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:layout_marginBottom="8dp"
            android:ems="10"
            android:inputType="textPersonName"
            android:text="01011111111"
            app:layout_constraintBottom_toTopOf="@+id/button"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    </android.support.constraint.ConstraintLayout>