당신이 (모든 실행중인 경우) 활동에 의해 수신 Google 클라우드 메시지 (C2DM)을 처리하거나 어떤 활동이 실행되지 않는 경우 통지를 발행하려는 경우 다음 방법은 잘 작동합니다.
매니페스트 파일에 BroadcastReceiver를 하나 등록하십시오. 이 수신기는 응용 프로그램이 실행 중이 지 않을 때마다 C2D 메시지를 처리합니다. 프로그래밍 방식으로 다른 BroadcastReceiver를 귀하의 활동에 등록하십시오. 이 수신자는 활동이 실행 중일 때마다 C2D 메시지를 처리합니다.
AndoroidManifest.xml
<receiver
android:name=".StaticReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="com.mypackage" />
</intent-filter>
</receiver>
MyReceiver.java
public class StaticReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Trigger a Notification
}
}
MyActivity.java
public class MyActivity extends ActionBarActivity {
@Override
protected void onResume() {
super.onResume();
final IntentFilter filter = new
IntentFilter("com.google.android.c2dm.intent.RECEIVE");
filter.addCategory("com.mypackage");
filter.setPriority(1);
registerReceiver(dynamicReceiver, filter,
"com.google.android.c2dm.permission.SEND", null);
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(dynamicReceiver);
}
private final BroadcastReceiver dynamicReceiver
= new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent) {
// TODO Handle C2DM
// blocks passing broadcast to StaticReceiver instance
abortBroadcast();
}
};
}
주의! 브로드 캐스트를 먼저 잡으려면 dynamicReceiver IntentFilter의 우선 순위가 StaticReceiver 인스턴스 IntentFilter의 우선 순위보다 높아야합니다 (기본 우선 순위는 '0'임).
추신. Google Cloud Messaging Service에서 발급 한 브로드 캐스트가 주문 된 브로드 캐스트 인 것으로 보입니다.원래 아이디어 저자 : CommonsWare
첫 번째 방법은 intresting처럼 보입니다.하지만 내 응용 프로그램이 실행 중인지 (서비스 제외) 정적 메서드가 좋지 않은지 알고 싶습니다. Activity에 하나 이상의 인스턴스가있을 수 있습니다. 응용 프로그램 뮤텍스가있을 수 있습니다. 트릭을 ... – codeScriber
내가 틀릴 수도 있지만 이것은 단지 작업의 현재 최고 활동을 확인하는 것 같아요. 그렇다면 동일한 작업에서 다른 활동 (일시 중지 또는 중단됨)은 어떻게됩니까? –
첫 번째 방법을 사용하지 마십시오. ActivityManager 설명서에서 "참고 :이 메서드는 작업 관리 사용자 인터페이스를 디버깅하고 표시하기위한 용도로만 사용되며 응용 프로그램의 핵심 논리 (예 : 여기에있는 정보를 기반로 다른 동작을 결정하는 데 사용하지 마십시오.)" – yarian