在开发软件的过程中,客户提出了一个要求,就是在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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:id="@+id/show"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/hello_world" /><Button android:id="@+id/startAnother"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="打开另一个Activity"/></LinearLayout>

other.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><Button android:id="@+id/updateMain"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="更新控件"/></LinearLayout>

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);}}

android 一个activity定时更新另一个activity的UI相关推荐

  1. [Android Traffic] 调整定时更新的频率(C2DM与退避算法)

    转载自: http://blog.csdn.net/kesenhoo/article/details/7395253 Minimizing the Effect of Regular Updates[ ...

  2. set column oracle,Oracle 用一个表字段更新另一个表字段三种方法

    1. update (select .....) set column1 = column2; update (select iy.company_name company_name1, cc.com ...

  3. 【转】android之在activity中控制另一个activity的UI更新_如何在activity之间传递handler...

    来自:http://blog.csdn.net/jason0539/article/details/18055259 遇到一个问题,需要在一个activity中控制另一个acitivity做一些更新, ...

  4. Android筑基——Activity的启动过程之同进程在一个Activity中启动另一个Activity(基于api21)

    目录 1. 前言 2. 正文 2.1 Activity类的startActivity()方法 2.2 Instrumentation类的execStartActivity()方法 2.3 Activi ...

  5. 【Android】12.3 在当前Activity中获取另一个Activity的返回值

    分类:C#.Android.VS2015: 创建日期:2016-02-23 一.简介 在上一节的示例中,通过StartActivity(Intent)方法启动另一个Activity后,这两个Activ ...

  6. android activity从新打开,【Android开发-8】生命周期,Activity中打开另一个Activity

    前言:生命中有不少人陪伴本身走过一辈子中的某段旅程,仅仅是有些人仅仅是某阶段出现,有些人却陪伴本身很是久.就像小学.中学.高中.大学,那些之前觉得会长久拥有的,当经历过天涯各地地忙碌于生活,或如意.或 ...

  7. android多个activity绑定一个service,8.1.2 绑定Activity和Service

    8.1.2  绑定Activity和Service 本节的例子代码所在的工程目录是src\ch08\ch08_serviceactivity 如果使用8.1.1节介绍的方法启动服务,并且未调用stop ...

  8. android 获取apk主activity,关于如何知道一个安装的apk的主activity

    关于如何查找知道一个安装的apk的主activity 关于如何查找知道一个安装的apk的主activity,从而命令行进行am start的方法: $ adb install /media/neil/ ...

  9. 点击android搜索框跳入另一个页面,android - ToolBar中的SearchView如何让点击之后跳转到一个新的Activity...

    PHP中文网2017-04-17 13:08:302楼 @李引证 的回答包括了关键信息,我来补充一些细节,及纠正几个细节上的错误. 关于"菜单项的点击事件" 我们需要覆写 onCr ...

最新文章

  1. plsql 简单介绍
  2. Drools 7支持DMN(决策模型和表示法)
  3. C语言带参宏定义和函数的区别
  4. 实体(Entity)和模型(Model)
  5. 【接口自动化测试】使用Fitness实现接口自动化测试
  6. Kate:Linux下自动检测文件编码的编辑器
  7. Ruby完全自学手册
  8. Spring涉及到的9种设计模式
  9. 位运算bitwise_and函数
  10. 使用poi导出excel,及合并单元格边框显示问题
  11. python nlp 句子提取_自然语言16.1_Python自然语言处理学习笔记之信息提取步骤分块(chunking)...
  12. git cheatsheet
  13. 笔记本无法连接WiFi
  14. [信息论与编码]离散信源及其信息测度(2)
  15. Instagram养号:账号防封攻略
  16. 大蟒蛇python编译器_python蟒蛇绘制
  17. 考研作文重点框架、句子、词汇总结
  18. 分享][转帖] 无光驱安装系统的方法
  19. 嵌入式必懂的CAN总线,一文讲通了
  20. Qt QListWidget 实现播放列表效果,双击增高选中项

热门文章

  1. 学习busybox源码与移植
  2. list中抽出某一个字段的值_使用LINQ获取List列表中的某个字段值
  3. 转pdf wps_华为手机自带图片转PDF的功能?今天才知道,当了5年花粉白当了
  4. linux 控制网卡流量,如何管理和控制多网卡 Linux 虚拟机的流量走向
  5. Git 下载很慢问题解决方案
  6. uploadhandler.php,多个WordPress主题’upload-handler.php’任意文件上传漏洞
  7. alpinestars与丹尼斯_胖摩的骑行路 篇四:真的值到了—丹尼斯MOTORSHOE AIR骑行靴...
  8. python中split_python中split()和split(' ')的区别
  9. python post请求 415_接收错误415:使用REST API发送GET请求时不支持媒体类型
  10. 台式电脑不拉网线上网_技巧知识:电脑不用网线也可以上网了,你知道吗?