如何将SMS消息存储到SQLite数据库?

时间:2015-06-03 09:29:27

标签: android sms broadcastreceiver android-sqlite

我想在收到消息时将消息存储到SQLite数据库中。我知道我必须使用BroadcastReceiver来做到这一点。但我不知道该怎么做。调用onReceive()时是否可以将传入的短信存储到数据库中? 请帮帮我。

2 个答案:

答案 0 :(得分:5)

是的,您可以将消息存储到sqlite数据库中。

这是onReceive()方法代码: -

@Override
public void onReceive(Context context, Intent intent) {
    //—get the SMS message passed in—
    Bundle bundle = intent.getExtras();
    SmsMessage[] msgs = null;
    String messages = "";
    if (bundle != null) {
        //—retrieve the SMS message received—
        Object[] smsExtra = (Object[]) bundle.get("pdus");
        msgs = new SmsMessage[smsExtra.length];

        for (int i = 0; i < msgs.length; i++) {
            SmsMessage sms = SmsMessage.createFromPdu((byte[]) smsExtra[i]);
            //take out content from sms
            String body = sms.getMessageBody().toString();
            String address = sms.getOriginatingAddress();

            messages += "SMS from" + address + ":\n";
            messages += body + "\n";

            putSmsToDatabase(sms, context);
        }
        //—display the new SMS message—
        Toast.makeText(context, messages, Toast.LENGTH_SHORT).show();
    }
}

private void putSmsToDatabase(SmsMessage sms, Context context) {
    DataBaseHelper dataBaseHelper = new DataBaseHelper(context);

    SQLiteDatabase db = dataBaseHelper.getWritableDatabase();

    String mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());
    // Create SMS row
    ContentValues values = new ContentValues();

    values.put("address", sms.getOriginatingAddress().toString());
    values.put("date", mydate);
    values.put("body", sms.getMessageBody().toString());
    // values.put( READ, MESSAGE_IS_NOT_READ );
    // values.put( STATUS, sms.getStatus() );
    // values.put( TYPE, MESSAGE_TYPE_INBOX );
    // values.put( SEEN, MESSAGE_IS_NOT_SEEN );

    db.insert("datatable", null, values);

    db.close();
}

完整的教程是: -

http://androidexample.com/Incomming_SMS_Broadcast_Receiver_-_Android_Example/index.php?view=article_discription&aid=62&aaid=87

希望这可以帮助你:)

答案 1 :(得分:0)

您不需要将其保存在数据库中,您可以直接从

获取
Uri myMessage = Uri.parse("content://sms/");
        ContentResolver cr = this.getContentResolver();
        Cursor c = cr.query(myMessage, new String[] { "_id", "address", "date",
                "body", "read" }, null, null, null);
        startManagingCursor(c);

if (cursor.moveToNext()) {
            smsLogsIncoming = new HashSet<SmsLogData>();
            smsLogsOutGoing = new HashSet<SmsLogData>();
           // timeLastChecked = cursor.getLong(cursor.getColumnIndex("date"));
            simNumber = tm.getLine1Number();
            do {
                date = cursor.getLong(cursor.getColumnIndex("date"));
                address = cursor.getString(cursor.getColumnIndex("address"));
                body = cursor.getString(cursor.getColumnIndex("body"));
                String type = cursor.getString(cursor.getColumnIndex("type"));

        } while (cursor.moveToNext());
    }

    cursor.close();