《Android 內容觀察者的原理》中介紹了內容觀察者的一些基本原理,並做了簡單的實戰,本文接著進一步做一個小項目實戰 添加許可權:android.permission.READ_SMS 運行代碼後,只要簡訊發生變化,都會提示,並且簡訊的內容會自動保存在XXX.abc文件中 ...
《Android 內容觀察者的原理》中介紹了內容觀察者的一些基本原理,並做了簡單的實戰,本文接著進一步做一個小項目實戰
package com.wuyudong.smslistener; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.app.Activity; import android.database.ContentObserver; import android.database.Cursor; import android.view.Menu; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Uri uri = Uri.parse("content://sms"); getContentResolver().registerContentObserver(uri, true, new MyObserver(new Handler())); } private class MyObserver extends ContentObserver { public MyObserver(Handler handler) { super(handler); } @Override public void onChange(boolean selfChange) { System.out.println("簡訊資料庫發生變化了。"); Uri uri = Uri.parse("content://sms"); Cursor cursor = getContentResolver().query(uri, new String[] { "body", "address", "date", "type" }, null, null, "_id desc"); cursor.moveToFirst(); String body = cursor.getString(0); String address = cursor.getString(1); String date = cursor.getString(2); String type = cursor.getString(3); try { File file = new File(getFilesDir(), "XXX.abc"); FileOutputStream fos = new FileOutputStream(file, true); fos.write(("內容: " + body + "--地址" + address + "--時間: " + date + "--類型" + type + "\n").getBytes()); fos.close(); } catch (Exception e) { e.printStackTrace(); } super.onChange(selfChange); } } }
添加許可權:android.permission.READ_SMS
運行代碼後,只要簡訊發生變化,都會提示,並且簡訊的內容會自動保存在XXX.abc文件中