Android中内容观察者的使用---- ContentObserver
来源:互联网 发布:程序员数学一定要好吗 编辑:程序博客网 时间:2024/05/21 07:49
ContentObserver类介绍
好了,基本讲解就介绍到这儿了。下面给出小DEMO的简单说明:
关于短信的更多内容可以参考该博客:<android中管理短信>
DEMO文件如下:
1、观察飞行模式状态的ContentObserver派生类,AirplaneContentObserver.java
- package
com.qin.contentobserver; -
- import
android.content.Context; - import
android.database.ContentObserver; - import
android.net.Uri; - import
android.os.Handler; - import
android.provider.*; - import
android.provider.Settings.SettingNotFoundException ; - import
android.util.Log; -
-
- //用来观察system表里飞行模式所在行是否发生变化
, “行”内容观察者 - public
class AirplaneContentObserver extendsContentObserver { -
-
private static String "AirplaneContentObserver"TAG = ; -
-
private static int MSG_AIRPLANE 1= ; -
-
private Context mContext; -
private Handler //此Handler用来更新UI线程mHandler ; -
-
public AirplaneContentObserver(Context context, Handler handler) { -
super(handler); -
mContext = context; -
mHandler = handler ; -
} -
-
-
@Override -
public void onChange( booleanselfChange) { -
Log.i(TAG, "-------------the airplane );mode has changed-------------" -
-
// 系统是否处于飞行模式下 -
try { -
int isAirplaneOpen = Settings.System.getInt(mContext.getContentResolver(), Settings.System.AIRPLANE_MODE_ON); -
Log.i(TAG, " isAirplaneOpen -----> " +isAirplaneOpen) ; -
mHandler.obtainMessage(MSG_AIRPLANE,isAirplaneOpen).sendToTarget() ; -
} -
catch (SettingNotFoundException e) { -
// TODO Auto-generated catch block -
e.printStackTrace(); -
} -
-
} -
- }
2、观察系统里短消息的数据库变化的ContentObserver派生类,SMSContentObserver.java
- package
com.qin.contentobserver; -
- import
android.content.Context; - import
android.database.ContentObserver; - import
android.database.Cursor; - import
android.net.Uri; - import
android.os.Handler; - import
android.util.Log; -
-
- //用来观察系统里短消息的数据库变化
”表“内容观察者,只要信息数据库发生变化,都会触发该ContentObserver 派生类 - public
class SMSContentObserver extendsContentObserver { -
private static String "SMSContentObserver";TAG = -
-
private int MSG_OUTBOXCONTENT 2= ; -
-
private Context mContext ; -
private Handler //更新UI线程mHandler ; -
-
public SMSContentObserver(Context context,Handler handler) { -
super(handler); -
mContext = context ; -
mHandler = handler ; -
} -
-
@Override -
public void onChange( booleanselfChange){ -
Log.i(TAG, "the sms );table has changed" -
-
//查询发件箱里的内容 -
Uri outSMSUri = Uri.parse("content://sms/sent") ; -
-
Cursor c = mContext.getContentResolver().query(outSMSUri, null, null, null,"date desc" ); -
if(c != null){ -
-
Log.i(TAG, "the number +c.getCount())of send is" ; -
-
StringBuilder sb = new StringBuilder() ; -
//循环遍历 -
while(c.moveToNext()){ - //
sb.append("发件人手机号码: "+c.getInt(c.getColumnIndex("address"))) - //
.append("信息内容: "+c.getInt(c.getColumnIndex("body"))) - //
.append("是否查看: "+c.getInt(c.getColumnIndex("read"))) - //
.append("发送时间: "+c.getInt(c.getColumnIndex("date"))) - //
.append("\n"); -
sb.append("发件人手机号码: " +c.getInt(c.getColumnIndex("address"))) -
.append("信息内容: " +c.getString(c.getColumnIndex("body"))) -
.append("\n"); -
} -
c.close(); -
mHandler.obtainMessage(MSG_OUTBOXCONTENT, sb.toString()).sendToTarget(); -
} -
} -
- }
- package
com.qin.contentobserver; -
- import
android.app.Activity; - import
android.database.Cursor; - import
android.net.Uri; - import
android.os.Bundle; - import
android.os.Handler; - import
android.os.Message; - import
android.provider.*; - import
android.util.Log; - import
android.widget.EditText; - import
android.widget.TextView; -
- public
class MainActivity extendsActivity { -
-
private TextView tvAirplane; -
private EditText etSmsoutbox; -
-
// Message 类型值 -
private static final int MSG_AIRPLANE 1;= -
private static final int MSG_OUTBOXCONTENT 2;= -
-
private AirplaneContentObserver airplaneCO; -
private SMSContentObserver smsContentObserver; -
-
-
@Override -
public void onCreate(Bundle savedInstanceState) { -
super.onCreate(savedInstanceState); -
setContentView(R.layout.main); -
-
tvAirplane = (TextView) findViewById(R.id.tvAirplane); -
etSmsoutbox = (EditText) findViewById(R.id.smsoutboxContent); -
-
// 创建两个对象 -
airplaneCO = new AirplaneContentObserver( this,mHandler); -
smsContentObserver = new SMSContentObserver( this,mHandler); -
-
//注册内容观察者 -
registerContentObservers () ; -
} -
-
private void registerContentObservers () { -
// 通过调用getUriFor 方法获得 system表里的"飞行模式"所在行的Uri -
Uri airplaneUri = Settings.System.getUriFor(Settings.System.AIRPLANE_MODE_ON); -
// 注册内容观察者 -
getContentResolver().registerContentObserver(airplaneUri, false, airplaneCO); -
// ”表“内容观察者 ,通过测试我发现只能监听此Uri -----> content://sms -
// 监听不到其他的Uri 比如说 content://sms/outbox -
Uri smsUri = Uri.parse("content://sms"); -
getContentResolver().registerContentObserver(smsUri, true,smsContentObserver); -
} -
-
private Handler newmHandler = Handler() { -
-
public void handleMessage(Message msg) { -
-
System.out.println("---mHanlder----"); -
switch (msg.what) { -
case MSG_AIRPLANE: -
int isAirplaneOpen = (Integer) msg.obj; -
if (isAirplaneOpen 0)!= -
tvAirplane.setText("飞行模式已打开"); -
else if (isAirplaneOpen 0)== -
tvAirplane.setText("飞行模式已关闭"); -
break; -
case MSG_OUTBOXCONTENT: -
String outbox = (String) msg.obj; -
etSmsoutbox.setText(outbox); -
break; -
default: -
break; -
} -
} -
}; - }
- Android中内容观察者的使用---- ContentObserver
- Android中内容观察者的使用---- ContentObserver
- Android中内容观察者的使用---- ContentObserver类详解
- Android中内容观察者的使用---- ContentObserver类详解
- Android中内容观察者的使用---- ContentObserver类详解
- Android中内容观察者的使用---- ContentObserver类详解
- Android中内容观察者的使用---- ContentObserver类详解
- Android中内容观察者的使用---- ContentObserver类详解
- Android中内容观察者的使用---- ContentObserver类详解
- Android中内容观察者的使用---- ContentObserver类详解
- Android中内容观察者的使用---- ContentObserver类详解
- Android中内容观察者的使用---- ContentObserver类详解
- Android中内容观察者的使用---- ContentObserver类详解
- Android中内容观察者的使用---- ContentObserver类详解
- Android中内容观察者的使用---- ContentObserver类详解
- Android中内容观察者的使用---- ContentObserver类详解
- Android中内容观察者的使用---- ContentObserver类详解
- Android中内容观察者的使用---- ContentObserver类详解
- 如何看懂源代码--(分析源代码方法)…
- source insight代码格式化
- android的logcat详细用法
- Java中ArrayList类的用法
- Java HashMap实现详解
- Android中内容观察者的使用---- ContentObserver
- Android Contacts 模式问题
- 异步后台同步数据
- android 飞行模式分析
- contacts 相关
- SIM卡联系人读取流程
- 【Android】Uri、UriMatcher、Cont…
- 浅析Android中的消息机制
- synchronized wait,notify