应用在后台

时间:2016-02-18 21:16:41

标签: android push-notification google-cloud-messaging

我正在尝试编写一个应用程序,我根据使用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);
            }
        }
    };

1 个答案:

答案 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中显示的清单文件中声明的接收者名称。