- 直接上代码
<Button
android:id="@+id/dingshis"
android:layout_gravity="center_horizontal"
android:layout_width="240dp"
android:layout_height="48dp"
android:text="定时"
android:textSize="17sp"
android:layout_marginTop="16dp"/>
//当点击定时按钮的时候
case R.id.dingshis :
alarmManagerUtils.getUpAlarmManagerStartWork();
Toast.makeText(getApplicationContext(),"设置成功",Toast.LENGTH_SHORT).show();
Log.e("ssssss","ssssssssss");
break;
- 工具类 AlarmManagerUtils
public class AlarmManagerUtils {
private static final long TIME_INTERVAL = 10 * 1000;//闹钟执行任务的时间间隔
private Context context;
public static AlarmManager am;
public static PendingIntent pendingIntent;
private Calendar calendar;
//
private AlarmManagerUtils(Context aContext) {
this.context = aContext;
}
//singleton
private static AlarmManagerUtils instance = null;
public static AlarmManagerUtils getInstance(Context aContext) {
if (instance == null) {
synchronized (AlarmManagerUtils.class) {
if (instance == null) {
instance = new AlarmManagerUtils(aContext);
}
}
}
return instance;
}
public void createGetUpAlarmManager() {
am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, MyService.class);
pendingIntent = PendingIntent.getService(context, 0, intent, 0);//每隔10秒启动一次服务
}
@SuppressLint("NewApi")
public void getUpAlarmManagerStartWork() {
calendar = Calendar.getInstance();
calendar.set(Calendar.SECOND,10);
calendar.set(Calendar.SECOND,20);
calendar.set(Calendar.SECOND,15);
//版本适配 System.currentTimeMillis()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {// 6.0及以上
am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), pendingIntent);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {// 4.4及以上
am.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
pendingIntent);
} else {
am.setRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), TIME_INTERVAL, pendingIntent);
}
}
@SuppressLint("NewApi")
public void getUpAlarmManagerWorkOnOthers(int time) {
//高版本重复设置闹钟达到低版本中setRepeating相同效果
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {// 6.0及以上
am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis() + time, pendingIntent);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {// 4.4及以上
am.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()
+ time, pendingIntent);
}
}
}
- 服务 MyService
public class MyService extends Service {
private static final String TAG = "MyService";
public MyService() {
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
new Thread(new Runnable() {
@Override
public void run() {
Log.e("测试11111","测试测试1111111111");
}
}).start();
AlarmManagerUtils.getInstance(getApplicationContext()).getUpAlarmManagerWorkOnOthers(10 * 100);
return super.onStartCommand(intent, flags, startId);
}
}
别忘了注册服务