android 自定义监听器 handler,Android实现静态广播监听器的方法

package lab.sodino.broadcastaction;

import lab.sodino.util.DatabaseOpenHelper;

import lab.sodino.util.SodinoOut;

import android.app.Activity;

import android.content.ContentResolver;

import android.database.ContentObserver;

import android.database.Cursor;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.view.View;

import android.view.ViewGroup.LayoutParams;

import android.widget.Button;

import android.widget.LinearLayout;

import android.widget.ScrollView;

import android.widget.TextView;

/**

* 本例子将记录可静态注册的广播被监听到的频度。

* 1.建立一表{ACTION_NAME广播名称,LAST_TIME最近一次发生时间,COUNT总共记录到的次数}

* 2.在ActionReceiver中监听广播,并记录。

* 3.在DBContentProvider中更新数据库记录

* 4.在BroadcastActionRecordAct.ActionDBObserver中监听数据库的变化,

* 并使用Handler机制将最新情况显示在txtInfo上。

* 5.DatabaseOpenHelper将实现基本的数据库操作。

*

* @author Sodino

*/

public class BroadcastActionRecordAct extends Activity implements

Button.OnClickListener {

private TextView txtInfo;

private DatabaseOpenHelper dbHelper;

private Button btnRefresh;

/** clear功能未完善。 */

private Button btnClear;

private Handler handler = new Handler() {

public void handleMessage(Message msg) {

String info = (String) msg.obj;

txtInfo.setText(info);

}

};

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

LayoutParams lpPC = new LayoutParams(LayoutParams.FILL_PARENT,

LayoutParams.WRAP_CONTENT);

LayoutParams lpCC = new LayoutParams(LayoutParams.WRAP_CONTENT,

LayoutParams.WRAP_CONTENT);

btnRefresh = new Button(this);

btnRefresh.setLayoutParams(lpCC);

btnRefresh.setText("Refresh");

btnRefresh.setOnClickListener(this);

btnClear = new Button(this);

btnClear.setLayoutParams(lpCC);

btnClear.setText("ClearTable");

btnClear.setOnClickListener(this);

LinearLayout subLayout = new LinearLayout(this);

subLayout.setLayoutParams(lpPC);

subLayout.setOrientation(LinearLayout.HORIZONTAL);

subLayout.addView(btnRefresh);

subLayout.addView(btnClear);

txtInfo = new TextView(this);

txtInfo.setLayoutParams(lpPC);

txtInfo.setTextColor(0xff0000ff);

txtInfo.setBackgroundColor(0xffffffff);

txtInfo.setText("Starting...");

txtInfo.setTextSize(15);

ScrollView scrollView = new ScrollView(this);

scrollView.setLayoutParams(lpPC);

scrollView.addView(txtInfo);

LinearLayout mainLayout = new LinearLayout(this);

mainLayout.setLayoutParams(lpPC);

mainLayout.setOrientation(LinearLayout.VERTICAL);

mainLayout.addView(subLayout);

mainLayout.addView(scrollView);

setContentView(mainLayout);

dbHelper = new DatabaseOpenHelper(this);

ContentResolver contentResolver = getContentResolver();

contentResolver.registerContentObserver(DBContentProvider.CONTENT_URI,

false, new ActionDBObserver(handler));

}

public void onClick(View view) {

if (view == btnRefresh) {

refreshRecord();

} else if (view == btnClear) {

clearRecord();

}

}

public void refreshRecord() {

dbHelper.openReadableDatabase();

String info = dbHelper.getAllOrderedList(DatabaseOpenHelper.DESC);

dbHelper.close();

if (info != null) {

txtInfo.setText(info);

} else {

txtInfo.setText("");

}

dbHelper.close();

}

public void clearRecord() {

dbHelper.openWritableDatabase();

dbHelper.clearRecord();

dbHelper.close();

}

private class ActionDBObserver extends ContentObserver {

private Handler handler;

public ActionDBObserver(Handler handler) {

super(handler);

this.handler = handler;

}

public void onChange(boolean selfChange) {

super.onChange(selfChange);

String[] projection = { "ACTION_NAME", "LAST_TIME", "COUNT" };

// String selection = "select * from ActionTable";

String sortOrder = "COUNT DESC";

// dbHelper.openReadableDatabase();

// Cursor cursor = dbHelper.query(projection, null, null,

// sortOrder);

Cursor cursor = managedQuery(DBContentProvider.CONTENT_URI,

projection, null, null, sortOrder);

String info = "";

String line = "";

int actionIdx = 0;

int timeIdx = 1;

int countIdx = 2;

while (cursor.moveToNext()) {

line += cursor.getString(actionIdx) + " ";

line += cursor.getString(timeIdx) + " ";

line += cursor.getString(countIdx) + "/n";

info += line;

line = "";

}

Message msg = new Message();

msg.obj = info;

handler.sendMessage(msg);

cursor.close();

// dbHelper.close();

SodinoOut.out("Database does changed!!!");

}

public boolean deliverSelfNotifications() {

return super.deliverSelfNotifications();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值