android ContentResolver获取手机电话号码和短信内容

发布时间 - 2026-01-11 02:25:37    点击率:

通过ContentResolver 获取到手机的联系人跟手机短信信息并显示出来,供大家参考,具体内容如下

1、实现的代码:

package com.example.phone; 
 
 
import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.Date; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
import android.net.Uri; 
import android.os.Bundle; 
import android.provider.ContactsContract; 
import android.provider.ContactsContract.PhoneLookup; 
import android.app.Activity; 
import android.content.ContentResolver; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteException; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 
 
 
public class MainActivity extends Activity implements OnClickListener{ 
 
  private TextView text; 
  private Button button; 
  private Button sms; 
  HashMap<String, Object> map = new HashMap<String, Object>(); 
  List<String> con = new ArrayList<String>(); 
  String msg;//联系人姓名+号码 
  @Override 
  protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main);  
    initUI();     
  } 
 
  private void initUI() { 
    // TODO Auto-generated method stub  
    text = (TextView)findViewById(R.id.text); 
    button = (Button)findViewById(R.id.button);//获取手机电话号码 
    button.setOnClickListener(this); 
    sms = (Button)findViewById(R.id.sms);//获取手机短信信息 
    sms.setOnClickListener(this); 
  } 
  @Override 
  public void onClick(View v) { 
    // TODO Auto-generated method stub 
    switch(v.getId()){ 
      case R.id.button: 
        getPhoneNumber();//获取手机电话号码 
        break; 
      case R.id.sms://获取手机短信内容 
        getSmsMessage(); 
        Map<String,Object> item = new HashMap<String,Object>(); 
        for(int i= 0;i<con.size();i++){ 
          text.setText(item.put("con", con.get(i))+"");//仅显示一条 
          System.out.println("ningshengcai:"+item.put("con", con.get(i)));//打印显示全部数据      
        } 
        break; 
      default : 
        break; 
    } 
  } 
  /** 
   * 获取手机联系人号码 
   */ 
  public void getPhoneNumber(){ 
    // smslist=getListView();  
    //得到ContentResolver对象   
    ContentResolver cr = getContentResolver();    
    //取得电话本中开始一项的光标   
    Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);   
    while (cursor.moveToNext())   
    {   
      // 取得联系人名字   
      int nameFieldColumnIndex = cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME);   
      String name = cursor.getString(nameFieldColumnIndex);   
      //name += (name);   
      // 取得联系人ID   
      String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));   
      Cursor phone = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, 
          ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = "+ contactId, null, null);     
      // 取得电话号码(可能存在多个号码)   
      while (phone.moveToNext())   
      {   
        String strPhoneNumber = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
        System.out.println(name+":"+strPhoneNumber);                     
        msg += name+":"+strPhoneNumber+"\n"; 
        text.setText(msg); 
      }       
      phone.close();   
    }   
    cursor.close();  
  } 
  /** 
   * 获取短信信息 
   * @return smsBuilder.toString() 
   */ 
  @SuppressWarnings("unused") 
  public String getSmsMessage(){   
     
    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";   
       
    StringBuilder smsBuilder = new StringBuilder();   
       
    try{   
      ContentResolver cr = getContentResolver();   
      String[] projection = new String[]{"_id", "address", "person",    
          "body", "date", "type"};   
      Uri uri = Uri.parse(SMS_URI_ALL);   
      Cursor cur = cr.query(uri, projection, null, null, "date desc");   
     
      if (cur.moveToFirst()) {   
        String name;    
        String phoneNumber;       
        String smsbody;   
        String date;   
        String type;   
          
        int nameColumn = cur.getColumnIndex("person"); //发送人  
        int phoneNumberColumn = cur.getColumnIndex("address");  //号码 
        int smsbodyColumn = cur.getColumnIndex("body");  //内容 
        int dateColumn = cur.getColumnIndex("date");  //时间 
        int typeColumn = cur.getColumnIndex("type");  //接收还是发送 
          
        do{   
          name = cur.getString(nameColumn);          
          phoneNumber = cur.getString(phoneNumberColumn);   
          smsbody = cur.getString(smsbodyColumn);   
             
          SimpleDateFormat dateFormat = new SimpleDateFormat(   
              "yyyy-MM-dd hh:mm:ss");   
          Date d = new Date(Long.parseLong(cur.getString(dateColumn)));   
          date = dateFormat.format(d);   
             
          int typeId = cur.getInt(typeColumn);   
          if(typeId == 1){   
            type = "接收";   
          } else if(typeId == 2){   
            type = "发送";   
          } else {   
            type = "";   
          }   
          //System.out.println("nsc :"+name+":"+phoneNumber+":"+smsbody+":"+date+":"+type +"\n"); 
          String smsmsg = name+":"+phoneNumber+":"+smsbody+":"+date+":"+type+"\n"; 
          con.add(smsmsg);          
          if(smsbody == null) smsbody = "";    
        }while(cur.moveToNext());   
      } else {   
        smsBuilder.append("no result!");   
      }   
          
      smsBuilder.append("getSmsInPhone has executed!");   
    } catch(SQLiteException ex) {   
      Log.d("SQLiteException in getSmsInPhone", ex.getMessage());   
    }   
    return smsBuilder.toString();   
  }   
} 

