android 定时器如何让某天某个时间启动

android 定时器如何让某天某个时间启动,第1张

Android中使用AlarmManager进行定时 *** 作,现在需要启动多个定时器,但无论采用哪种方式后面的定时器都会将前面的定时器覆盖掉(Android系统版本21),只启动最后一个定时器,见代码 Java code// 方式一for (int i = 0; i < 10; i ++) { AlarmManager am = null; am = (AlarmManager) contextgetApplicationContext()getSystemService(ContextALARM_SERVICE); Intent i = new Intent("xxx"); PendingIntent sender = PendingIntentgetBroadcast(contextgetApplicationContext(), 0, i, PendingIntentFLAG_UPDATE_CURRENT); amsetRepeating();}// 方式二AlarmManager am = null;am = (AlarmManager) contextgetApplicationContext()getSystemService(ContextALARM_SERVICE);for (int i = 0; i < 10; i ++) { Intent i = new Intent("xxx"); PendingIntent sender = PendingIntentgetBroadcast(contextgetApplicationContext(), 0, i, PendingIntentFLAG_UPDATE_CURRENT); amsetRepeating();} 请问如果要实现启动多个定时器应该怎么 *** 作?Android系统的闹钟就是采用AlarmManager进行 *** 作的,如何才能启动多个定时器呢?先谢谢大家了 ------解决方案-------------------- public static PendingIntent getBroadcast(Context context, int requestCode, Intent intent, int flags) requestCode 需要是唯一的

你的意思是,假设3个RadioButton,第一个设为10秒,第二个设为20秒,第三个设为30秒,然后一起倒计时到0吗?如果是这样的话,只需要在Handler的handleMessage中去减时间就行了。
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
superhandleMessage(msg);
xxsetText(IntegerparseInt(xxgetText()-1);
}
};

只需要在service里d出一个全局对话框即可,以下是示例代码:
1创建对象框
AlertDialogBuilder builder = new Builder(context);
buildersetTitle("请输入"); //设置对话框标题
buildersetIcon(androidRdrawablebtn_star); //设置对话框标题前的图标
2创建EditText输入框
final EditText edit = new EditText(context);
3将输入框赋值给Dialog,并增加确定取消按键
buildersetView(edit);
buildersetPositiveButton("确认", new DialogInterfaceOnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ToastmakeText(context, "你输入的是: " + editgetText()toString(), ToastLENGTH_SHORT)show();
}
});
buildersetNegativeButton("取消", new DialogInterfaceOnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ToastmakeText(context, "你点了取消", ToastLENGTH_SHORT)show();
}
});
4设置常用api,并showd出
buildersetCancelable(true); //设置按钮是否可以按返回键取消,false则不可以取消
AlertDialog dialog = buildercreate(); //创建对话框
dialogsetCanceledOnTouchOutside(true); //设置d出框失去焦点是否隐藏,即点击屏蔽其它地方是否隐藏
dialogshow();

我知道的有三种方法
方法一:可以通过android自带的Handler机制,里面有new Handler()postDelayed(new Runnable(){
@Override
public void run() {
//延迟的时间到了执行
}
},延迟的时间);
方法二:可以通过java里面的线程来写,new Thread()sleep(延迟时间);时间到了会继续执行;
方法三:java定时器(有很多方法)例如:
Timer timer = new Timer();
timerschedule(new TimerTask() {
public void run() {
Systemoutprintln("-------设定要指定任务--------");
}
}, long delay,long period);
delay延迟的时间,period为多久执行一次;
个人推荐用方法一,毕竟安卓系统自带的,并且安卓不适合加定时器,如果处理不当一直执行的话,要么卡,要么程序崩溃。还有发布版本可能审核不通过。

首先写几点感悟:

闹钟类,目前只用过 AlarmManagerRTC_WAKEUP 类型,这个是精确定时,很多博客都提到过,不了解的可以自己查查。然后 action 用来启动服务或者广播, alarmId 就是 requestCode ,用来区别不同的闹钟。该工具类不仅仅可以用来定时通知,只要稍加改动,定时广播、定时任务、定时d窗都是可以做的。

服务和广播配置一个就可以了,目前我才有的是服务的配置方法

服务的配置方法:

广播的配置方法:

由于查看的资料太多了,所以就不一一列举了,然后提供一个测试方法,可以在 MainActivity 的 OnCreate 方法中调用:

1 从Service继承一个类。
2 创建startService()方法。
3 创建endService()方法 重载onCreate方法和onDestroy方法,并在这两个方法里面来调用startService以及endService。
4 在startService中,通过getSystemService方法获取ContextLOCATION_SERVICE。
5 基于LocationListener实现一个新类。默认将重载四个方法onLocationChanged、onProviderDisabled、onProviderEnabled、onStatusChanged。对于onLocationChanged方法是我们更新最新的GPS数据的方法。一般我们的 *** 作都只需要在这里进行处理。
6 调用LocationManager的requestLocationUpdates方法,来定期触发获取GPS数据即可。在onLocationChanged函数里面可以实现我们对得到的经纬度的最终 *** 作。
7 最后在我们的Activity里面通过按钮来启动Service,停止Service。
示意代码如下:
package comoffbyegpsservice;
import androidappService;
import androidcontentContext;
import androidcontentIntent;
import androidlocationLocationListener;
import androidlocationLocationManager;
import androidosBinder;
import androidosIBinder;
import androidutilLog;
public class GPSService extends Service {
// 2000ms
private static final long minTime = 2000;
// 最小变更距离10m
private static final float minDistance = 10;
String tag = thistoString();
private LocationManager locationManager;
private LocationListener locationListener;
private final IBinder mBinder = new GPSServiceBinder();
public void startService() {
locationManager = (LocationManager) getSystemService(ContextLOCATION_SERVICE);
locationListener = new GPSServiceListener();
locationManagerrequestLocationUpdates(LocationManagerGPS_PROVIDER, minTime, minDistance,
locationListener);
}
public void endService() {
if (locationManager != null && locationListener != null) {
locationManagerremoveUpdates(locationListener);
}
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return mBinder;
}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10615548.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存