我在服务中使用AlarmManager每分钟触发一次.
PendingIntent pendingIntent = PendingIntent.getService(getApplicationContext(), 0,
getUpdateServiceIntent(mContext), PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
// Cancel any pending Intent
am.cancel(pendingIntent);
// Set a new one
am.set(AlarmManager.RTC_WAKEUP, 60000, pendingIntent);
Run Code Online (Sandbox Code Playgroud)
在Samsung S5 Neo上:当屏幕处于活动状态时,它正在按预期工作.屏幕关闭时,每5分钟触发一次(而不是一次).
我在S5 Mini(Android 4.4),Nexus 5 5.1和Nexus 5 6.0上尝试了完全相同的代码,这段代码运行正常.
targetSdkVersion是19.
知道如何在屏幕关闭时保持AlarmManager正常工作吗?延迟仍然是5分钟,即使我要求30秒.
编辑:我也尝试了'setExact'方法,但它没有改变任何东西.每次报警之间仍有5分钟的间隔.
我开发了一个应用程序,它使用AlarmManager来设置需要在一年中的某个特定时间触发的群警报(通常大约50个).这是我正在使用的代码,因为4.4 kitkat更改了AlarmManager.
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
long setDate = fireDate.getTime(); // it's a calendar date defined above
Intent intent = new Intent(LOCAL_DISPLAY_MESSAGE_ACTION);
PendingIntent pending = PendingIntent.getBroadcast(ctx,
id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
if (Build.VERSION.RELEASE.startsWith("6")) {
am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, setDate, pending);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
am.setExact(AlarmManager.RTC_WAKEUP, setDate, pending);
} else {
am.set(AlarmManager.RTC_WAKEUP, setDate, pending);
}
Run Code Online (Sandbox Code Playgroud)
除了上面的代码,我正在使用清单中正确定义的广播接收器.
public class LocalReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
PushWakeLocker.acquire(context);
// do some stuff
PushWakeLocker.release();
}
}
Run Code Online (Sandbox Code Playgroud)
更多信息可能会有所帮助.
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="19" />
Run Code Online (Sandbox Code Playgroud)
几个月以前,我一直只是从三星设备(5.0 …
android alarmmanager samsung-mobile android-5.0-lollipop android-5.1.1-lollipop
我试图制作一个闹钟应用程序.目前我正在使用AlarmManager.我的minSdkVersion是API等级19.
问题是,我不能得到像其他应用程序一样的确切警报.例如,Playstore中的AlamDroid示例:当时钟切换到设置的时间时,它会在秒中触发警报.它也适用于API 19.
我的代码现在是:
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);
if (calendar.getTimeInMillis() < System.currentTimeMillis())
calendar.add(Calendar.HOUR, 24);
Intent myIntent = new Intent(context, AlarmReceiver.class);
myIntent.putExtra(DB_ID, myID);
pendingIntent = PendingIntent.getBroadcast(context, myID, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
Run Code Online (Sandbox Code Playgroud)
问题是在AlarmDroid中,我在API Levl 19上获得了一个位于Android状态栏上方的AlarmIcon.但是他是怎么做到的?因为alarmManager.setAlarmClock只有在API> = 21时才可用.而Icon只有这个!
但是,AlarmDroid的准确性在第二阶段是完美的!虽然我的情况更糟.除了AlarmManager还有其他方法吗?或者:我做错了什么?为什么我无法像PlayStore中的其他AlarmClock应用程序那样设置非常准确的警报.即使状态栏中有通知......
编辑:在AlarmDroid和其他警报应用程序上,在警报触发前一分钟内状态栏中有一个通知.这似乎就像每个AlarmApp都有它一样内置!
编辑2:Appstore中的其他警报怎么可能是准确的?
编辑 - >可能的解决方案:
对于所有有相同问题的人,请在这里查看:
链接到Stackoverflow问题 - 来自PawełNadolski/ Mathieu H.的回答
这可能是三星手机的解释/解决方案.他们似乎正在检查Pakagename的关键字,如"闹钟","警报",以使报警更准确!