3

メインクラスでプッシュ通知を処理しようとしています (また、GCMBroadcastReceiver も持っています - メインクラスを実行していないときに来るすべての通知に対して)

しかし、registerReceiver は動作しません (GCMBroadcasrReceiver は正常に動作します)

私のコード:

public class Main extends Activity {
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        registerReceiver(mHandleMessageReceiver, new IntentFilter("com.google.android.c2dm.intent.RECEIVE"));
    }

    private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.d("BroadcastReceiver","Working");
        }
    };

}

マニフェスト:

<receiver android:name="com.google.android.gcm.GCMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND" >
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
    </intent-filter>
</receiver>

*私の 4.1.2 (S3) でのみ正常に動作します

4

2 に答える 2

4

さて、解決策を見つけました:

私の GCMIntentService.java では、sendBroadcast を次のように設定する必要があります。

@Override
protected void onMessage(Context context, Intent intent) {

        Intent i = new Intent("com.my.app.DISPLAY_PUSH");

        i.putExtra("msg", intent.getExtras().getString("msg"));
        context.sendBroadcast(i);
    }

そしてBroadcastReceiverは

protected void onCreate(Bundle savedInstanceState) {
    registerReceiver(mHandleMessageReceiver, new IntentFilter("com.my.app.DISPLAY_PUSH"));
    }
.
.
.

private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("BroadcastReceiver","Working with msg:" + intent.getExtras().getString("msg")  );
        }
};

なぜ sendBroadcast なしで 4.1.2 で動作するのだろうか...

于 2013-02-05T21:05:26.810 に答える
1

このようにsendBroadcastを呼び出すと

Intent  intent = new Intent(context, mBroadcastReceiver.getClass());
intent.setAction(ACTION_ON_CLICK);
context.sendBroadcast(intent);

// or

Intent  intent = new Intent(context, MyBroadcastReceiver.class);
intent.setAction(ACTION_ON_CLICK);
context.sendBroadcast(intent);

これに変更します:

Intent  intent = new Intent(ACTION_ON_CLICK);
context.sendBroadcast(intent);
于 2015-05-01T15:01:58.707 に答える