2016-05-13 15 views
1

Ich habe einen Broadcast-Empfänger, der entgegenkommende Benachrichtigungen erkennt, wenn die App geöffnet ist und im Hintergrund, aber wenn die aktuelle App gelöscht wird, funktioniert der Empfänger nicht.GCM-Broadcast-Empfänger gcm-Benachrichtigung beim Schließen der App nicht erkennen

public class GcmBroadcastReceiver extends WakefulBroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // Explicitly specify that GcmIntentService will handle the intent. 
     ComponentName comp = new ComponentName(context.getPackageName(), 
       GcmIntentService.class.getName()); 
     JSONObject json = new JSONObject(); 
     try { 
      json.putOpt("userid", StorePreference.GetSharedPreferenceDetails(context, "memberid")); 
      json.putOpt("rid",StorePreference.GetSharedPreferenceDetails(context, "partnerid")); 
      json.putOpt("message", "Received"); 
      BoundService.getInstance().onlinestatus(json); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     startWakefulService(context, (intent.setComponent(comp))); 
     setResultCode(Activity.RESULT_OK); 
    } 
} 

Manifest decleration:

<receiver 
    android:name="com.twogether.receivers.GcmBroadcastReceiver" 
    android:permission="com.google.android.c2dm.permission.SEND" > 
     <intent-filter> 
     <action android:name = "com.google.android.c2dm.intent.RECEIVE" /> 
     <category android:name="com.google.android.gcm.demo.app" /> 
     </intent-filter> 
</receiver> 
+1

poste dein Manifest. will nur überprüfen, wie Sie Empfänger definiert – Krishna

+0

Welche Version von GCM ist das? Sie sollten einen GcmListenerService anstelle eines BroadcastReceivers verwenden –

+0

@krishna Ich habe das Manifest – Tharun

Antwort

0

Versuchen Sie, Ihre Empfänger in manifest zu registrieren, verwenden Sie GcmListenerService Nachrichten zu empfangen.

google Beispiel https://github.com/googlesamples/google-services hat Beispiel dafür zu tun.

<!-- gcm_receiver, this is android source--> 
    <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="com.myapp.gcm" /> 
     </intent-filter> 
    </receiver> 

    <!-- gcm_listener service --> 
    <service 
     android:name="com.qblinks.qmote.GcmListenerService" 
     android:exported="false" > 
     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
     </intent-filter> 
    </service> 

// diesen Dienst nutzen Nachricht erhalten

public class GcmListenerService extends com.google.android.gms.gcm.GcmListenerService { 
    public void onMessageReceived(String from, Bundle data) { 
     String message = data.getString("message"); 
     Log.v(TAG, "From: " + from); 
     Log.v(TAG, "Message: " + message); 
     sendNotification(message); 
} 

private void sendNotification(String message) { 

    Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
      .setSmallIcon(R.drawable.notification) 
      .setContentTitle("this is title") 
      .setStyle(new NotificationCompat.BigTextStyle().bigText(message))//multi line 
      .setSound(defaultSoundUri); // ring or vibrate if no ring 
    NotificationManager notificationManager = 
      (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

    notificationManager.notify(Const.NOTIFICATION_GCM /* ID of notification */, notificationBuilder.build()); 
} 

}

0

Wenn die App ist in der Nähe müssen Sie die App aufwachen, bedeutet, dass Sie die Erlaubnis haben, das zu tun,

<uses-permission android:name="android.permission.WAKE_LOCK" /> 

und nach einstellen:

AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
     manager.set(AlarmManager.RTC, System.currentTimeMillis() + 5000, yourIntent);