我正在开发一个应用程序,它将所有传入和传出的短信存储在SD卡中的文本文件中。

我可以使用广播接收器收听传入的消息。我发现很难收听传出的SMS。

我在某种程度上知道需要设置发送箱或发件箱上的内容观察者,但是我不知道该怎么做。

如何才能做到这一点?

最佳答案

基本上,您必须注册一个内容观察者...类似这样的东西:

ContentResolver contentResolver = context.getContentResolver();
contentResolver.registerContentObserver(Uri.parse("content://sms/out"),true, yourObserver);
yourObserver是一个看起来像这样的对象(new YourObserver(new Handler())):
class YourObserver extends ContentObserver {

    public YourObserver(Handler handler) {
        super(handler);
    }

    @Override
    public void onChange(boolean selfChange) {
        super.onChange(selfChange);
        // save the message to the SD card here
    }
}

那么,您究竟如何获得SMS的内容?您必须使用Cursor:
// save the message to the SD card here
Uri uriSMSURI = Uri.parse("content://sms/out");
Cursor cur = this.getContentResolver().query(uriSMSURI, null, null, null, null);
 // this will make it point to the first record, which is the last SMS sent
cur.moveToNext();
String content = cur.getString(cur.getColumnIndex("body"));
// use cur.getColumnNames() to get a list of all available columns...
// each field that compounds a SMS is represented by a column (phone number, status, etc.)
// then just save all data you want to the SDcard :)

10-08 17:53