欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

[Android]静态广播监听器,android监听器

来源: 开发者 投稿于  被查看 15266 次 评论:52

[Android]静态广播监听器,android监听器


<无详细内容>

1.[Java]代码

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;
/**
 * 本例子将记录可静态注册的广播被监听到的频度。<br/>
 * 1.建立一表{ACTION_NAME广播名称,LAST_TIME最近一次发生时间,COUNT总共记录到的次数}<br/>
 * 2.在ActionReceiver中监听广播,并记录。 <br/>
 * 3.在DBContentProvider中更新数据库记录<br/>
 * 4.在BroadcastActionRecordAct.ActionDBObserver中监听数据库的变化,
 * 并使用Handler机制将最新情况显示在txtInfo上。<br/>
 * 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("<NULL/>");
		}
		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();
		}
	}
}

用户评论