以编程方式停止GcmListenerService

时间:2015-06-11 07:46:06

标签: android service google-cloud-messaging

我正在使用GCM。我想停止GcmListenerService,以便我可以阻止Application接收不需要的通知。

我已经尝试过以下关闭服务,但似乎没有锻炼

Intent intent = new Intent(this, MyGcmListenerService.class);
stopService(intent);

这是我的服务类

public class MyGcmListenerService extends GcmListenerService
{

    private static final String TAG = "MyGcmListenerService";

    // [START receive_message]
    @Override
    public void onMessageReceived(String from, Bundle data) {
        String message = data.getString("message");
        String duration = data.getString("duration");
        Log.d(TAG, "From: " + from);
        Log.d(TAG, "Message: " + message);

        sendNotification(message,duration);
    }
    // [END receive_message]

    private void sendNotification(String message, String duration) {

        new DisplayNotification(this).makeGCMNotification("Event Name", "Event Start Time", 1);
    }
}

并在清单

<service
            android:name=".Utilities.GCM.MyGcmListenerService"
            android:exported="false">
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
            </intent-filter>
        </service>

2 个答案:

答案 0 :(得分:1)

停止服务不会有帮助,因为只要有新消息,GCMReceiver就会一直调用startWakefulService。由于GCMReceiver类不是我们应该编辑的东西,我建议你保留一个布尔值或设置一个偏好,知道什么时候应该实际读取/处理收到的消息。基于此,您可以在后台接收消息,而在app / foreground中实际上什么都不做。

答案 1 :(得分:1)

您可以使用以下两种方法取消订阅GCM:defruledefmatch。这两种方法都会生成IOExceptions,因此也必须处理它们。

请查看the "Unregistration and Unsubscription" section