반응형

카카오톡이나 시스템 어플처럼

안드로이드 폰을 부팅하면 자동으로 실행되는

앱들이 있을 겁니다.


즉, 별도의 앱목록에서 실행 선택없이

스마트폰이 시작되면 자동으로 여러분의 앱이 실행되도록 하는 거죠.


보통 채팅 프로그램에서 필요로 하는 기능이죠.

악용한다면 ....(-_-;;)



결과는 보여줄 것을 없네요.


그냥 이 앱을 설치하고

폰의 전원을 재 부팅하면

자동으로 앱이 실행되는 예제소스입니다.


다른 부분은 건드릴 것 없고요.

시스템의 Boot가 완료되었다는 신호(방송: Broadcast)

수신할 수 있는 BroadcastReceiver만 만들고

이를 메니페스트에 등록만 하면 완성입니다.


MainActivity는 건드릴 필요없이


BroadcastReceiver 클래스만 소스파일에 추가로 만들겠습니다.


본인 프로젝트의 src폴더>>패키지명

새로 Class파일을 만듭니다.

상속은 BroadcastReceiver를 받습니다.


완성된 Receiver 클래스 파일입니다.

설명은 주석 참조

 

 StartReceiver.java

public class StartReceiver extends BroadcastReceiver {


//BroadCast를 받앗을때 자동으로 호출되는 콜백 메소드

//첫번째 파라미터 : Context 컨텍스트

//두번째 파라미터 : BroadCast의 정보를 가지고 있는 Intent..

@Override

public void onReceive(Context context, Intent intent) {

// TODO Auto-generated method stub

//수신받은 방송(Broadcast)의 Action을 얻어오기

//메니페스트 파일안에 이 Receiver에게 적용된 필터(Filter)의 Action만 받아오게 되어 있음.

String action= intent.getAction();

//수신된 action값이 시스템의 '부팅 완료'가 맞는지 확인..

if( action.equals("android.intent.action.BOOT_COMPLETED") ){

//맞다면...MainActivity 실행을 위한 Intent 생성..

Intent i= new Intent(context, MainActivity.class);

//위에 만들어진 Intent에 의해 실행되는 Activity는 

//액티비티 스택에서 새로운 Task로 Activity를 실행하도록 하라는 설정.

i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

//Intent에 설정된 Component(여기서는 MainActivity)를 실행

context.startActivity(i);

}

}

}



 BroadcastReceiver 는

안드로이드의 주요 4대 Component 중에 하나죠.


이 Component 들은 반드시 메니페스트 파일에 등록을 해주어야

사용할 수 있다는 것은 다 알고 있을 거라 생각합니다.


위에 만든 StartReceiver를 메니페스트에 등록하고

수신 퍼미션도 받겠습니다.


메니페스트에서 추가한 부분은 굵은 글씨로 표기합니다.


 AndroidManifest.xml

 <?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.kitesoft.boottingapp"

    android:versionCode="1"

    android:versionName="1.0" >


    <uses-sdk

        android:minSdkVersion="14"

        android:targetSdkVersion="16" />

    

    <!-- Boot 될때 Booting 완료 방송(브로드캐스트)을 듣도록 퍼미션 획득 -->    

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>


    <application

        android:allowBackup="true"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity

            android:name=".MainActivity"

            android:label="@string/app_name" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />


                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

        

        <receiver

            android:name=".StartReceiver"

            android:enabled="true"

            android:exported="false"

            android:label="STARTReceiver">

            

            <intent-filter >

                <action android:name="android.intent.action.BOOT_COMPLETED"/>                

            </intent-filter>

            

        </receiver>

        

    </application>


</manifest>

 

이제 시스템은 재 부팅하면 'Boot 완료' 방송(Broadcast)를 수신해서 App의 액티비티가 실행됩니다.


실제 채팅프로그램은 액티비티가 아니라 Service를 실행하겠죠.

반응형

+ Recent posts