Reloj setAlarmClock repetición ()

Felix Hegg:

Estoy tratando de construir un reloj despertador, donde el usuario puede elegir el tiempo y los días de la semana en que la alarma ha de fuego. Para ello, he utilizado setAlarmClock(), debido a que la alarma de incendios tiene que incluso si el dispositivo entre en modo de sopor. El problema es, que setAlarmClock()es sólo una alarma que suena una vez y no se puede repetir una vez por semana. La única solución que se me ocurrió es hacer una setRepeatingAlarm(), que los horarios del setAlarmClock()día a día.

Por favor, dime si esto es un trabajo inteligente alrededor o si hay una mejor manera.

Además no estoy seguro si tengo que programar el diario setAlarmClock()de un receptor de radiodifusión o de un servicio adicional.

Por favor, dígame si necesita más información o piezas de código.

Felix Hegg:

Después de muchas horas de retraso he encontrado la solución oficial. Usted tiene que manejar todas las alarmas después de cada reinicio. He hecho esto de la siguiente manera:

Obtener el permiso en el manifiesto:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

A continuación, crear un receptor con el siguiente filtro Intención:

<receiver android:name=".FragmentAlarm.RestartAlarmsReceiver" android:enabled="true" 
android:exported="false">
        <intent-filter>
            <category android:name="android.intent.category.DEFAULT"/>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
            <action android:name="android.intent.action.QUICKBOOT_POWERON"/>
            <!--For HTC devices-->
            <action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/>
        </intent-filter>
    </receiver>`

Lo siguiente que necesita para crear este receptor. La mía tiene el siguiente aspecto:

public class RestartAlarmsReceiver extends BroadcastReceiver {
private String TAG = "halo";

@Override
public void onReceive(Context context, Intent intent) {

    if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
        Log.e("starting", "starting JobScheduler");
        schedule(context);
    } else {
        Log.e(TAG, "Received unexpected intent " + intent.toString());
    }
}

private void schedule(Context context) {
    // say when Job has to be executed
    ComponentName componentName = new ComponentName(context, JobServiceC.class);
    JobInfo info = new JobInfo.Builder(145, componentName)
            .setOverrideDeadline(0)
            .setPersisted(true)                                     // keeps job alive after reboot -> need permission
            .build();

    JobScheduler scheduler = (JobScheduler) context.getSystemService(JOB_SCHEDULER_SERVICE);
    int resultCode = scheduler.schedule(info);

    if (resultCode == JobScheduler.RESULT_SUCCESS) {
        Log.e("TAG", "Job scheduled");
    } else {
        Log.e("TAG", "Job not scheduled");
    }
}

private void cancel(Context context) {
    JobScheduler scheduler = (JobScheduler) context.getSystemService(JOB_SCHEDULER_SERVICE);
    scheduler.cancel(145);
    Log.e("TAG", "JobCancelled");
}

Aquí hay que ajustar el "Nombre del Componente", en el que tiene que comenzar su clase Java, que establece todas las alarmas de nuevo para este día.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=235385&siteId=1
Recomendado
Clasificación