日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 短信解析

發布時間:2023/11/29 Android 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 短信解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

URI主要有:

content://sms/? ? ? ? ? ? ? ?所有短信
content://sms/inbox??? ??? 收件箱
content://sms/sent ? ? ? ? ?已發送
content://sms/draft ? ? ? ? 草稿
content://sms/outbox??? ?發件箱
content://sms/failed ? ? ? 發送失敗
content://sms/queued??? 待發送列表



sms主要結構: ?
  • _id => 短消息序號 如100??
  • thread_id => 對話的序號 如100??
  • address => 發件人地址,手機號.如+8613811810000??
  • person => 發件人,返回一個數字就是聯系人列表里的序號,陌生人為null??
  • date => 日期??long型。如1256539465022??
  • protocol => 協議?0?SMS_RPOTO,?1?MMS_PROTO ??
  • read => 是否閱讀?0未讀,?1已讀 ??
  • status => 狀態 -1接收,0?complete,?64?pending,?128?failed ??
  • type => 類型?1是接收到的,2是已發出 ??
  • body => 短消息內容 ??
  • service_center => 短信服務中心號碼編號。如+8613800755500 ?
  • String[] projection = new String[]{"address", "body"};
    Cursor cursor = getContentResolver().query(uri, projection, "where .." new String[]{"", ""}, "order by ..")





    Android短信存儲數據庫

    偶然發現了Android源碼中的一個類MmsSmsDatabaseHelper.java,原來android將所有的短信信息都存入了mmssms.db中。

    公開的SDK中沒有這個類,不能直接使用。于是自己寫了一個SQLiteOpenHelper,但是查詢的時候發生SQL異常。看來不能為所欲為了,不過據網上資料介紹可以拷貝db文件來實現短信數據備份。


    MmsSmsDatabaseHelper.java在Android源碼中的路徑:

    packages/providers/TelephonyProvider/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java


    sms數據庫中的字段如下:

    _id?????????????? 一個自增字段,從1開始
    thread_id??? 序號,同一發信人的id相同
    address??? ? 發件人手機號碼
    person??????? 聯系人列表里的序號,陌生人為null?
    date??????????? 發件日期
    protocol??? ? 協議,分為:?0?SMS_RPOTO,?1?MMS_PROTO??
    read?????????? 是否閱讀?0未讀,?1已讀??
    status???????? 狀態?-1接收,0?complete,?64?pending,?128?failed?
    type?????
    ??? ALL??? = 0;
    ??? INBOX? = 1;
    ??? SENT?? = 2;
    ??? DRAFT? = 3;
    ??? OUTBOX = 4;
    ??? FAILED = 5;
    ??? QUEUED = 6;?
    body??? ? ? ? ? ? ? ? ?? 短信內容
    service_center???? 短信服務中心號碼編號
    subject??? ? ? ? ? ? ? ? 短信的主題
    reply_path_present???? TP-Reply-Path
    locked? ??


    sms數據庫表字段類型的源碼:


    [java]? view plain copy print ?
  • private?void?createSmsTables(SQLiteDatabase?db)?{??
  • ????????//?N.B.:?Whenever?the?columns?here?are?changed,?the?columns?in??
  • ????????//?{@ref?MmsSmsProvider}?must?be?changed?to?match.??
  • ????????db.execSQL("CREATE?TABLE?sms?("?+??
  • ???????????????????"_id?INTEGER?PRIMARY?KEY,"?+??
  • ???????????????????"thread_id?INTEGER,"?+??
  • ???????????????????"address?TEXT,"?+??
  • ???????????????????"person?INTEGER,"?+??
  • ???????????????????"date?INTEGER,"?+??
  • ???????????????????"date_sent?INTEGER?DEFAULT?0,"?+??
  • ???????????????????"protocol?INTEGER,"?+??
  • ???????????????????"read?INTEGER?DEFAULT?0,"?+??
  • ???????????????????"status?INTEGER?DEFAULT?-1,"?+?//?a?TP-Status?value??
  • ??????????????????????????????????????????????????//?or?-1?if?it??
  • ??????????????????????????????????????????????????//?status?hasn't??
  • ??????????????????????????????????????????????????//?been?received??
  • ???????????????????"type?INTEGER,"?+??
  • ???????????????????"reply_path_present?INTEGER,"?+??
  • ???????????????????"subject?TEXT,"?+??
  • ???????????????????"body?TEXT,"?+??
  • ???????????????????"service_center?TEXT,"?+??
  • ???????????????????"locked?INTEGER?DEFAULT?0,"?+??
  • ???????????????????"error_code?INTEGER?DEFAULT?0,"?+??
  • ???????????????????"seen?INTEGER?DEFAULT?0"?+??
  • ???????????????????");");??
  • ....??
  • }??

  • packages/providers/TelephonyProvider/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java


    聯系人為空

    短信數據庫里面如果你是先受到陌生短信之后再把陌生人添加到聯系人列表的話,短信數據庫里面的person字段就為null,如果你是先添加聯系人再發短 信的話,短信數據庫里面的person字段就不為空了,所以你要是想通過短信數據庫里的字段取得聯系人的其他信息的話,只能通過地址來取。

    實例:
  • ?public?String?getSmsInPhone()?{??
  • ????????final?String?SMS_URI_ALL?=?"content://sms/";??
  • ????????final?String?SMS_URI_INBOX?=?"content://sms/inbox";??
  • ????????final?String?SMS_URI_SEND?=?"content://sms/sent";??
  • ????????final?String?SMS_URI_DRAFT?=?"content://sms/draft";??
  • ????????final?String?SMS_URI_OUTBOX?=?"content://sms/outbox";??
  • ????????final?String?SMS_URI_FAILED?=?"content://sms/failed";??
  • ????????final?String?SMS_URI_QUEUED?=?"content://sms/queued";??
  • ??
  • ????????StringBuilder?smsBuilder?=?new?StringBuilder();??
  • ??
  • ????????try?{??
  • ????????????Uri?uri?=?Uri.parse(SMS_URI_ALL);??
  • ????????????String[]?projection?=?new?String[]?{?"_id",?"address",?"person",?"body",?"date",?"type"?};??
  • ????????????Cursor?cur?=?getContentResolver().query(uri,?projection,?null,?null,?"date?desc");??????//?獲取手機內部短信??
  • ??
  • ????????????if?(cur.moveToFirst())?{??
  • ????????????????int?index_Address?=?cur.getColumnIndex("address");??
  • ????????????????int?index_Person?=?cur.getColumnIndex("person");??
  • ????????????????int?index_Body?=?cur.getColumnIndex("body");??
  • ????????????????int?index_Date?=?cur.getColumnIndex("date");??
  • ????????????????int?index_Type?=?cur.getColumnIndex("type");??
  • ??
  • ????????????????do?{??
  • ????????????????????String?strAddress?=?cur.getString(index_Address);??
  • ????????????????????int?intPerson?=?cur.getInt(index_Person);??
  • ????????????????????String?strbody?=?cur.getString(index_Body);??
  • ????????????????????long?longDate?=?cur.getLong(index_Date);??
  • ????????????????????int?intType?=?cur.getInt(index_Type);??
  • ??
  • ????????????????????SimpleDateFormat?dateFormat?=?new?SimpleDateFormat("yyyy-MM-dd?hh:mm:ss");??
  • ????????????????????Date?d?=?new?Date(longDate);??
  • ????????????????????String?strDate?=?dateFormat.format(d);??
  • ??
  • ????????????????????String?strType?=?"";??
  • ????????????????????if?(intType?==?1)?{??
  • ????????????????????????strType?=?"接收";??
  • ????????????????????}?else?if?(intType?==?2)?{??
  • ????????????????????????strType?=?"發送";??
  • ????????????????????}?else?{??
  • ????????????????????????strType?=?"null";??
  • ????????????????????}??
  • ??
  • ????????????????????smsBuilder.append("[?");??
  • ????????????????????smsBuilder.append(strAddress?+?",?");??
  • ????????????????????smsBuilder.append(intPerson?+?",?");??
  • ????????????????????smsBuilder.append(strbody?+?",?");??
  • ????????????????????smsBuilder.append(strDate?+?",?");??
  • ????????????????????smsBuilder.append(strType);??
  • ????????????????????smsBuilder.append("?]\n\n");??
  • ????????????????}?while?(cur.moveToNext());??
  • ??
  • ????????????????if?(!cur.isClosed())?{??
  • ????????????????????cur.close();??
  • ????????????????????cur?=?null;??
  • ????????????????}??
  • ????????????}?else?{??
  • ????????????????smsBuilder.append("no?result!");??
  • ????????????}?//?end?if??
  • ??
  • ????????????smsBuilder.append("getSmsInPhone?has?executed!");??
  • ??
  • ????????}?catch?(SQLiteException?ex)?{??
  • ????????????Log.d("SQLiteException?in?getSmsInPhone",?ex.getMessage());??
  • ????????}??
  • ??
  • ????????return?smsBuilder.toString();??
  • ????} ?
  • 轉載于:https://my.oschina.net/tingzi/blog/103717

    總結

    以上是生活随笔為你收集整理的Android 短信解析的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。