本文实例讲述了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;/** * 本例子将记录可静态注册的广播被监听到的频度。<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 implementsButton.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();} }}
希望本文所述对大家的Android程序设计有所帮助。