2、代码布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  xmlns:tools="http://schemas.android.com/tools" 
  android:layout_width="match_parent" 
  android:layout_height="match_parent" 
  android:orientation="vertical" 
  tools:context=".MainActivity" > 
   
  <Button  
    android:id="@+id/button" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/ph"/> 
  <Button  
    android:id="@+id/sms" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/sms"/> 
  <ScrollView 
    android:layout_width="fill_parent"  
    android:layout_height="wrap_content"> 
    <TextView 
      android:id="@+id/text" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"       
      android:text="@string/hello_world" /> 
         
  </ScrollView> 
 
</LinearLayout> 

3、需要用到的权限

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# android  # ContentResolver  # 电话号码  # 短信  # Android中ContentProvider和ContentResolver详解  # android利用ContentResolver访问者获取手机联系人信息  # android利用ContentResolver访问者获取手机短信信息  # Android使用ContentResolver搜索手机通讯录的方法  # android之ContentResolver与ContentProvider介绍  # Android ContentResolver使用说明  # 多个  # 具体内容  # 大家多多  # 送人  # initUI  # TODO  # activity_main  # method  # layout  # Auto  # findViewById  # id  # stub  # generated  # setOnClickListener  # msg  # Override  # con  # gt  # map 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 高端云建站费用究竟需要多少预算?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  进行网站优化必须要坚持的四大原则  如何快速搭建虚拟主机网站?新手必看指南  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  在Oracle关闭情况下如何修改spfile的参数  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  Claude怎样写结构化提示词_Claude结构化提示词写法【教程】  Laravel怎么上传文件_Laravel图片上传及存储配置  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  教你用AI将一段旋律扩展成一首完整的曲子  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  javascript日期怎么处理_如何格式化输出  js实现点击每个li节点,都弹出其文本值及修改  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  深圳网站制作平台,深圳市做网站好的公司有哪些?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  零基础网站服务器架设实战:轻量应用与域名解析配置指南  php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】  Java垃圾回收器的方法和原理总结  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  如何在IIS7上新建站点并设置安全权限?  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  如何快速搭建高效香港服务器网站?  如何快速配置高效服务器建站软件?  西安专业网站制作公司有哪些,陕西省建行官方网站?  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  香港服务器租用每月最低只需15元?  UC浏览器如何设置启动页 UC浏览器启动页设置方法  Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门  如何在万网自助建站中设置域名及备案?  html如何与html链接_实现多个HTML页面互相链接【互相】  java ZXing生成二维码及条码实例分享  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  高端智能建站公司优选:品牌定制与SEO优化一站式服务  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  如何用美橙互联一键搭建多站合一网站?  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例