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实现左滑删除列表功能

    Android实现左滑删除列表功能

    这篇文章主要为大家详细介绍了Android自定义左滑删除列表功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Android中Glide获取图片Path、Bitmap用法详解

    Android中Glide获取图片Path、Bitmap用法详解

    这篇文章主要介绍了Android中Glide获取图片Path、Bitmap用法以及代码分析,需要的朋友们参考一下吧。
    2017-12-12
  • Android自定义View的一些独家技巧

    Android自定义View的一些独家技巧

    很多人把自定义View想得复杂了,以为有多高深,主要还是没有实践过,下面这篇文章主要给大家介绍了关于Android自定义View的一些独家技巧,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • Android实现view拖动到任意位置

    Android实现view拖动到任意位置

    这篇文章主要为大家详细介绍了Android实现view拖动到任意位置,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • Android自定义SeekBar实现滑动验证且不可点击

    Android自定义SeekBar实现滑动验证且不可点击

    这篇文章主要为大家详细介绍了Android自定义SeekBar实现滑动验证且不可点击,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • Android Studio实现简单绘图板

    Android Studio实现简单绘图板

    这篇文章主要为大家详细介绍了Android Studio实现简单绘图板,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • android双缓冲技术实例详解

    android双缓冲技术实例详解

    这篇文章主要介绍了android双缓冲技术实例详解,需要的朋友可以参考下
    2014-07-07
  • Flutter Future异步操作详细讲解

    Flutter Future异步操作详细讲解

    这篇文章主要介绍了Flutter Future异步操作,future是Future类的对象,其表示一个T类型的异步操作结果。如果异步操作不需要结果,则future的类型可为Future
    2023-03-03
  • Android 消息队列模型详解及实例

    Android 消息队列模型详解及实例

    这篇文章主要介绍了 Android 消息队列模型详解及实例的相关资料,需要的朋友可以参考下
    2017-04-04
  • Android应用禁止屏幕休眠的3种方法

    Android应用禁止屏幕休眠的3种方法

    这篇文章主要为大家详细介绍了Android应用禁止屏幕休眠的3种方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11

最新评论