如何使AlarmManager与IntentService一起使用,每隔5秒重复一次? 是否有可能绕过"绕过" 1/15分钟的障碍(空闲/打盹模式)?它必须一直工作(即使应用程序已关闭)。
修改 这里我有来自WakefulBroadcastReceiver的AlarmReceiver代码。
@Override
public void onReceive(Context context, Intent intent) {
Intent service = new Intent(context, VidService.class);
startWakefulService(context, service);
}
public void setAlarm(Context context) {
alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmReceiver.class);
alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
int currentapiVersion = android.os.Build.VERSION.SDK_INT;
if (currentapiVersion < android.os.Build.VERSION_CODES.KITKAT) {
alarmMgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 5000, alarmIntent);
} else {
if (currentapiVersion < android.os.Build.VERSION_CODES.M) {
alarmMgr.setExact(AlarmManager.RTC_WAKEUP, 5000, alarmIntent);
} else {
alarmMgr.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, 5000, alarmIntent);
}
}
}
还有我的IntentService代码。
@Override
protected void onHandleIntent(@Nullable Intent intent) {
checkIncommingCall();
AlarmReceiver.completeWakefulIntent(intent);
}
不幸的是,我的服务&#34;工作&#34;只有一次。我在Android 7.0上进行了测试,所以我的问题是 - setExactAndAllowWhileIdle重复吗?
答案 0 :(得分:0)
if element.name === 'home'
尽管如此,我强烈建议不要每5秒唤醒一次设备! 这真的消耗了电池!
修改强>
@SuppressLint("NewApi")
private static void startbyalarm(Context ctx, boolean wakeup, long nexttime) {
AlarmManager am = (AlarmManager) ctx.getSystemService(Activity.ALARM_SERVICE);
Intent intent = new Intent(BRPing.INTENT_FILTER);
PendingIntent pi = PendingIntent.getBroadcast(ctx, intentalarm, intent, PendingIntent.FLAG_CANCEL_CURRENT);
int currentapiVersion = android.os.Build.VERSION.SDK_INT;
if (currentapiVersion < android.os.Build.VERSION_CODES.KITKAT){
am.set(wakeup?AlarmManager.RTC_WAKEUP:, nexttime, pi);
} else {
if (currentapiVersion < android.os.Build.VERSION_CODES.M) {
am.setExact(AlarmManager.RTC_WAKEUP, nexttime, pi);
} else {
am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, nexttime, pi);
}
}
}
的manifest.xml:
public class BRPing extends WakefulBroadcastReceiver {
public static final String INTENT_FILTER = "Some.Intent.Name.BRPing";
@Override
public void onReceive(Context ctx, Intent intent) {
ComponentName comp = new ComponentName(ctx.getPackageName(),
YourService.class.getName());
startWakefulService(ctx, intent.setComponent(comp));
}
}
答案 1 :(得分:0)
setExactAndAllowWhileIdle重复吗?
不,不是。如果您需要重复,则必须在当前警报发生时安排新警报。
如何使AlarmManager与IntentService一起使用,每隔5秒重复一次?
这是不可能的,因为当打盹处于活动状态时,两次警报之间至少需要15分钟。
是否有可能“绕过”1/15分钟的障碍(空闲/打盹模式)?它必须一直工作(即使应用程序已关闭)。
不,没有。