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

 更新时间:2015年07月14日 16:55:59   作者:鉴客  
这篇文章主要介绍了Android实现静态广播监听器的方法,涉及Android的广播机制与记录监听广播信息的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了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程序设计有所帮助。

相关文章

  • Android的日志系统分层与logcat使用

    Android的日志系统分层与logcat使用

    今天小编就为大家分享一篇关于Android的日志系统分层与logcat使用的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • Android给布局、控件加阴影效果的示例代码

    Android给布局、控件加阴影效果的示例代码

    本篇文章主要介绍了Android给布局、控件加阴影效果的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Android利用POI实现将图片插入到Excel

    Android利用POI实现将图片插入到Excel

    这篇文章主要为大家详细介绍了Android如何利用POI实现将图片插入到Excel,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-11
  • Android MediaPlayer 音频倍速播放 调整播放速度问题

    Android MediaPlayer 音频倍速播放 调整播放速度问题

    这篇文章主要介绍了Android MediaPlayer 音频倍速播放,调整播放速度,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • Android高仿微信对话列表滑动删除效果

    Android高仿微信对话列表滑动删除效果

    这篇文章主要为大家详细介绍了Android高仿微信对话列表滑动删除效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • 安卓(Android)开发之统计App启动时间

    安卓(Android)开发之统计App启动时间

    当大家要改善APP启动速度优化的时候,首先要知道App的启动时间,那么改如何统计时间呢,下面我们一起来看看。
    2016-08-08
  • Android实现屏幕录制功能

    Android实现屏幕录制功能

    这篇文章主要为大家详细介绍了Android实现屏幕录制功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • Android之RecycleView实现指定范围的拖动效果

    Android之RecycleView实现指定范围的拖动效果

    这篇文章主要介绍了Android之RecycleView实现指定范围的拖动效果的实例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Android图片实现压缩处理的实例代码

    Android图片实现压缩处理的实例代码

    本篇文章主要介绍了Android图片实现压缩处理的实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • Android中Notification用法实例总结

    Android中Notification用法实例总结

    这篇文章主要介绍了Android中Notification用法,以实例形式较为详细的分析并总结了Notification的功能与使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10

最新评论