Notice
Recent Posts
Recent Comments
Link
투케이2K
129. (AndroidStudio/android/java) android.intent.action.BOOT_COMPLETED 사용해 브로드캐스트 부팅 이벤트 받기 본문
Android
129. (AndroidStudio/android/java) android.intent.action.BOOT_COMPLETED 사용해 브로드캐스트 부팅 이벤트 받기
투케이2K 2021. 5. 3. 15:10/* =========================== */
[ 개발 환경 설정 ]
개발 툴 : AndroidStudio
개발 언어 : java
/* =========================== */
/* =========================== */
[소스 코드]
[AndroidManifest.xml 파일]
<퍼미션 등록 부분>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.BOOT_COMPLETED" />
<액티비티 등록 부분>
<activity
android:name=".A_Boot"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan"/>
<브로드캐스트 등록 부분>
<receiver
android:name=".A_BootReceiver"
android:enabled="true"
android:exported="true"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<!-- [부팅 이벤트를 받기 위함] -->
<intent-filter android:priority="1000">
<category android:name="android.intent.category.DEFAULT"/>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/>
<action android:name="android.intent.action.USER_PRESENT"/>
<action android:name="android.intent.action.REBOOT"/>
<action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
</intent-filter>
</receiver>
[JAVA 파일 : A_Boot]
package kr.co.two2k.manager;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
public class A_Boot extends AppCompatActivity {
//TODO [클래스 전역 변수 선언]
String boot_Data = "";
//TODO [클래스 컴포넌트 선언]
EditText display_edit;
//TODO [액티비티 시작 메소드]
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_a_boot_receiver);
Log.d("---","---");
Log.d("//===========//","================================================");
Log.d("","\n"+"[A_Boot > onCreate() 메소드 : 액티비티 시작 실시]");
Log.d("//===========//","================================================");
Log.d("---","---");
//TODO [컴포넌트 매칭 실시]
display_edit = (EditText)findViewById(R.id.display_edit);
//TODO [최근 부팅된 날짜 확인]
try {
boot_Data = String.valueOf(S_Preference.getString(getApplication(), "Boot_Date"));
if(boot_Data != null && boot_Data.length() > 0 &&
!boot_Data.equals("") && !boot_Data.contains("null")){ //TODO 널값이 아닐 경우
display_edit.setText(boot_Data);
}
else{
display_edit.setText("NULL");
}
}
catch (Exception e){
e.printStackTrace();
}
}//TODO 메인 종료
//TODO [백버튼 터치시 뒤로 가기]
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// 디바이스의 키 이벤트가 발생했는데, 뒤로가기 이벤트일때
if (keyCode == KeyEvent.KEYCODE_BACK) {
Log.d("---","---");
Log.d("//===========//","================================================");
Log.d("","\n"+"[A_Boot > onKeyDown() 메소드 : 백버튼 터치시 뒤로 가기 이벤트 실시]");
Log.d("//===========//","================================================");
Log.d("---","---");
try {
//TODO [액티비티 종료 실시]
finish();
overridePendingTransition(0,0);
}
catch (Exception e){
e.printStackTrace();
}
}
return true;
}
//TODO [바깥 레이아웃 클릭 시 키보드 내림]
@Override
public boolean dispatchTouchEvent(MotionEvent event){
int action = event.getAction();
switch(action){
case(MotionEvent.ACTION_DOWN):
try {
//TODO [창 내리는 용도]
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(display_edit.getWindowToken(), 0);
}
catch (Exception e){
e.printStackTrace();
}
break;
case(MotionEvent.ACTION_MOVE):
break;
default:
break;
}
return super.dispatchTouchEvent(event);
}
//TODO [액티비티 종료 메소드]
@Override
public void onDestroy(){
super.onDestroy();
Log.d("---","---");
Log.d("//===========//","================================================");
Log.d("","\n"+"[A_Boot > onDestroy() 메소드 : 액티비티 종료 확인]");
Log.d("//===========//","================================================");
Log.d("---","---");
try {
//TODO [변수 초기화 실시]
}
catch (Exception e){
e.printStackTrace();
}
}
//TODO [액티비티 실행 준비 메소드]
@Override
public void onResume(){
super.onResume();
Log.d("---","---");
Log.d("//===========//","================================================");
Log.d("","\n"+"[A_Boot > onResume() 메소드 : 액티비티 실행 준비]");
Log.d("//===========//","================================================");
Log.d("---","---");
try {
//TODO [외부 브라우저 복귀 시 화면 전환 애니메이션 없애기 위함]
overridePendingTransition(0,0);
}
catch (Exception e){
e.printStackTrace();
}
}
}//TODO 클래스 종료
[JAVA 파일 : A_BootReceiver]
package kr.co.two2k.manager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import java.text.SimpleDateFormat;
import java.util.Date;
public class A_BootReceiver extends BroadcastReceiver {
/**
* 1. 퍼미션 : 부팅 이벤트를 받기 위함
* <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
* <uses-permission android:name="android.permission.BOOT_COMPLETED" />
*
* 2. 참고사항 :
* 애플리케이션을 작업 목록에서 완전히 지워버릴 경우 (kill) 브로드 캐스트 리시버 알림을 받지 못합니다
* */
//TODO [클래스 전역 변수 선언 부분]
public static final String BOOT_EVENT = "android.intent.action.BOOT_COMPLETED";
String actionName = "";
String actionContent = "";
Context mContext;
//TODO [onReceive 메소드를 재정의 (채널 알림 메시지 확인 부분)]
@Override
public void onReceive(Context context, Intent intent) {
try {
mContext = context;
actionName = String.valueOf(intent.getAction());
actionContent = String.valueOf(intent.getStringExtra("broadCastData"));
Log.d("---","---");
Log.w("//===========//","================================================");
Log.d("","\n"+"[A_BootReceiver > onReceive() 메소드 : 수신받은 채널 알림 내용 확인]");
Log.d("","\n"+"[채널 : "+String.valueOf(actionName)+"]");
Log.d("","\n"+"[내용 : "+String.valueOf(actionContent)+"]");
Log.w("//===========//","================================================");
Log.d("---","---");
//TODO [프리퍼런스에 부팅된 시간 저장 실시]
if(BOOT_EVENT.equals(actionName)){ //TODO 부팅 이벤트를 받은 경우
S_Preference.setString(mContext, "Boot_Date", String.valueOf(getNowTime24()));
}
else {
S_Preference.setString(mContext, "Boot_Date", String.valueOf(actionName));
}
}
catch (Exception e){
e.printStackTrace();
}
}
//TODO [현재 날짜 및 시간 확인 메소드]
public static String getNowTime24() {
long time = System.currentTimeMillis();
//SimpleDateFormat dayTime = new SimpleDateFormat("hh:mm:ss");
SimpleDateFormat dayTime = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss");
String str = dayTime.format(new Date(time));
return str;
}
}//TODO 클래스 종료
/* =========================== */
/* =========================== */
[결과 출력]
/* =========================== */
반응형
'Android' 카테고리의 다른 글
Comments