티스토리 뷰

Android

[Android] 인텐트 살펴보기

감자형 2017. 9. 21. 03:30
  • 인텐트와 데이터 전달
1
2
안드로이드 어플리케이션(액티비티,서비스,브로드캐스트 수신자) 
-> 인텐트 모든것들이 연결되어 있다. 결국 인텐트 라는것은 안드로이드 시스템상에서 상당히 많이 왔다갔다 거리는 형식의 데이터이자 객체이다.
액티비티간의 데이터전달도 가능하다.
cs
  • 액션과 데이터를 사용하는 대표적인 예

 속성

설명 

 ACTION_DIAL tel:01011111111

주어진 전화번호를 이용해 전화 걸기 화면을 보여줌

 

 ACTION_VIEW tel:01011111111

주어진 전화번호를 이용해 전화걸기 화면을 보여준다. URI 값의 유형에 따라 VIEW 액션이 다른 기능을 수행함 

 ACTION_EDIT content://contacts/people/2

전화번호부 데이터베이스에 있는 정보 중에서 ID 값이 2인 정보를 편집하기 위한 화면을 보여준다 

 ACTION_VIEW content://contacts/people

전화번호부 데이터베이스 내용을 보여줌 




  • 명시적 인텐트와 암시적 인텐트
1
2
3
4
5
6
7
8
명시적 인텐트(Explicit Intent)
-인텐트에 클래스 객체나 컴포넌트 이름을 지정하여 호출할 대상을 확실히 알 수 있는 경우
 
암시적 인텐트(Implicit Intent) 
-액션과 데이터를 지정하긴 했지만 호출할 대상이 달라질 수 있는 경우
- 범주(catagory), 타입(Type), 컴포넌트(component),부가 데이터(extras)
ex) http 같은 특정데이터를알아서 띄워주는것
 
cs


  • 인텐트 안에 들어 가는 정보
1
2
3
4
5
6
7
8
9
10
11
12
1.범주(category)
-액션이 실행되는데 필요한 추가적인 정보를 제공
 
2. 타입(Type)
- 인텐트에 들어가는 데이터의 MIME 타입을 명시적으로 지정
 
3. 컴포넌트(Component)
- 인텐트에 사용될 컴포넌트 클래스 이름을 명시적으로 지정
 
4. 부가 데이터(Extra)
- 인텐트는 추가적인 정보를 넣을 수 있도록 번들(Bundle)객체를 담고 있음
- 이 객체를 통해 인텐트 안에 더 많은 정보를 넣어 다른 애플리케이션 구성요소에 전달할 수 있음.
cs

  • Example_callIntent 프로젝트 생성
1
2
3
4
1. ConstraintLayout 안에 Button 및 Plain Text를 생성 시켜준다.
 
2. MainActivity.java로 이동한다.
여기서 가정할것은 MenuActivity가 생성되었다고 가정을 하고 intent2 의 객체를 활용한다고 한다)
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package com.example.example_callintent;
 
import android.content.ComponentName;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
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 = (EditText) findViewById(R.id.editText);
        
 
        Button button = (Button)findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String receiver = editText.getText().toString();        // 입력상자에서 가져온다 값을 그리고 receiver에 저장한다.
                Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + receiver));   // 이제 인텐트를 이해하고 쓰고있다
                startActivity(intent);
 
                // 인텐트에 정보를 넣을때 다른 방식도 있음.
 
                Intent intent2 = new Intent();
                ComponentName name = new ComponentName("com.example.example_callintent","com.example.example_callintent.MenuActivity");
                // (첫번째 파라미터: 패키지명,두 번째 파라미터 :패키지명.MenuActivity) 이렇게 하면 MenuActivity 패키지 네임정보를 얻음
                intent2.setComponent(name);      //여기다가 컴포넌트 이름을 넣을것이다.
                startActivity(intent2);
            }
        });
    }
}
cs



  • PDF 파일을 여는 방식(인텐트 형식) - 추후 실습 할것(교재)
  • 권한 정보(pdf를 사용하기위한)
pdf -> sd 카드 에 넣었다고 하면
1
2
3
4
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
// sd카드 읽을수 있는 권한
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
// sd 카드 쓸수 있는 권한
1
2
3
4
5
6
7
8
9
10
11
// 앱이 실행 됬을 때도 manifests 권한 또한 주는것은 물론, gradle Script에 build gradle targetSdkVersion 22로 바꾸어 주어야 한다.
// 마쉬멜로우 버전이후로는 위험권한으로 등록되어있다.
 
defaultConfig {
    applicationId "com.example.example_callintent"
    minSdkVersion 15
    targetSdkVersion 25 -> 22로 바꿔주어야한다.(간단히 테스트시 22로 바꿔서 해준다)
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
cs
cs
- 마쉬멜로우 버전 이후 부터 위험권한이 22이후부터 적용되었으므로 22로 바꾸어준다.(버전낮추기)



  • <화면>


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함