Android Alarm Manager con receptor de transmisión registrado en código en lugar de manifiesto

StackOverflow https://stackoverflow.com/questions/3447594

Pregunta

Quiero usar una alarma para ejecutar algún código en un momento determinado. He implementado con éxito una alarma con el receptor de transmisión registrado en el manifiesto, pero como lo entiendo, este método utiliza una clase separada para el receptor de transmisión.

¿Puedo usar este método para iniciar otra actividad, pero no puedo usarlo para ejecutar un método en mi actividad principal?

(¿Cómo puedo notificar una actividad en ejecución desde un receptor de transmisión?)

Así que he estado tratando de registrar mi receptor de transmisión en mi actividad principal como se explica en la respuesta anterior.

private BroadcastReceiver receiver = new BroadcastReceiver(){
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "hello", Toast.LENGTH_SHORT).show();
        uploadDB();         
    }
};    

public void onResume() {
    super.onResume();

    IntentFilter filter = new IntentFilter();
    filter.addAction(null);

    this.registerReceiver(this.receiver, filter);
}

public void onPause() {
    super.onPause();

    this.unregisterReceiver(this.receiver);
}

Sin embargo, no he podido hacer que esto funcione con Alarm Manager, no estoy seguro de cómo debo vincular la intención de alarma al receptor de transmisión. ¿Alguien podría señalarme un ejemplo de registro de un receptor de transmisión del gerente de alarma dinámicamente en la actividad? O explicar cómo haría esto?

¿Fue útil?

Solución

¿Qué tal esto?

Intent startIntent = new Intent("WhatEverYouWant");
PendingIntent startPIntent = PendingIntent.getBroadcast(context, 0, startIntent, 0);
AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarm.set(AlarmManager.RTC_WAKEUP, triggerTime, startPIntent);

Y luego en tu Manifest.xml expediente:

<receiver android:name="com.package.YourOnReceiver">
   <intent-filter>
       <action android:name="WhatEverYouWant" />
   </intent-filter>
</receiver>

Por lo que sé, hasta donde sé, aún tienes que declarar al receptor en el manifiesto. No estoy seguro de si puede configurarlo en una instancia privada dentro de su actividad. Puede declarar un onreceive dentro de su actividad y llamar a eso (si el locutor tiene una interfaz. No sé si lo hace).

Otros consejos

Inicie una intención de alarma desde donde desea comenzar la alarma. Escriba el código a continuación desde donde desea comenzar a escuchar la alarma

Intent myIntent = new Intent(getBaseContext(), **AlarmReceiver**.class);
                PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 0, myIntent, 0);
                AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
                Calendar calendar = Calendar.getInstance();
                calendar.setTimeInMillis(System.currentTimeMillis());
                calendar.add(Calendar.MINUTE, shpref.getInt("timeoutint", 30));
                alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);

Y en el receptor de transmisión escriba el código que desea recibir. Y en Menifest escribe a continuación

<receiver android:name=".AlarmReceiver" android:process=":remote"/>

También puede poner alarma repetitiva también. ¡Espero que ayude!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top