안드로이드 구성요소

- 엑티비티 : 하나의 화면 구성단위 이면서 명령처리흐름을 가짐
- 서비스 : 화면없이 명령처리 흐름을 가짐
- 컨텐트프로바이더
- 브로드케스트 리시버

- 인텐트 : 안드로이드 구성요소 간 데이터를 주고 받기 위한 매개체


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
        btn1.setOnClickListener(new View.OnClickListener() {
            
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                //intent : 어플 구성요소 간 데이터 전달 매개체
                //우리가 보내고자 하는 인텐트는
                //SecondActivity야 니가 시작할 차례다 라는 의미의 intent세팅해야됨
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                
                startActivity(intent);
            }
        });
        
        btn2.setOnClickListener(new View.OnClickListener() {
            
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                //action이 dial인 구성요소 앞으로 암시적 인텐트전달
                Intent intent = new Intent(Intent.ACTION_DIAL);
                startActivity(intent);
            }
        });
    }
cs


1
2
3
4
5
6
7
        <activity
            android:name="어벙라ㅓㅁㄴ레ㅜㅁㄴㅇㄹ.SecondActivity">
            <intent-filter >
                <action android:name="android.intent.action.DIAL"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>
cs

Activity호출 시의 flag

- FLAG_ACTIVITY_SINGLE_TOP : 엑티비티를 생성할 때 이미 생성된 엑티비티가 있으면 그 엑티비티를 그대로 사용

