android 一个activity定时更新另一个activity的UI

在开发软件的过程中,客户提出了一个要求,就是在Mainactivity的一个按键button按下之后进入另一个OtherActivity,在这个OtherActivity完成了功能之后,按键button就不能使能,第二天之后再重新使能。要实现这个功能,首先要实现的就是一个activity更新另一个activity,还有一个就是一个定时的功能。

要实现第一个功能,首先想到的使用handler发送消息,但是在使用过程中遇到一些问题,通过查找资料发现使用BroadCast广播机制也能实现这项功能,当OtherActivity完成功能后向系统发送一个广播,在Mainactivity中接收这个广播,接收到广播后禁止button使能。

还有一个功能就是定时功能,当Mainactivity中的button禁止使能后,经过24小时后button解禁重新使能。一看到这个功能想到的就是利用系统时间,记录下button禁止使能的时间,然后在监控系统时间,等时间到达后button重新使用。但是在功能实现过程中一直不能实现大哭,后来突然想到安卓都有一个闹钟的功能,利用闹钟的机制,定时就能实现这项功能。

两个步骤:

一、手机闹钟主要用到了AlarmManager类,AlarmManager类提供了访问系统定时服务的途径,开发人员可以在程序中设置某个应用程序在未来的某个时刻被执行。当AlarmManager定时时间到了之后,当初注册的Intent对象将会被系统广播,进而启动目标程序。

二、在程序运行时当需要使用AlarmManager类时,可以通过Context对象的getSystemService(Context.ALARM_SERVICE)方法来获得AlarmManager对象。

下面就附上代码

两个布局文件:

activity_main.xml

other.xml


MainActivity.java

注册了两个broadcast分别来接收button禁止使能和重新使能两个事件,接收到了之后对button进行操作

package com.zghaikun.project_activity;import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;public class MainActivity extends Activity {TextView textView;Button button;String date,date2,date1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView = (TextView) findViewById(R.id.show);button = (Button) findViewById(R.id.startAnother);button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubstartActivity(new Intent(MainActivity.this,otherActivity.class));}});//过滤条件IntentFilter filter = new IntentFilter(otherActivity.action);//注册广播registerReceiver(broadcastReceiver, filter);//过滤条件IntentFilter filter2 = new IntentFilter(otherActivity.AlarmAction);//注册广播registerReceiver(AlarmRecevier, filter2);}BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubSystem.out.println("更新控件");intent.getExtras().getString("data");button.setClickable(false);}};BroadcastReceiver AlarmRecevier = new BroadcastReceiver(){@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubif ("alarm.action".equals(intent.getAction())) {//在这里更新UI//设置按键使能;button.setClickable(true);System.out.println("打印一句话");Toast.makeText(MainActivity.this, "打印一句话!!", Toast.LENGTH_LONG).show();return;}}};protected void onDestroy() {unregisterReceiver(broadcastReceiver);unregisterReceiver(AlarmRecevier);super.onDestroy();};
}
other.java

包含一个系统设定闹钟的函数,当发送了第一个broadCast之后向系统发送一个广播,时间到达之后系统会发送广播,在Mainactivity中接收到广播,使button重新使能。

package com.zghaikun.project_activity;import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;public class otherActivity extends Activity {public static final String action = "broadcast.action";public static final String AlarmAction = "alarm.action";Button update;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.other);update = (Button) findViewById(R.id.updateMain);update.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubIntent intent = new Intent(action);intent.putExtra("data", "data");sendBroadcast(intent);setAlarmTime(otherActivity.this);finish();}});}public void setAlarmTime(Context context) {//获取系统的闹钟服务AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);//过滤条件Intent intent = new Intent(AlarmAction);//PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);//int interval = 1000 * 60 * 60 * 24;// 24小时//24小时太长了,还是先测试1分钟的能不能实现int interval = 1000 * 60;// 24小时//设置闹钟,System.currentTimeMillis() + interval系统当前时间+24小时am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + interval, sender);}}






本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部