Activity Listener – Google Cloud Messaging – BroadcastReceiver

Ho implementato GCM nella mia applicazione android e sta funzionando bene con ricevere messaggi. Il BroadcastReceiver è impostato nel file manifesto secondo gli esempi forniti da Google.

La mia domanda è la seguente: se l'utente ha l'applicazione aperta e voglio aggiornare alcuni risultati in quella vista – come può essere fatto? Pensavo prima di registrare questa attività come ascoltatore su qualsiasi cosa il BroadCastReceiver riceve. Tuttavia, questo deve essere un elenco statico di ascoltatori, in quanto verrà creata una nuova istanza del BroadcastReceiver – ma forse questo non è il modo per farlo.

  • Convertire la data di Android Strings agli oggetti data
  • Errore Android - causata da: java.lang.NoClassDefFoundError: android.support.v4.util.SparseArrayCompat
  • Funzionalità del calendario Sync Android con un proprio calendario
  • L'applicazione non verrà eseguita sul dispositivo: DELETE_FAILED_INTERNAL_ERROR?
  • "Screenshot" efficienti di una vista?
  • Android Ottieni il timestamp corrente?
  • Questo è quello che ho attualmente

    public class GCMBroadcastReceiver extends WakefulBroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { ComponentName comp = new ComponentName(context.getPackageName(), GCMIntentService.class.getName()); startWakefulService(context, (intent.setComponent(comp))); setResultCode(Activity.RESULT_OK); } } public class GCMIntentService extends IntentService { public static final int NOTIFICATION_ID = 1; private NotificationManager mNotificationManager; NotificationCompat.Builder builder; public GCMIntentService() { super("GCMIntentService"); } @Override protected void onHandleIntent(Intent intent) { Bundle extras = intent.getExtras(); GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this); String messageType = gcm.getMessageType(intent); if (!extras.isEmpty()) { if (GoogleCloudMessaging. MESSAGE_TYPE_MESSAGE.equals(messageType)) { /** How to check if the activity GameActivity is running, and hence send an update signal to it? If it's not running a notification should be created. **/ } } GCMBroadcastReceiver.completeWakefulIntent(intent); } } 

    Ecco la parte importnte per questo nel file manifest:

      <receiver android:name="qwegcm.GCMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <category android:name="qw" /> </intent-filter> </receiver> <service android:name="qwegcm.GCMIntentService" /> 

    Qualche consiglio?

    Grazie!

  • Come ripristinare lo stato di completamento dell'attività in AsyncTask
  • Come creare directory di file e cartelle nel file system di dati / dati / progetto Android
  • android ottiene video thumbnail PATH, non Bitmap
  • Ottieni valori ArrayList <HashMap <String, String>
  • Non è associata alcuna applicazione associata a questo ID client
  • Carica un file di text semplice in Android Studio
  • One Solution collect form web for “Activity Listener – Google Cloud Messaging – BroadcastReceiver”

    Ci sono due modi per gestire questo problema.

    1. Controllare se l'attività è in esecuzione.

     ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE); List<RunningTaskInfo> taskInfo = am.getRunningTasks(1); ComponentName componentInfo = taskInfo.get(0).topActivity; if(componentInfo.getPackageName().equalsIgnoreCase("com.yourpackagename")){ //Activity Running Send a broadcast with the intent-filter which you register in your activity where you want to have the updates } else{ //Activity Not Running //Generate Notification } 

    2. Utilizzo di SendOrderedBroadcast .

    Questo blog vi darà un'idea su come questo possa essere raggiunto.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.