android 一个activity定时更新另一个activity的UI
在開發(fā)軟件的過程中,客戶提出了一個要求,就是在Mainactivity的一個按鍵button按下之后進入另一個OtherActivity,在這個OtherActivity完成了功能之后,按鍵button就不能使能,第二天之后再重新使能。要實現(xiàn)這個功能,首先要實現(xiàn)的就是一個activity更新另一個activity,還有一個就是一個定時的功能。
要實現(xiàn)第一個功能,首先想到的使用handler發(fā)送消息,但是在使用過程中遇到一些問題,通過查找資料發(fā)現(xiàn)使用BroadCast廣播機制也能實現(xiàn)這項功能,當OtherActivity完成功能后向系統(tǒng)發(fā)送一個廣播,在Mainactivity中接收這個廣播,接收到廣播后禁止button使能。
還有一個功能就是定時功能,當Mainactivity中的button禁止使能后,經(jīng)過24小時后button解禁重新使能。一看到這個功能想到的就是利用系統(tǒng)時間,記錄下button禁止使能的時間,然后在監(jiān)控系統(tǒng)時間,等時間到達后button重新使用。但是在功能實現(xiàn)過程中一直不能實現(xiàn),后來突然想到安卓都有一個鬧鐘的功能,利用鬧鐘的機制,定時就能實現(xiàn)這項功能。
兩個步驟:
一、手機鬧鐘主要用到了AlarmManager類,AlarmManager類提供了訪問系統(tǒng)定時服務(wù)的途徑,開發(fā)人員可以在程序中設(shè)置某個應(yīng)用程序在未來的某個時刻被執(zhí)行。當AlarmManager定時時間到了之后,當初注冊的Intent對象將會被系統(tǒng)廣播,進而啟動目標程序。
二、在程序運行時當需要使用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//設(shè)置按鍵使能;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
包含一個系統(tǒng)設(shè)定鬧鐘的函數(shù),當發(fā)送了第一個broadCast之后向系統(tǒng)發(fā)送一個廣播,時間到達之后系統(tǒng)會發(fā)送廣播,在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) {//獲取系統(tǒng)的鬧鐘服務(wù)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分鐘的能不能實現(xiàn)int interval = 1000 * 60;// 24小時//設(shè)置鬧鐘,System.currentTimeMillis() + interval系統(tǒng)當前時間+24小時am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + interval, sender);}}
總結(jié)
以上是生活随笔為你收集整理的android 一个activity定时更新另一个activity的UI的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 调用本地第三方应用软件,
- 下一篇: 汽车华荣道游戏?