简体   繁体   English

我的警报管理器有时不触发

[英]my alarmmanager sometimes not firing

my alarmmanager sometimes not firing 我的警报管理器有时不触发

Main_activity: 主要活动:

Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(System.currentTimeMillis());
cal.set(Calendar.HOUR_OF_DAY, tp1.getCurrentHour());
cal.set(Calendar.MINUTE, tp1.getCurrentMinute());
cal.set(Calendar.SECOND, 0);

long timeDif = cal.getTimeInMillis() - System.currentTimeMillis();
long horaFinal = System.currentTimeMillis() + AlarmManager.INTERVAL_DAY + timeDif;
long result = (cal.getTimeInMillis() - System.currentTimeMillis()) / 1000;
long results = (horaFinal- System.currentTimeMillis())/1000;
long alarma;

if(result >= 0 && result < 60){
     alarma = cal.getTimeInMillis();
}else{
    alarma = horaFinal;
}

Intent intent = new Intent(this, Temporizador.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(
        this.getApplicationContext(), 234324243, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, alarma, pendingIntent);


    if (result >= 0 && result < 60) {
        Toast.makeText(this, "La alarma sonará en menos de un minuto.",
                Toast.LENGTH_LONG).show();
    } else if (result < 3600 & result >= 60) {
        result = result / 60;
        Toast.makeText(this,
                "La alarma sonará en " + result + " minutos.",
                Toast.LENGTH_LONG).show();
    } else if (result >= 3600) {
        int resultado = (int) (result / 3600);
        long minutos = (result % 3600) / 60;
        Toast.makeText(
                this,
                "La alarma sonará en " + resultado + " horas y "
                        + minutos + " minutos.", Toast.LENGTH_LONG)
                .show();
    }else{
       if(results >= 0 && results < 60){
           Toast.makeText(this, "La alarma sonará en menos de un minuto.",
                Toast.LENGTH_LONG).show();
       } else if (results < 3600 & results >= 60) {
        results /= 60;
        Toast.makeText(this,
                "La alarma sonará en " + results + " minutos.",
                Toast.LENGTH_LONG).show();
       }else if (results >= 3600) {
        int resultado = (int) (results / 3600);
        long minutos = (results % 3600) / 60;
        Toast.makeText(
                this,
                "La alarma sonará en " + resultado + " horas y "
                        + minutos + " minutos.", Toast.LENGTH_LONG)
                .show();  
       }
    }

The "Temporizador" class I have the following: 我的“临时工”课程有以下内容:

package com.example.alarmarockfm;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class Temporizador extends BroadcastReceiver {
    @Override

    public void onReceive(Context context, Intent intent) {
        /*Intent i = new Intent(this, EmisoraRadio.class );
        startActivity(i);*/     
        Intent i = new Intent(context, EmisoraRadio.class); 
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
        context.startActivity(i);

    }

}

And finally, in my Manifest 最后,在我的清单中

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.alarmarockfm"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />
    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.alarmarockfm.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
         <receiver android:name="Temporizador"></receiver>
         <activity android:name="EmisoraRadio"></activity>
         <activity android:name="Configuracion"></activity>
    </application>

</manifest>

Usually works, but if my app is running in the background fails, or if the phone is a long time locked 通常可以正常使用,但是如果我的应用程序在后台运行失败,或者手机长时间锁定

You could try like this 你可以这样尝试

SystemClock.elapsedRealtime() instead of System.currentTimeMillis() SystemClock.elapsedRealtime()而不是System.currentTimeMillis()

And also see this difference 还可以看到这种差异

ELAPSED_REALTIME_WAKEUP :trigger the alarm since boot time and RTC_WAKEUP: trigger the alarm according to the clock time ELAPSED_REALTIME_WAKEUP:从启动时间开始触发警报,而RTC_WAKEUP:根据时钟时间触发警报

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM