本文实例讲述了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的事件处理机制有两种:监听和回调。 A基于监听的事件处理 主要涉及三类对象:EventSource(事件源),Event(事件),EventListener(事件监听器) 监听机
本文向大家介绍Android 广播监听网络状态详解及实例代码,包括了Android 广播监听网络状态详解及实例代码的使用技巧和注意事项,需要的朋友参考一下 Android 广播监听网络状态 我们在做多线程下载的时候,或者是在加载h5界面的时候,常常会遇到网络状态不好或者断网的时候,在这或者当我们的应用程序启动没有退出的时候,我们就需要对网络状态监听加以判断。 这时候,我们一般情况下,两种方式进行处
我正在xamarin平台上开发一个android应用程序,我想在其中使用url播放音频,现在我可以使用url播放该文件。所以现在我想在遇到困难的地方执行以下任务。1) 根据文件缓冲区大小使用搜索栏播放文件。2) 无法在Xamarin中实现像OnCompletionListener这样的媒体播放器侦听器。 在这里,我想共享代码,只有播放音频没有搜索栏和媒体播放器听众。
本文向大家介绍详解Android短信的发送和广播接收实现短信的监听,包括了详解Android短信的发送和广播接收实现短信的监听的使用技巧和注意事项,需要的朋友参考一下 本文介绍了Android短信的发送和广播接收者实现短信的监听,要注意Android清单中权限的设置以及广播的注册监听实现,废话不多说,代码如下: 以下就是 Android清单的XML AndroidManifest.xml 发送短息
本文向大家介绍Android中ScrollView实现滑动距离监听器的方法,包括了Android中ScrollView实现滑动距离监听器的方法的使用技巧和注意事项,需要的朋友参考一下 前言 众所周知ScrollView是我们经常使用的一个UI控件,也许你在使用ScrollView的过程中会发现,当你想监听ScrollView滑动的距离时却没有合适的监听器!当然在API 23中有setOnScrol
本文向大家介绍Android BroadcastReceiver实现网络状态实时监听,包括了Android BroadcastReceiver实现网络状态实时监听的使用技巧和注意事项,需要的朋友参考一下 前言:最近公司项目重构,为了提高用户的体验,项目中要求添加当前网络状态的实时监听,以便在无网络状态时给用户友好的提醒并修改UI界面。本文将介绍使用四大组件之一的BroadcastReceiver实