- /**
- * 本例子将记录可静态注册的广播被监听到的频度。<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();
- }
- }
- }
复制代码 |
|