我的家園

          我的家園

          Android SMS(一) —— 讀取短信

          Posted on 2012-04-15 16:37 zljpp 閱讀(274) 評論(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          已發(fā)送
          content://sms/draft         草稿
          content://sms/outbox     發(fā)件箱
          content://sms/failed       發(fā)送失敗
          content://sms/queued    待發(fā)送列表


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


          Android短信存儲數(shù)據(jù)庫

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

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

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

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


          sms數(shù)據(jù)庫中的字段如下:

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


          sms數(shù)據(jù)庫表字段類型的源碼:

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


          聯(lián)系人為空

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



          參考推薦:

          Android SMS Messaging 



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


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 贞丰县| 昌平区| 康保县| 黄山市| 双柏县| 杭州市| 梨树县| 宁化县| 独山县| 九寨沟县| 锡林浩特市| 托里县| 上栗县| 萍乡市| 光山县| 长沙市| 通化市| 兴国县| 牙克石市| 丰镇市| 阿尔山市| 中西区| 双柏县| 江山市| 洱源县| 吉水县| 久治县| 霍城县| 石台县| 涪陵区| 库伦旗| 武隆县| 格尔木市| 永兴县| 志丹县| 阜城县| 友谊县| 重庆市| 屏东市| 大庆市| 巴彦县|