Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何将SMS消息存储到SQLite数据库?_Android_Sms_Broadcastreceiver_Android Sqlite - Fatal编程技术网

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

Android 如何将SMS消息存储到SQLite数据库?,android,sms,broadcastreceiver,android-sqlite,Android,Sms,Broadcastreceiver,Android Sqlite,我想在收到消息时将消息存储到SQLite数据库中。我知道我必须使用BroadcastReceiver来执行此操作。但我不知道怎么做。调用onReceive()时,是否可以将传入的sms存储到数据库中? 请帮助我。是的,您可以将消息存储到sqlite数据库中 这是onReceive()方法代码:- @Override public void onReceive(Context context, Intent intent) { //—get the SMS message passed i

我想在收到消息时将消息存储到
SQLite
数据库中。我知道我必须使用
BroadcastReceiver
来执行此操作。但我不知道怎么做。调用
onReceive()
时,是否可以将传入的sms存储到数据库中?

请帮助我。

是的,您可以将消息存储到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();
}
@覆盖
公共void onReceive(上下文、意图){
//-获取传入的SMS消息-
Bundle=intent.getExtras();
SmsMessage[]msgs=null;
字符串消息=”;
if(bundle!=null){
//-检索收到的SMS消息-
对象[]smsExtra=(对象[])bundle.get(“PDU”);
msgs=新SMS消息[smsExtra.length];
对于(int i=0;i
完整的教程是:-


希望这对您有所帮助:)

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

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();
urimymessage=Uri.parse(“content://sms/");
ContentResolver cr=this.getContentResolver();
游标c=cr.query(myMessage,新字符串[]{“\u id”,“address”,“date”,
“body”,“read”},null,null,null);
开始管理光标(c);
if(cursor.moveToNext()){
smsLogsIncoming=新哈希集();
SMSLOGSOUTING=新哈希集();
//timeLastChecked=cursor.getLong(cursor.getColumnIndex(“日期”);
simNumber=tm.getLine1Number();
做{
date=cursor.getLong(cursor.getColumnIndex(“日期”);
地址=cursor.getString(cursor.getColumnIndex(“地址”);
body=cursor.getString(cursor.getColumnIndex(“body”);
字符串类型=cursor.getString(cursor.getColumnIndex(“类型”);
}while(cursor.moveToNext());
}
cursor.close();

我还使用了
ContentResolver
从特定号码获取收件箱消息。为了维护包含更多字段的客户维护应用程序,我需要存储该字段。我也需要将它们插入数据库。你说得对,但他想将消息保存到数据库,所以我建议他学习教程。我已经使用了
ContentResolver
,并在
ListView
上显示了消息。这次我不想在任何事情上表现出来。我必须向sms数据中添加更多字段,并将其存储在单独的表中。