1
2
3
4
5
public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent = new Intent(SecondActivity.this, SecondActivity.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
                startActivity(intent);
cs

- FLAG_ACTIVITY_NO_HISTORY : 처음 이후에 실행된 엑티비티는 엑티비티 스택에 추가되지 않음



[Android] Intent 활용 예시

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
// 웹페이지 띄우기
Uri uri = Uri.parse("http://www.google.com");
Intent it  = new Intent(Intent.ACTION_VIEW,uri);
startActivity(it);
 
 
// 구글맵 띄우기
Uri uri = Uri.parse("geo:38.899533,-77.036476");
Intent it = new Intent(Intent.Action_VIEW,uri);
startActivity(it);
 
 
// 구글 길찾기 띄우기
Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=출발지주소&daddr=도착지주소&hl=ko");
Intent it = new Intent(Intent.ACTION_VIEW,URI);
startActivity(it);
 
 
// 전화 걸기
Uri uri = Uri.parse("tel:xxxxxx");
Intent it = new Intent(Intent.ACTION_DIAL, uri);  
startActivity(it); 
 
 
Uri uri = Uri.parse("tel.xxxxxx");
Intent it = new Intent(Intent.ACTION_CALL,uri);
// 퍼미션을 잊지 마세요. <uses-permission id="android.permission.CALL_PHONE" />
 
 
// SMS/MMS 발송
Intent it = new Intent(Intent.ACTION_VIEW);   
it.putExtra("sms_body""The SMS text");   
it.setType("vnd.android-dir/mms-sms");   
startActivity(it); 
 
 
// SMS 발송
Uri uri = Uri.parse("smsto:0800000123");   
Intent it = new Intent(Intent.ACTION_SENDTO, uri);   
it.putExtra("sms_body""The SMS text");   
startActivity(it); 
 
 
// MMS 발송
Uri uri = Uri.parse("content://media/external/images/media/23");   
Intent it = new Intent(Intent.ACTION_SEND);   
it.putExtra("sms_body""some text");   
it.putExtra(Intent.EXTRA_STREAM, uri);   
it.setType("image/png");   
startActivity(it);
 
 
// 이메일 발송
Uri uri = Uri.parse("mailto:xxx@abc.com");
Intent it = new Intent(Intent.ACTION_SENDTO, uri);
startActivity(it);
 
 
Intent it = new Intent(Intent.ACTION_SEND);   
it.putExtra(Intent.EXTRA_EMAIL, "me@abc.com");   
it.putExtra(Intent.EXTRA_TEXT, "The email body text");   
it.setType("text/plain");   
startActivity(Intent.createChooser(it, "Choose Email Client")); 
 
 
Intent it = new Intent(Intent.ACTION_SEND);     
String[] tos = {"me@abc.com"};     
String[] ccs = {"you@abc.com"};     
it.putExtra(Intent.EXTRA_EMAIL, tos);     
it.putExtra(Intent.EXTRA_CC, ccs);     
it.putExtra(Intent.EXTRA_TEXT, "The email body text");     
it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");     
it.setType("message/rfc822");     
startActivity(Intent.createChooser(it, "Choose Email Client"));  
 
 
// extra 추가하기
Intent it = new Intent(Intent.ACTION_SEND);   
it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");   
it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/mysong.mp3");   
sendIntent.setType("audio/mp3");   
startActivity(Intent.createChooser(it, "Choose Email Client"));
 
 
// 미디어파일 플레이 하기
Intent it = new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.parse("file:///sdcard/song.mp3");
it.setDataAndType(uri, "audio/mp3");
startActivity(it);
 
 
Uri uri = Uri.withAppendedPath(
  MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");   
Intent it = new Intent(Intent.ACTION_VIEW, uri);   
startActivity(it); 
 
 
// 설치 어플 제거
Uri uri = Uri.fromParts("package", strPackageName, null);   
Intent it = new Intent(Intent.ACTION_DELETE, uri);   
startActivity(it);
 
 
// APK파일을 통해 제거하기
Uri uninstallUri = Uri.fromParts("package""xxx"null);
returnIt = new Intent(Intent.ACTION_DELETE, uninstallUri);
 
 
// APK파일 설치
Uri installUri = Uri.fromParts("package""xxx"null);
returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri);
 
 
// 음악 파일 재생
Uri playUri = Uri.parse("file:///sdcard/download/everything.mp3");
returnIt = new Intent(Intent.ACTION_VIEW, playUri);
 
 
// 첨부파일을 추가하여 메일 보내기
Intent it = new Intent(Intent.ACTION_SEND);  
it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");  
it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/eoe.mp3");  
sendIntent.setType("audio/mp3");  
startActivity(Intent.createChooser(it, "Choose Email Client"));
 
 
// 마켓에서 어플리케이션 검색
Uri uri = Uri.parse("market://search?q=pname:pkg_name");  
Intent it = new Intent(Intent.ACTION_VIEW, uri);  
startActivity(it);  
// 패키지명은 어플리케이션의 전체 패키지명을 입력해야 합니다.
 
 
// 마켓 어플리케이션 상세 화면
Uri uri = Uri.parse("market://details?id=어플리케이션아이디");  
Intent it = new Intent(Intent.ACTION_VIEW, uri);  
startActivity(it);
// 아이디의 경우 마켓 퍼블리싱사이트의 어플을 선택후에 URL을 확인해보면 알 수 있습니다.
 
 
// 구글 검색
Intent intent = new Intent();
intent.setAction(Intent.ACTION_WEB_SEARCH);
intent.putExtra(SearchManager.QUERY,"searchString")
startActivity(intent);
cs


' IOT 기반 응용 SW과정 > Android, Arduino' 카테고리의 다른 글

Day91  (0) 2016.07.27
Day90  (0) 2016.07.26
Day88  (0) 2016.07.22
Day87  (0) 2016.07.21
Day86  (0) 2016.07.20

액티비티 만들기

1. 액티비티를 상속받는 자바클래스 작성

2. MainFest에 액티비티를 등록

3. 액티비티가 사용할 레이아웃xml파일 작성(옵션)

4. 1의 onCreate메소드에서 3파일을 뷰로 연결.


R.java -> 안드로이드에서 사용하는 자원들을 자바코드에서 참조할 수 있도록 참조값을 갖는 연결고리

R.java는 어플리케이션의 패키지명으로 지정된 패키지 경로에 자동생성됨 (자원등록 중 에러가 발생하면 생성되지 않음)


액티비티가 속한 패키지명도 어플리케이션의 패키지명과 동일하게 한다

[장점]

1. R.java랑 같은 패키지에 위치해서 R클래스를 따로 임포트 해주지 않아도 됨

2. Manifest에 액티비티 등록할때 패키지명 생략가능

3. 1,2는 패키지 구조 복잡도가 올라가면 다시 분리 되겠지만 코드관리를 위해



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="패키지명"
    android:versionCode="1"
    android:versionName="1.0" >
 
    <uses-sdk
        android:minSdkVersion="16"
        android:targetSdkVersion="20" />
 
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity android:name=".MainActivity"></activity>
                              .으로 시작하면 앞에 어플의 패키지명 
    </application>
 
</manifest>
cs

activity태그는 필수로 name속성을 가져야하고 name속성의 값에는 사용할 자바 클래스 파일(Activity를 상속받은)을 지정해야 됨

엑티비티는 어플리케이션의 구성요소이자 하나의 화면단위이고 명령처리흐름을 갖음

어플리케이션은 최소 하나의 메인엑티비티를 가져야하고 메인엑티비티가 되는 녀석을 Intent-filter에 메인속성과 런처 속성을 가져야됨


1
2
3
4
            <intent-filter >
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
cs



7
8
9
10
public class MainActivity extends Activity{
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}
 
cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="안녕 안드로이도"
        android:id="@+id/tv"
        /> id 만들어놓기
    <button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="버튼이닷"
        android:id="@+id/btn"
        />
</LinearLayout>
cs

1
2
   TextView tv =(TextView) findViewById(R.id.tv);
   Button btn = (Button) findViewById(R.id.btn);
cs

xml에 정의한 UI 위젯의 참조값 얻기

1
2
3
4
5
6
7
8
9
        btn.setOnClickListener(new View.OnClickListener() {
            
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                tv.setText("Bye Android");
                
            }
        });        
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="나이를 입력하세요" />
 
    <EditText
        android:id="@+id/num"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="numberSigned" />
 
    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="버튼" />
 
    <TextView
        android:id="@+id/age"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class MainActivity extends Activity{
    private EditText inputAge;
    private Button btn;
    private TextView result;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        inputAge = (EditText) findViewById(R.id.num);
        btn = (Button) findViewById(R.id.btn);
        result = (TextView) findViewById(R.id.age);
        //지금은 이름을 대충 지었는데 id값들은 신중하게 잘 지어야됨 
        //모든 xml파일에서 하나의 id 네임스페이스를 사용함
        
cs


' IOT 기반 응용 SW과정 > Android, Arduino' 카테고리의 다른 글

Day89 안드로이드 엑티비티 전환  (0) 2016.07.25
Day88  (0) 2016.07.22
Day87  (0) 2016.07.21
Day86  (0) 2016.07.20
Day84 안드로이드  (0) 2016.07.18

+ Recent posts