获取手机短信内容

简介: <p>原理是通过,contentprovider获取系统短信数据库中的字段信息而达到获取内容目的</p> <p>效果图如下:</p> <p><img src="http://img.my.csdn.net/uploads/201211/08/1352366558_2744.png" alt=""><br></p> <p>具体代码如下:</p> <div class="dp-high

原理是通过,contentprovider获取系统短信数据库中的字段信息而达到获取内容目的

效果图如下:


具体代码如下:

  1. package com.internal.message;  
  2.   
  3. import java.text.SimpleDateFormat;  
  4. import java.util.ArrayList;  
  5. import java.util.Date;  
  6. import java.util.HashMap;  
  7. import java.util.List;  
  8. import java.util.Map;  
  9.   
  10. import android.app.ListActivity;  
  11. import android.content.ContentResolver;  
  12. import android.database.Cursor;  
  13. import android.database.sqlite.SQLiteException;  
  14. import android.net.Uri;  
  15. import android.os.Bundle;  
  16. import android.provider.ContactsContract;  
  17. import android.provider.ContactsContract.CommonDataKinds.Phone;  
  18. import android.provider.ContactsContract.PhoneLookup;  
  19. import android.util.Log;  
  20. import android.widget.ListView;  
  21. import android.widget.SimpleAdapter;  
  22.   
  23. public class QureSms extends ListActivity {  
  24.   
  25.     ListView smslist=null;  //显示列表信息  
  26.     ArrayList<Map<String,Object>> mDatanew ArrayList<Map<String,Object>>();  
  27.     List<String> title=new ArrayList<String>(); //短信来源  
  28.     List<String> text=new ArrayList<String>();  //短信内容  
  29.         
  30.     @Override  
  31.     protected void onCreate(Bundle savedInstanceState) {  
  32.         super.onCreate(savedInstanceState);  
  33.         smslist=getListView();  
  34.         getSmsInPhone();  
  35.         int lengh = title.size();  
  36.         for(int i =0; i < lengh; i++) {  
  37.             Map<String,Object> item = new HashMap<String,Object>();  
  38.             item.put("title", title.get(i));  
  39.             item.put("text", text.get(i));  
  40.             mData.add(item);   
  41.         }  
  42.         SimpleAdapter adapter = new SimpleAdapter(this,mData,android.R.layout.simple_list_item_2,  
  43.                 new String[]{"title","text"},new int[]{android.R.id.text1,android.R.id.text2});  
  44.         setListAdapter(adapter);  
  45.           
  46.     }  
  47.     /**  
  48.      * 获取手机内所以短消息  
  49.      */  
  50.     private void getSmsInPhone(){     
  51.         final String SMS_URI_ALL   = "content://sms/";       
  52.         /*final String SMS_URI_INBOX = "content://sms/inbox";     
  53.         final String SMS_URI_SEND  = "content://sms/sent";     
  54.         final String SMS_URI_DRAFT = "content://sms/draft";  */   
  55.              
  56.         try{     
  57.             ContentResolver cr = getContentResolver();     
  58.             String[] projection = new String[]{"_id", "address", "person",      
  59.                     "body", "date", "type"};     
  60.             Uri uri = Uri.parse(SMS_URI_ALL);     
  61.             Cursor cur = cr.query(uri, projection, null, null, "date desc");     
  62.         
  63.             if (cur.moveToFirst()) {     
  64.                 String name;      
  65.                 String phoneNumber;            
  66.                 String smsbody;     
  67.                 String date;     
  68.                 String type;     
  69.                   
  70.             //    int nameColumn = cur.getColumnIndex("person");     
  71.                 int phoneNumberColumn = cur.getColumnIndex("address");     
  72.                 int smsbodyColumn = cur.getColumnIndex("body");     
  73.                 int dateColumn = cur.getColumnIndex("date");     
  74.                 int typeColumn = cur.getColumnIndex("type");     
  75.                   
  76.                do{     
  77.                     phoneNumber = cur.getString(phoneNumberColumn);     
  78.                //    name = cur.getString(nameColumn);    这样获取的联系认为空,所以我改用下面的方法获取  
  79.                     name=getPeopleNameFromPerson(phoneNumber);  
  80.                     smsbody = cur.getString(smsbodyColumn);     
  81.                          
  82.                     SimpleDateFormat dateFormat = new SimpleDateFormat(     
  83.                             "yyyy-MM-dd hh:mm:ss");     
  84.                     Date d = new Date(Long.parseLong(cur.getString(dateColumn)));     
  85.                     date = dateFormat.format(d);     
  86.                          
  87.                     int typeId = cur.getInt(typeColumn);     
  88.                     if(typeId == 1){     
  89.                         type = "接收";     
  90.                     } else if(typeId == 2){     
  91.                         type = "发送";     
  92.                     } else {     
  93.                         type = "草稿";     
  94.                     }     
  95.                       
  96.                     title.add(type+" "+date+'\n'+phoneNumber);  
  97.                     text.add(name+'\n'+smsbody);  
  98.                     
  99.                     if(smsbody == null) smsbody = "";       
  100.                 }   while(cur.moveToNext());  
  101.             }  
  102.             cur.close();  
  103.             cur=null;  
  104.         } catch(SQLiteException ex) {     
  105.             Log.e("SQLiteException in getSmsInPhone", ex.getMessage());     
  106.         }     
  107.           
  108.     }   
  109.     /**  
  110.      * 通过address手机号关联Contacts联系人的显示名字  
  111.      * @param address  
  112.      * @return  
  113.      */  
  114.             private String getPeopleNameFromPerson(String address){  
  115.                 if(address == null || address == ""){  
  116.                     return null;  
  117.                 }  
  118.                   
  119.                 String strPerson = "null";  
  120.                 String[] projection = new String[] {Phone.DISPLAY_NAME, Phone.NUMBER};  
  121.                   
  122.                 Uri uri_Person = Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI, address);  // address 手机号过滤  
  123.                 Cursor cursor = getContentResolver().query(uri_Person, projection, null, null, null);  
  124.                   
  125.                 if(cursor.moveToFirst()){  
  126.                     int index_PeopleName = cursor.getColumnIndex(Phone.DISPLAY_NAME);  
  127.                     String strPeopleName = cursor.getString(index_PeopleName);  
  128.                     strPerson = strPeopleName;  
  129.                 }  
  130.                 else{  
  131.                     strPerson = address;  
  132.                 }  
  133.                 cursor.close();  
  134.                 cursor=null;  
  135.                 return strPerson;  
  136.             }  
  137.               
  138.   
  139. }  


