如何安排一些工作,每天上午12点到下午6点,在安卓系统中以60分钟的时间间隔进行工作?
问题描述:
这是我每天都在打电话,在下午3点代码:如何安排一些工作,每天上午12点到下午6点,在安卓系统中以60分钟的时间间隔进行工作?
long INTERVAL_MSEC = 24 * 60 * 60 * 1000;
Date date2am = new java.util.Date();
date2am.setHours(15);
date2am.setMinutes(0);
Timer timer = new Timer();
TimerTask task = new TimerTask() {
public void run() {
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
String finalPhonenumber = Globals.sms1PhoneNumbers.get(rad).number + getResources().getString(R.string.extention);
callIntent.setData(Uri.parse("tel:" + finalPhonenumber));
startActivity(callIntent);
}
};
timer.scheduleAtFixedRate(task, date2am, INTERVAL_MSEC);
现在我需要到下午6点进行60分钟间隔上午12点之间的呼叫每天 - 我怎样才能做到这一点?
答
您需要创建如下创建警报运行在12日上午:00:00小时:
private void startat12() {
AlarmManager alarmManager;
alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY, 00);
c.set(Calendar.MINUTE, 00);
Long milliseconds = c.getTimeInMillis();
Long daily = 24L * 60L * 60L * 1000L;
//check if the time is already passed
if (milliseconds < System.currentTimeMillis()) {
//if already passed then push it for next day by adding just 24 hrs
milliseconds = milliseconds + daily;
}
Intent intent = new Intent(YourActivity.this, MyReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(YourActivity.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, milliseconds, pendingIntent);
} else {
alarmManager.set(AlarmManager.RTC_WAKEUP, milliseconds, pendingIntent);
}
String dateFormat = "dd/MM/yyyy HH:mm";
SimpleDateFormat formatter = new SimpleDateFormat(dateFormat);
Toast.makeText(this, "Alarm is set for " + formatter.format(milliseconds), Toast.LENGTH_SHORT).show();
}
现在你MyReceiver
将在次日00:00时 的代码接收广播您的接收器将是:
public class MyReceiver extends BroadcastReceiver {
PowerManager powerManager;
PowerManager.WakeLock wakeLock;
AlarmManager alarmManager;
Calendar c;
SimpleDateFormat formatter;
String dateFormat;
@Override
public void onReceive(final Context context, Intent intent) {
//acquire wake lock
powerManager = (PowerManager) context.getSystemService(POWER_SERVICE);
wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakelockTag");
wakeLock.acquire();
alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY, 12);
c.set(Calendar.MINUTE, 00);
Long daily = 24L * 60L * 60L * 1000L;
//Set Unlocked notification broadcast
Intent intentnew= new Intent(context, MyService.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intentnew, PendingIntent.FLAG_UPDATE_CURRENT);
dateFormat = "dd/MM/yyyy HH:mm";
formatter = new SimpleDateFormat(dateFormat);
Toast.makeText(context, "Alarm is set for " + formatter.format(c.getTimeInMillis()+daily), Toast.LENGTH_SHORT).show();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, (c.getTimeInMillis() + daily), pendingIntent);
} else {
alarmManager.set(AlarmManager.RTC_WAKEUP, (c.getTimeInMillis() + daily), pendingIntent);
}
final Handler mHandler = new Handler();
Runnable mRunnable = new Runnable() {
@Override
public void run() {
//DO your Work for each Hour
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
String finalPhonenumber = Globals.sms1PhoneNumbers.get(rad).number + context.getResources().getString(R.string.extention);
callIntent.setData(Uri.parse("tel:" + finalPhonenumber));
context.startActivity(callIntent);
Toast.makeText(context, "It Ran", Toast.LENGTH_SHORT).show();
//Also post your mHandler for next hour
if (System.currentTimeMillis() < c.getTimeInMillis()) {
mHandler.postDelayed(this, 60L * 60L * 1000L);
Toast.makeText(context, "Task will repeat after an hour", Toast.LENGTH_SHORT).show();
}
}
};
c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY, 18);
c.set(Calendar.MINUTE, 00);
mHandler.post(mRunnable);
wakeLock.release();
}
}
,做包括唤醒锁的许可,您的清单:
<uses-permission android:name="android.permission.WAKE_LOCK"/>
还接收机:
<receiver android:name=".Notificationtwo.MyReceiver"/>
+1
非常感谢。你救了我的一天! – HRCJ
使用AlarmManager –
你确定我可以在报警管理器来定义持续时间。 – HRCJ
看看Firebase Job Dispatcher https://github.com/firebase/firebase-jobdispatcher-android –