当在GCMIntentService类中调用OnUnregistered()方法时

时间:2013-01-01 14:04:32

标签: android android-intent android-c2dm google-cloud-messaging

我已经在我的android应用程序中成功实现了推送通知的GCM框架。但是我对于GcmIntentService类中被Google覆盖的函数感到有点困惑。

@Override
protected void onUnregistered(Context context, String registrationId) {

//Do whatever you want

}

何时调用此方法?

5 个答案:

答案 0 :(得分:3)

来自官方的java doc:

  

要从GCM取消注册,请执行以下操作:

Intent unregIntent = new
Intent("com.google.android.c2dm.intent.UNREGISTER");
 unregIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new
 Intent(), 0)); 
 startService(unregIntent); 
  

与注册类似        请求,此意图以异步方式发送,响应如下        com.google.android.c2dm.intent.REGISTRATION意图。

一个用例可能是在您的服务器上调用Web服务,以便它可以从已注册的设备列表中删除该设备。

答案 1 :(得分:2)

要从GCM取消注册Android设备,请将此行添加到要在代码中取消注册的位置

GCMRegistrar.unregister(this);

答案 2 :(得分:1)

使用GCMRegistrar.unregister() method从GCM服务器取消注册后将调用它。

正如GCMBaseIntentService文档中所述:

  

在设备取消注册后调用。

您还应该查看How Unregistration Works文档,因为它描述了设备取消注册的两种方式:手动和自动。

答案 3 :(得分:0)

onUnregistered(Context context, String regId):

从GCM取消注册设备后调用。通常,您应该将regid发送到服务器,以便取消注册设备。

发现您可以在应用程序即将卸载之前取消注册。 Dunno但希望如此,那就是单向

在即将卸载应用程序之前调用Activity,使用以下内容添加活动Intent-filters ::

 <activity
    android:name=".UninstallIntentActivity"
    android:label="@string/app_name" >

    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <action android:name="android.intent.action.DELETE" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="package" android:pathPattern="com.testpack.yourapp" />
    </intent-filter>



</activity>

在该活动中,您可以调用::

 onUnregistered(Context context, String regId):

取消注册该设备。希望这些必须有更好的方法。

答案 4 :(得分:-1)

我得到了Android开发者网站本身所期望的解决方案,实际上应该根据Google在开发人员网站上的描述卸载应用程序时自动调用此功能但是,此过程不会立即发生,因为Android不提供卸载打回来。请查看下面提到的链接:

http://developer.android.com/google/gcm/adv.html#unreg

感谢大家的支持。