2015-06-11 25 views
1

我正在使用GCM。我想停止GcmListenerService,這樣我就可以停止應用程序接收不需要的通知。停止GcmListenerService progog

我曾嘗試下面以貼心的服務,但它似乎並不鍛鍊

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> 
+0

我根本不想在應用程序的某個時間點收到通知。請幫助 – Ajeet

回答

1

停止服務將無濟於事,因爲GCMReceiver將隨時致電startWakefulService一個新的消息進來。由於GCMReceiver類不是我們應該編輯的東西,我建議你保留一個布爾值或者設置一個首選項,以知道什麼時候接收的消息應該被實際讀取/處理。基於此,您可以讓消息在後臺收到,而實際上在應用/前臺無所作爲。

+0

謝謝:)我想到了這個方法。但我認爲這不會是一個真正合適的方法來停止接收推送通知。你能告訴我有沒有任何可能的方式,我可以從GCM服務器本身註銷一個設備。 ? – Ajeet

+0

鑑於它是您的服務器發送消息,您可以發出http請求或發送上游消息,告訴您的服務器停止發送到此設備。更蠻力的方法是調用deleteToken() – morepork