반응형
* 브로드 캐스트 명시적 호출 및 정지된 앱 깨우기
앱간 통신의 하나의 방법으로 broadcast를 이용하여 앱간의 정보를 주고 받을수 있다.
브로트 캐스트를 이용한 앱간 호출은 developer.android.com을 통해서 확인 해 볼수 있다.
수신 측에서 리시버를 메니페스트에 등록하고, 사용자의 액션명을 등록하고, android:exported="true" 을 이용하여 외부의 앱에서 호출 할수 있도록 등록하면 된다.
한가지 문제점은, 호출 부에서 명시적으로 호출 했음에도 앱이 처음 설치되거나, 죽어 있으면 브로드캐스트를 받을수 없는 현상이 있다. 이럴땐. 송신 부에서 intent.addFlags(FLAG_INCLUDE_STOPPED_PACKAGES); 의 옵션을 추가하여 종료된 앱을 깨울수 있다.
* 코드 구현
[수신부]
1. manifest.xml
<receiver android:name=".MyBroadcastReceiver" android:exported="true"> //외부앱 호출 허용
<intent-filter>
<action android:name="android.intent.action.MY_CUSTOM_ACTION"/> // 커스텀 액션명
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.INPUT_METHOD_CHANGED" />
</intent-filter>
</receiver>
2. MyBroadcastReceiver
public class MyBroadcastReceiver extends BroadcastReceiver {
private static final String TAG = "MyBroadcastReceiver";
@Override
public void onReceive(Context context, Intent intent) {
StringBuilder sb = new StringBuilder();
sb.append("Action: " + intent.getAction() + "\n");
sb.append("URI: " + intent.toUri(Intent.URI_INTENT_SCHEME).toString() + "\n");
String log = sb.toString();
Log.d(TAG, log);
Toast.makeText(context, log, Toast.LENGTH_LONG).show();
}
}
[송신부]
1. 명시적 브로드 캐스트 호출 및 죽은앱 실행.
Intent().also { intent ->
intent.setAction("android.intent.action.MY_CUSTOM_ACTION")
intent.putExtra("data", "Notice MSG!")
//intent.setPackage("com.jky.example.mybroadcastrecevapp")
//명시적 호출
intent.setComponent(ComponentName("com.jky.example.mybroadcastrecevapp", "com.jky.example.mybroadcastrecevapp.MyBroadcastReceiver"));
//intent.setComponent(ComponentName([앱 ID 패키지명], [브로드 캐스트 패키지명]));
intent.addFlags(FLAG_INCLUDE_STOPPED_PACKAGES); //!! 죽은 앱을 호출
sendBroadcast(intent)
* 참고 자료:
[브로드 캐스트 리시버 ] developer.android.com/guide/components/broadcasts?hl=ko
반응형
'안드로이드' 카테고리의 다른 글
Android 설치된 앱(패키지) 등록된 permission 확인 (0) | 2021.09.29 |
---|---|
[안드로이드] APP 간의 통신, 다른 앱의 하위 액티비티 실행 (0) | 2021.09.29 |
[안드로이드] ADB를 제어하여, pc에서 안드로이드 단말기로 앱을 배포 제어하기. (0) | 2021.09.29 |
[Android] Android 10.0 Q 에서 시리얼넘버(Serialnumber)대체 키 SSAID(Settings.Secure.ANDROID_ID) 확인. (3) | 2021.09.29 |
[Android] 화면 캡처 방지 (0) | 2021.09.29 |