2012-08-24 10 views
10

ho questo codice:Posso usare AlarmManager con LocalBroadcastManager su Android?

private AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
private PendingIntent alarmIntent = PendingIntent.getBroadcast(this, 0, new Intent("my action-name"), 0); 

alarmManager.setInexactRepeating((int)AlarmManager.ELAPSED_REALTIME_WAKEUP,  SystemClock.elapsedRealtime() + autoUpdateIntervalInMinutes * 60 * 1000, autoUpdateIntervalInMinutes * 60 * 1000, alarmIntent); 

Ma vorrei cambiare questo per LocalBroadcastManager. È possibile?

risposta

8

No, non è possibile, poiché LocalBroadcastManager è solo per il proprio processo e il backend di AlarmManager viene eseguito in un processo diverso. Ecco perché non c'è modo di creare un PendingIntent che funzioni con LocalBroadcastManager.

+2

c'è un modo per rendere l'intento più privato, in modo che altre applicazioni non saranno in grado di utilizzare vero? –

+2

In breve, no. Tuttavia, qualsiasi altra app che desideri ascoltare le tue trasmissioni dovrebbe conoscere la stringa di azione completa. Questo almeno ti dà un po 'di sicurezza attraverso l'oscurità (che non è veramente la sicurezza). – Doge

4

Ma si potrebbe registrare un BroadcastReceiver che converte fondamentalmente la "Global" in onda in un LocalBroadcast:

public class AutoUpdateBroadcastReceiver extends BroadcastReceiver { 

    private static final String TAG = AutoUpdateBroadcastReceiver.class.getSimpleName(); 

    @Override 
    public void onReceive(Context context, Intent intent) { 
    Log.d(TAG, ".onReceive"); 
    LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(context); 
    lbm.sendBroadcast(intent); 
    } 
} 
+2

Sì, si _can_ ma ciò non significa che si _should_. L'intero punto di 'LocalBroadcastManager' è che può ricevere solo le trasmissioni dall'interno dell'applicazione, per ragioni di sicurezza. Se si crea un ricevitore che riceve le trasmissioni dall'esterno e le si ritrasmette nuovamente sul gestore locale, ciò vanifica l'intero scopo di "LocalBroadcastManager". Potresti anche registrare il ricevitore non localmente e non mettere in pericolo tutto ciò che potrebbe essere registrato su 'LocalBroadcastManager'. – spaaarky21