我的闹钟管理员有时不会解雇
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();
}
}
&#34; Temporizador&#34;我有以下内容:
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);
}
}
最后,在我的清单中
<?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>
通常有效,但如果我的应用在后台运行失败,或者手机长时间锁定
答案 0 :(得分:0)
你可以尝试这样
SystemClock.elapsedRealtime()而不是System.currentTimeMillis()
并且也看到了这种差异
ELAPSED_REALTIME_WAKEUP:启动时间后触发警报 RTC_WAKEUP:根据时钟时间触发报警