標籤:contentprovider插入簡訊 讀取簡訊
上節課學習如何自己建立一個ContentProvider,以及用ContentResolver去操作ContentProvider。
今天我們用系統提供的ContentProvider。 先來個簡單的,讀取系統的簡訊內容。
根據上節知道,既然要讀取系統的簡訊,那就得先找到系統的簡訊在那裡?
先找到簡訊資料庫所在的問題,然後匯出,查看裡面的內容
既然已經分析好了,我們需要什麼,不需要什麼。 當然還需要知道簡訊提供者給第三方的URL。這個可以通過Android源碼查看。
那我們就寫一個程式,讀取系統中的簡訊
先看Activity中的代碼:
public class ReadMessageActivity extends Activity {Button readMessage;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_readmessage);readMessage = (Button)findViewById(R.id.button1);readMessage.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {Log.i("ReadMessageActivity", "讀取連絡人按鈕按下了");ContentResolver cResolver = getContentResolver();/** * uri: 是簡訊提供者的url,可以通過查看源碼獲得 * projection:需要查詢的幾個欄位,關心那個查詢按個就行 */Cursor cursor = cResolver.query(Uri.parse("content://sms"), new String[]{"address", "date", "type", "body"}, null, null, null);while(cursor.moveToNext()){String address = cursor.getString(cursor.getColumnIndex("address"));String date = cursor.getString(cursor.getColumnIndex("date"));String type = cursor.getString(cursor.getColumnIndex("type"));String body = cursor.getString(cursor.getColumnIndex("body"));Log.i("ReadMessageActivity", address + ";" + date + ";" + type + ";" + body);}}});}}
布局檔案就一個button,不做詳細解釋
列印結果為:
ok。 讀取系統簡訊就算是簡單的完成了。 接著我們往系統中寫一條簡訊
我們再加一個插入簡訊的按鈕,然後當按下時就插入一條簡訊:
代碼如下:
writeMessage.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// 寫簡訊按鈕被按下ContentResolver cResolver = getContentResolver();ContentValues values = new ContentValues();values.put("body", "對不起,您由於尾號為6789的手機號,欠費1w元,已停機!");values.put("address", 10086);values.put("date", System.currentTimeMillis());values.put("type", 1);cResolver.insert(Uri.parse("content://sms"), values);}});
結果如下:
可以看到資料庫中已經有信插入的資訊,同時對話方塊中也出現了。 所以插入簡訊就搞定了。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Android 四大組件學習之ContentProvider三