2015-08-08 3 views
0

Хорошо, что я искал эту тему и реализовал все возможное, все еще не получив успеха. Это классWakefulBroadcastReceiver для GCM не запускает

import android.app.Activity; 
import android.content.ComponentName; 
import android.content.Context; 
import android.content.Intent; 
import android.support.v4.content.WakefulBroadcastReceiver; 
import android.util.Log; 

public final class MyGcmBroadcastReceiver extends WakefulBroadcastReceiver { 


@Override 
public void onReceive(Context context, Intent intent) { 

      Log.d("output something","Output"); 
      ComponentName comp = new ComponentName(context.getPackageName(), 
      MyGcmIntentService.class.getName()); 
      startWakefulService(context, (intent.setComponent(comp))); 
      setResultCode(Activity.RESULT_OK); 

} 
} 

приемника И это содержание menifest Примечания: что я использую другой пакет из другой библиотеки, которая содержит приемник и intentservice

<receiver 
     android:exported="false" 
     android:name="lib.package.name.MyGcmBroadcastReceiver" 
     android:permission="com.google.android.c2dm.permission.SEND" > 
     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
      <action  android:name="com.google.android.c2dm.intent.REGISTRATION" /> 
     </intent-filter> 
     <category android:name="my.demo.app" /> 
    </receiver> 
    <service android:exported="false" android:name="lib.package.name.MyGcmIntentService" /> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <permission android:name="my.demo.app.permission.C2D_MESSAGE" android:protectionLevel="signature" /> 
    <uses-permission android:name="my.demo.app.permission.C2D_MESSAGE" /> 

Сервер бросает "multicast_id": 8642316007520492123, "успех": 1, "неудача": 0, "canonical_ids": 0, "Результаты":

Мой GCM намерение служба

public final class MyGcmIntentServiceextends GcmListenerService{ 
public static final int NOTIFICATION_ID = 1; 
NotificationCompat.Builder builder; 

public MyGcmIntentService() { 

    Log.d("Test GCMMMMMMMMM","GCM SDS"); 
} 

String app_tag="MyGcmIntentService->MyGcmIntentService"; 

@Override 
public void onMessageReceived(String from, Bundle data) { 
     String message = data.getString("message"); 
     Log.d(app_tag, "From: " + from); 
     Log.d(app_tag, "Message: " + message); 

     /** 
     * Production applications would usually process the message here. 
     * Eg: - Syncing with server. 
     *  - Store message in local database. 
     *  - Update UI. 
     */ 

     /** 
     * In some cases it may be useful to show a notification indicating to the user 
     * that a message was received. 
     */ 
     sendNotification("web-demo",message); 
} 

И я не вижу никакого выхода в логарифме. Пожалуйста, помогите мне!

ответ

0

Можете ли вы также опубликовать свой MyGcmIntentService?

Выполнение GCM согласно Google developers, Google рекомендует перейти на GCMReceiver и GcmListenerService. Кроме того,

  1. В приложении манифеста, заменить GcmBroadcastReceiver с "com.google.android.gms.gcm.GcmReceiver" и заменить текущую декларацию службы, которая проходит IntentService к новому GcmListenerService.
  2. Удалите реализацию BroadcastReceiver из кода клиента.
  3. Рефакторинг текущей реализации службы IntentService для использования GcmListenerService.
    Также обратите внимание на это tutorial.
+0

спасибо. Попробуем это скоро. –

+0

Также рассмотрите устройство, в котором вы тестируете свое приложение. GCM работает только на Android 2.2+. – Jaye

+0

Ive отредактировал мой вопрос и добавил мои коды обслуживания Intent. Пожалуйста, смотрите. Это не срабатывает. Я заменил код в манифесте, как вы сказали. –

Смежные вопросы