어플 액티비티에서 전화번호를 받아 그 정보를 인텐트로 넘겨주고 전화앱에 전달해줌<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>
'Blog > Android' 카테고리의 다른 글
LayoutInflater, 한 화면 쪼개서 부분화면 이용 (0) | 2020.04.05 |
---|---|
Intent, 메뉴 액티비티와 데이터 전달 (0) | 2020.04.05 |
Event, 버튼 이벤트 처리 (0) | 2020.03.31 |
Dialog, 대화상자 띄우기 (0) | 2020.03.31 |
안드로이드 Bluetooth SPP (1) | 2020.03.31 |