我正在尝试编写一个应用程序,我根据使用gcm推送通知发送的消息对UI进行更改,并且我通过使用BroadcastReceiver onReceive函数实现此操作,但只有在应用程序处于前景,但如果是在背景或关闭,没有任何事情发生,所以任何方式?
EDIT1: 在清单文件中,如果我理解你的问题是正确的
<receiver
android:name="com.google.android.gms.gcm.GcmReceiver"
android:exported="true"
android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="info.androidhive.gcm" />
</intent-filter>
</receiver>
<service
android:name="info.droiders.gcm.gcm.MyGcmPushReceiver"
android:exported="false">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
</intent-filter>
</service>
<service
android:name="info.droiders.gcm.gcm.GcmIntentService"
android:exported="false">
<intent-filter>
<action android:name="com.google.android.gms.iid.InstanceID" />
</intent-filter>
</service>
myBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Config.PUSH_NOTIFICATION)) {
// notification received
handleChanges(intent);
}
}
};
答案 0 :(得分:0)
如果您宣布广播接收者是您的活动或您应用内的其他课程的成员,那么除非您的应用正在运行,否则它将无法运行。相反,您应该创建一个扩展Broadcast接收器的独立类。所以改变这个:
myBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Config.PUSH_NOTIFICATION)) {
// notification received
handleChanges(intent);
}
}
};
将其放在自己的文件中:
public class GcmReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Config.PUSH_NOTIFICATION)) {
// notification received
handleChanges(intent);
}
}
}
现在,即使您的应用未运行,Android也可以找到该类并对其进行实例化。
编辑:更正了类名,以匹配OP中显示的清单文件中声明的接收者名称。