我的家園

          我的家園

          Android SMS(一) —— 讀取短信

          Posted on 2012-04-15 16:37 zljpp 閱讀(275) 評論(0)  編輯  收藏

          Android SMS Read

          AndroidManifest.xml 權限

           記得在AndroidManifest.xml中加入android.permission.READ_SMS這個permission

          <uses-permission android:name="android.permission.READ_SMS" />


          運行結果:


          代碼示例



          URI主要有:

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


          sms主要結構: 
          1. _id => 短消息序號 如100  
          2. thread_id => 對話的序號 如100  
          3. address => 發件人地址,手機號.如+8613811810000  
          4. person => 發件人,返回一個數字就是聯系人列表里的序號,陌生人為null  
          5. date => 日期  long型。如1256539465022  
          6. protocol => 協議 0 SMS_RPOTO, 1 MMS_PROTO   
          7. read => 是否閱讀 0未讀, 1已讀   
          8. status => 狀態 -1接收,0 complete, 64 pending, 128 failed   
          9. type => 類型 1是接收到的,2是已發出   
          10. body => 短消息內容   
          11. 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數據庫表字段類型的源碼:

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


          聯系人為空

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



          參考推薦:

          Android SMS Messaging 



          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 西乌珠穆沁旗| 峨边| 泰安市| 南靖县| 桐梓县| 库尔勒市| 东台市| 芜湖县| 罗定市| 泉州市| 泌阳县| 松滋市| 天等县| 夏河县| 台南县| 文昌市| 宁都县| 慈溪市| 巴彦淖尔市| 新巴尔虎左旗| 广州市| 恩施市| 滦平县| 昌江| 兴义市| 乃东县| 嘉鱼县| 饶河县| 上林县| 河曲县| 日喀则市| 武穴市| 新竹市| 阜城县| 九江市| 黄梅县| 崇州市| 大宁县| 江都市| 密山市| 饶河县|