Autore Topic: Due Broadcast receiver  (Letto 371 volte)

Offline elfo83

  • Utente normale
  • ***
  • Post: 287
  • Respect: +23
    • Mostra profilo
  • Sistema operativo:
    Mac OS 10.8.2
Due Broadcast receiver
« il: 28 Maggio 2014, 17:05:13 CEST »
0
Salve a tutti, ho implementato due broadcast receiver per la mia applicazione. Entrambi utilizzano la stessa action e servono per catturare dei dati. L'utilizzo è esattamente lo stesso ma il primo dovrebbe essere utilizzato solo quando la mia applicazione è in foreground o background mentre il secondo quando la mia applicazione è chiusa:

Il primo non è dichiarato nel manifest e eseguo la sua registrazione con intent-filter annesso direttamente all'interno della mia activity:
Codice (Java): [Seleziona]
MyCustomReceiver  mcr =new MyCustomReceiver();
       

                if (!MyListenerIsRegistered) {
                        IntentFilter filter= new IntentFilter("UPDATE_STATUS");
                        filter.setPriority(1);
            registerReceiver(mcr, filter);
            MyListenerIsRegistered = true;
        }
.
.
.
public class MyCustomReceiver extends BroadcastReceiver {
               
                private static final String TAG = "MyCustomReceiver";
               
                  @Override
                  public void onReceive(Context context, Intent intent) {
                   
                          Bundle extras = intent.getExtras();
                        String message = extras != null ? extras.getString("com.parse.Data") : "NO DATI";
                        JSONObject jObject;
                        Log.d("BROADCASTT","OKKKKK");
                          try {
                                  jObject = new JSONObject(message);
                           
                                  String title= jObject.getString("title");
                                  String body= jObject.getString("alert");
                                 String time= (String) android.text.format.DateFormat.format("hh:mm:ss", new java.util.Date());
                               
                                  SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy");
                                  String currentDate = sdf.format(new Date());
                                SharedPreferences sp=getApplicationContext().getSharedPreferences("CloudMobile",Context.MODE_PRIVATE);
                                Editor editor =sp.edit();
                                editor.putString("body",body);
                                editor.putString("title",title);
                                editor.putString("time", time);
                                editor.putString("data",currentDate);
                            editor.commit();
                            updateOffline(title,body,currentDate,time,0);
                           

                      }
                     catch (JSONException e) {
                      Log.d(TAG, "JSONException: " + e.getMessage());
                    }
                         
                  }

mentre il secondo è dichiarato nel manifest ed è collegato ad un service che mi permette di ricevere i dati anche quando l'applicazione è chiusa:
Codice (XML): [Seleziona]
 <service android:name="com.parse.PushService" />
                        <receiver android:name="ParseBroadcastReceiver">
                                <intent-filter>
                                         <action android:name="android.intent.action.BOOT_COMPLETED" />
                                         <action android:name="android.intent.action.USER_PRESENT" />
                                         <action android:name="UPDATE_STATUS"/>
                                </intent-filter>
                        </receiver>
</service

Il dubbio è questo: quando l'applicazione è chiusa, ovviamente noto che è attivo solo il receiver del service ed è ok. Quando l'applicazione è aperta, entrambi i broadcast ricevono i dati ma dovrei dare la precedenza al primo. Come posso gestire questo fatto dato che entrambi i broadcast fanno la stessa cosa? Grazie

iClaude

  • Visitatore
Re:Due Broadcast receiver
« Risposta #1 il: 29 Maggio 2014, 11:35:24 CEST »
0
Avere 2 BroadcastReceiver attivi che eseguono lo stesso compito mi suona male, per cui cercherei di risolvere il problema a monte.
Tuttavia, per rispondere alla tua domanda, ciò che vuoi fare lo si può fare con gli ordered broadcast e con le priority settate opportunamente.

Offline elfo83

  • Utente normale
  • ***
  • Post: 287
  • Respect: +23
    • Mostra profilo
  • Sistema operativo:
    Mac OS 10.8.2
Re:Due Broadcast receiver
« Risposta #2 il: 10 Giugno 2014, 10:42:27 CEST »
0
Alla fine sono riuscito a metterne uno solo ;)