Android实现静态广播监听器的方法

所属分类: 软件编程 / Android 阅读数: 371
收藏 0 赞 0 分享

本文实例讲述了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 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();
  }
 }
}

希望本文所述对大家的Android程序设计有所帮助。

更多精彩内容其他人还在看

Retrofit2日志拦截器的使用

这篇文章主要介绍了Retrofit2日志拦截器的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Android创建外部lib库及自定义View的图文教程

这篇文章主要给大家介绍了关于Android创建外部lib库及自定义View的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Android分享微信小程序失败的一些事小结

这篇文章主要给大家介绍了关于Android分享微信小程序失败一些事,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Android分享微信小程序技巧之图片优化

这篇文章主要给大家介绍了关于Android分享微信小程序技巧之图片优化的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Android Viewpager实现无限循环轮播图

这篇文章主要为大家详细介绍了Android Viewpager实现无限循环轮播图,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android中的Bitmap序列化失败的解决方法

这篇文章主要介绍了Android中的Bitmap序列化失败的解决方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Android自定义通用标题栏CustomTitleBar

这篇文章主要为大家详细介绍了Android自定义通用标题栏CustomTitleBar,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android组合控件自定义标题栏

这篇文章主要为大家详细介绍了Android组合控件自定义标题栏,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android自定义复合控件实现通用标题栏

这篇文章主要为大家详细介绍了Android自定义复合控件实现通用标题栏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

ExpandableListView实现简单二级列表

这篇文章主要为大家详细介绍了ExpandableListView实现简单二级列表,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享
查看更多