我的家園

          我的家園

          Android SMS(一) —— 讀取短信

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

          Android SMS Read

          AndroidManifest.xml 權(quán)限

           記得在AndroidManifest.xml中加入android.permission.READ_SMS這個(gè)permission

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


          運(yùn)行結(jié)果:


          代碼示例



          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主要結(jié)構(gòu): 
          1. _id => 短消息序號(hào) 如100  
          2. thread_id => 對(duì)話(huà)的序號(hào) 如100  
          3. address => 發(fā)件人地址,手機(jī)號(hào).如+8613811810000  
          4. person => 發(fā)件人,返回一個(gè)數(shù)字就是聯(lián)系人列表里的序號(hào),陌生人為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 => 類(lèi)型 1是接收到的,2是已發(fā)出   
          10. body => 短消息內(nèi)容   
          11. service_center => 短信服務(wù)中心號(hào)碼編號(hào)。如+8613800755500  
          String[] projection = new String[]{"address", "body"};
          Cursor cursor = getContentResolver().query(uri, projection, "where .." new String[]{"", ""}, "order by ..")


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

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

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

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

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


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

          _id               一個(gè)自增字段,從1開(kāi)始
          thread_id    序號(hào),同一發(fā)信人的id相同
          address      發(fā)件人手機(jī)號(hào)碼
          person        聯(lián)系人列表里的序號(hào),陌生人為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     短信服務(wù)中心號(hào)碼編號(hào)
          subject                  短信的主題
          reply_path_present     TP-Reply-Path
          locked    


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

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


          聯(lián)系人為空

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



          參考推薦:

          Android SMS Messaging 



          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 安达市| 罗定市| 南召县| 景德镇市| 木兰县| 永兴县| 工布江达县| 蕉岭县| 夏邑县| 阿坝| 石家庄市| 英吉沙县| 新野县| 太康县| 宝丰县| 项城市| 遂川县| 宜黄县| 屏边| 呼和浩特市| 唐河县| 兰考县| 克什克腾旗| 通道| 乡城县| 连城县| 饶阳县| 内江市| 凤凰县| 青田县| 苗栗市| 新密市| 台北市| 罗源县| 蒙自县| 平陆县| 齐齐哈尔市| 乐业县| 罗甸县| 伊金霍洛旗| 松江区|