Android学习篇章39-ContentProvider-获取短信数据

来源:互联网 发布:vmware esx 网络名 编辑:程序博客网 时间:2024/06/03 18:49

Mainactivity:

public class MainActivity extends Activity {SmsObservor  smswatch=null;//Handler 在Android中主要是负责子线程与主线程间消息传递//Handler一般是在主线程中定义    子线程中使用Handler往主线程发送消息,同时UI变更Handler handler=new Handler(){@Overridepublic void handleMessage(Message msg) {if(msg.what==0x101){  Cursor c=MainActivity.this.getContentResolver().query(Uri.parse("content://sms"), null, null,null, null);  if(c!=null&&c.moveToFirst())  { String[] cols= c.getColumnNames(); for(String str:cols) { Log.i("test", "name="+str); }  String phone=c.getString(c.getColumnIndex("address"));     String subject=c.getString(c.getColumnIndex("subject"));     String body=c.getString(c.getColumnIndex("body"));                  Log.i("test", "phone="+phone+" subject="+subject+" body="+body);  }  if(c!=null) c.close();}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void clickBtn(View view){int id=view.getId();if(id==R.id.btn1){//注册短信数据库的观察者smswatch=new SmsObservor(handler);//uri是watch所监视的数据库地址        this.getContentResolver().registerContentObserver(Uri.parse("content://sms"), true, smswatch);}else{if(smswatch!=null)       this.getContentResolver().unregisterContentObserver(smswatch);}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}


ContentOberver:


public class SmsObservor extends ContentObserver {Handler handler=null;public SmsObservor(Handler handler) {super(handler);this.handler=handler;}@SuppressLint("NewApi")@Overridepublic void onChange(boolean selfChange, Uri uri) {handler.sendEmptyMessage(0x101);Log.i("test", "短信数据库发生改变 uri="+uri);}@Overridepublic void onChange(boolean selfChange) {onChange(selfChange,null);}}


权限:    <uses-permission android:name="android.permission.READ_SMS"/>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context=".MainActivity" >    <Button android:id="@+id/btn1"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:onClick="clickBtn"        android:text="开启短信监控" />        <Button android:id="@+id/btn1"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:onClick="clickBtn"        android:text="关闭短信监控" />    </LinearLayout>



原创粉丝点击