Android 4 Component
4대 Component는 반드시 AndroidMaifest.xml 에 등록을 해야 사용할 수 있다.
1.Activity
2.BroadcastReceiver
3.Service
|
Intent객체로 활성화 |
4.ContentProvider |
Content Resolver로 활성화 |
BroadcastReceiver
단말기 안에서 이루어지는 수많은 일들을 대신해서 알려준다.
블루투스가 켜지고 와이파이가 켜지는 등 폰의 정보를 broadcast한다. 이 때 특정 broadcast가 일어날 때 해야할 작업이 있으면 broadcastReceiver를 이용해서 broadcast 를 받는다. // Intent객체로 활성화
[BroadcastReceiver 를 만드는 방법]
-MainActivity에서 BroadcastReceiver 추상 클래스를 상속 받아서 만든다.
-onReceive()메소드를 오버라이딩 해서 방송이 수신 되었을 때 원하는 작업을 한다.
-AndroidManifest.xm 에 등록을 해야한다.
MainActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//방송 수신자 객체 생성해서
MyReceiver mr=new MyReceiver();
//동작이 가능하도록 등록하기
registerReceiver(mr,
new IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED));
}
MyReceiver
public class MyReceiver extends BroadcastReceiver {
//특정 방송(비행기 모드가 on 또는 off 되었을 때)이 수신되면 호출되는 메소드
@Override
public void onReceive(Context context, Intent intent) {
boolean isOn=intent.getBooleanExtra("state",false);
if(isOn){
Toast.makeText(context,"비행모드가 켜졌네??",
Toast.LENGTH_LONG).show();
}else {
Toast.makeText(context,"비행모드가 꺼졌네?",
Toast.LENGTH_LONG).show();
}
}
}
AndroidMaifest.xml (airplane모드 수신 시)
<!--방송 수신자 객체(BroadcastReceiver)등록 하기-->
<receiver android:name=".MyReceiver"
android:enabled="true"
android:exported="true">
<!--언제 수신 할 지-->
<intent-filter>
<action android:name="android.intent.action.AIRPLANE_MODE"/>
</intent-filter>
</receiver>
Service
내 어플이 활성화 되지 않더라도 백그라운드에서 동작하기 위하여 필요하다.
동작을 할 때 반드시 UI가 필요한 것은아니다. UI없이 백그라운드에서 프로그램이 도는게 필요할 때가 있다. 이 때 service를 사용한다. 주로 mp3플레이어(UI없이 음악재생 시)에 사용한다. 몰래 위치정보를 따는 기능도 가능하다.
ex)톰캣서버,오라클 // Intent객체로 활성화
ContentProvider
앱끼리 서로 다른 컨텐츠를 주고받을 수 있다. contentprovider를 만들 일은 별로 없다. 만들어진 것을 사용하는 입장일 때가 많다. 데이터베이스의 테이블 같은 역활
ex)갤러리(사진),연락처 //Content Resolver로 활성화 ContentResolver는 마치 쿼리문과 비슷하다.
[연락처 정보를 받기]
MainActivity
//연락처 정보를 가져오는 메소드
public void getContacts(){
//ContextResolver 객체의 참조값 얻어오기
ContentResolver resolver=getContentResolver();
//연락처 정보의 Uri(상수 객체로 미리 정의되어있음)
Uri contactUri=
ContactsContract.CommonDataKinds.Phone.CONTENT_URI; //like 테이블 명
//원하는 칼럼명 String 배열로 정의 (아이디 PK,전화번호,이름,이메일)
String[] columns={
ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME
};
//정렬(이름에 대해서 오름차순)
String order=ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME+"ASC";
//원하는 정보를 SELECT 하고 결과값을 Cursor type 으로 받는다.
// .query(uri, columns, where, args, order)
// 테이블명, 칼럼명, 조건, 인자 ,정렬,
Cursor cursor=resolver.query(contactUri,columns,
null,null,order);
//Cursor 객체에서 반복문 돌면서 데이터 추출하기
while (cursor.moveToNext()){
long id=cursor.getLong(0);
String phoneNumber=cursor.getString(1);
String name=cursor.getString(2);
}
@Override
public void onClick(View v) {
int permissionCheck=
ContextCompat.checkSelfPermission(this,
Manifest.permission.READ_CONTACTS);
if(permissionCheck != PackageManager.PERMISSION_GRANTED){ //권한이 없다면
//권한을 얻어야하는 퍼미션 목록
String[] permissions={Manifest.permission.READ_CONTACTS};
//권한을 얻어내도록 유도한다.
ActivityCompat.requestPermissions(this,
permissions,
0);
}else{//권한이 있다면
getContacts();
}
}
AndroidMaifest.xml
<!--연락처 정보에 접근하겠다는 퍼미션-->
<uses-permission android:name="android.permission.READ_CONTACTS"/>
'프로그래밍 기초 > Android' 카테고리의 다른 글
[Android]Activity의 생명주기 (0) | 2020.02.27 |
---|---|
[Android] Activity에서 Context가 필요할 때 this를 사용하는 이유 (0) | 2020.02.13 |
[Android]layout (0) | 2020.02.13 |
[Android]모듈의 구성요소와 res (0) | 2020.02.13 |
[Android]안드로이드 스튜디오에서 안쓰는 프로젝트 빼놓기 (0) | 2020.02.13 |