2012-08-24 12 views
10

Mam ten kod:Czy mogę używać AlarmManager z LocalBroadcastManager na Androidzie?

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); 

Ale chciałbym to zmienić za LocalBroadcastManager. czy to możliwe?

Odpowiedz

8

Nie, nie jest to możliwe, ponieważ LocalBroadcastManager jest tylko dla twojego własnego procesu, a backend AlarmManager działa w innym procesie. Dlatego nie ma sposobu, aby utworzyć PendingIntent, który działa z LocalBroadcastManager.

+2

czy istnieje sposób, aby intencją bardziej prywatnego, tak aby inne aplikacje nie będą mogły korzystać to? –

+2

W skrócie, nie. Jednak wszelkie inne aplikacje, które chcą słuchać twoich audycji, muszą znać pełny ciąg akcji. Zapewnia to przynajmniej pewne bezpieczeństwo poprzez zaciemnienie (co nie jest tak naprawdę bezpieczeństwem). – Doge

4

Ale można zarejestrować BroadcastReceiver które zasadniczo konwertuje „globalnej” nadawane w 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

Tak, możesz _ ale ale to nie znaczy, że musisz. Cały punkt 'LocalBroadcastManager' polega na tym, że może on odbierać transmisje tylko z aplikacji, ze względów bezpieczeństwa. Jeśli utworzysz odbiornik, który odbierze transmisje z zewnątrz i ponownie je wyemituje na lokalnym menedżerze, pokona to cały cel 'LocalBroadcastManager'. Równie dobrze możesz po prostu zarejestrować odbiornik nie lokalnie i nie zagrozić wszystkim, co może być zarejestrowane w 'LocalBroadcastManager'. – spaaarky21

Powiązane problemy