怎么样,其实就是获取数据库内容而以,是不是很容易,希望对大家有帮助。
目录
相关文章
|
4月前
|
XML Java Android开发
Android Studio开发之使用内容组件Content获取通讯信息讲解及实战(附源码 包括添加手机联系人和发短信)
Android Studio开发之使用内容组件Content获取通讯信息讲解及实战(附源码 包括添加手机联系人和发短信)
91 0
|
8月前
|
安全 Java 数据库
SpringSecurity-9-实现通过手机短信进行认证功能
SpringSecurity-9-实现通过手机短信进行认证功能
88 1
|
9月前
|
JavaScript API 容器
手机短信验证码登录功能的开发实录(机器识别码、短信限流、错误提示、发送验证码倒计时60秒)
手机短信验证码登录功能的开发实录(机器识别码、短信限流、错误提示、发送验证码倒计时60秒)
201 1
|
监控 小程序 网络安全
Python3利用Twilio(国际)以及腾讯云服务(国内)免费发送手机短信
短信服务验证服务已经不是什么新鲜事了,但是免费的手机短信服务却不多见,本次利用Python3.0基于Twilio和腾讯云服务分别来体验一下国际短信和国内短信接口。
Python3利用Twilio(国际)以及腾讯云服务(国内)免费发送手机短信
|
SQL JSON 数据格式
javaweb项目中实现手机短信登录
javaweb项目中实现手机短信登录手机号登录在现在的项目中用的场景非常多,实现起来也不难,今天我们就一起来通过演示实现登录过程。 <1>首先需要注册个第三方的账户,比如秒嘀科技等,然后拿到三个参数值:QUERAY_PATH ACCOUNT_SID AUTH_TOKEN<2>编写获取验证码类getMessage.
1874 0
|
安全
蠕虫Sexy View短信攻击诺基亚3250等手机
据Fortinet公司的研究人员警告称,一种新的攻击移动设备的互联网蠕虫正在通过短信服务迅速传播。 这种移动蠕虫名为“SymbOS/Yxes.Alworm”,但是也有人把这种蠕虫称作“Sexy View”,专门攻击采用“SymbianOS S60 3rd Edition FP 1”操作系统的移动设备,影响到诺基亚3250手机和其它具有互联网功能的移动设备。
786 0
|
监控 安全
卡巴斯基手机安全软件:让遗失手机远离“短信门”
近日,“女局长暧昧手机短信曝光”事件已经迅速占据了各媒体的头条,用户在唏嘘之余不由得捂紧了自己的手机——如何在手机丢失后保护个人隐私安全已成为绝大多数手机用户束手无策的问题。卡巴斯基手机安全软件反盗窃、隐私保护功能能够为手机用户做到远程锁定手机、远程删除隐私、进行SIM卡监控,全方位保证手机丢失后的个人信息安全。
1158 0
|
C# Windows 数据安全/隐私保护

热门文章

最新文章