我正在尝试处理我的主类中的推送通知(我还有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)中正常工作
I'm trying to deal with push notifications in my main class (and i also have GCMBroadcastReceiver - for all the notifications that comes when i'm not running the main class)
but the registerReceiver Does not work (GCMBroadcasrReceiver works fine)
my code:
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"); } }; }Manifest:
<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>*Works fine only in my 4.1.2 (S3)
最满意答案
好吧,找到了解决方案:
在我的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中有效...
Well, found the solution:
in my GCMIntentService.java i need to set sendBroadcast like so:
@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); }and the BroadcastReceiver should be
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") ); } };I wonder why it works in 4.1.2 without the sendBroadcast...
更多推荐
发布评论