黑马程序员技术交流社区
标题:
[Android]静态广播监听器
[打印本页]
作者:
y1787257661
时间:
2015-1-8 19:31
标题:
[Android]静态广播监听器
/**
* 本例子将记录可静态注册的广播被监听到的频度。<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();
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2