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

通过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" /> 

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

(0)

相关推荐

  • Android中ContentProvider和ContentResolver详解

    Android中ContentProvider和ContentResolver详解 在Android中,我们的应用有的时候需要对外提供数据接口,可以有如下几种方法: 1)AIDL 2)Broadcast 3)ContentProvider. 使用AIDL需要我们编写AIDL接口以及实现,而且对方也要有相应的接口描述,有点麻烦:使用Broadcast,我们不需要任何接口描述,只要协议文档就可以了,但是有点不好就是,这种方式不直接而且是异步的:使用ContentProvider我们不需要接口描述,只

  • android利用ContentResolver访问者获取手机联系人信息

    利用ContentResolver内容访问者,获取手机联系人信息我做了两种不同的做法.第一种,直接获取所有手机联系人信息,展示在ListView中.第二种,通过Butten按钮跳转到系统的手机联系人界面,单个获取手机联系人信息,展示在ListView中,结果如下: 第一种: 第二种: 第一种:直接获取所有手机联系人信息 首先需要在AndroidManifest.xml文件中添加权限: <uses-permission android:name="android.permission.REA

  • Android ContentResolver使用说明

    Android是如何实现应用程序之间数据共享的?一个应用程序可以将自己的数据完全暴露出去,外界更本看不到,也不用看到这个应用程序暴露的数据是如何存储的,或者是使用数据库还是使用文件,还是通过网上获得,这些一切都不重要,重要的是外界可以通过这一套标准及统一的接口和这个程序里的数据打交道,例如:添加(insert).删除(delete).查询(query).修改(update),当然需要一定的权限才可以. 如何将应用程序的数据暴露出去? Android提供了ContentProvider,一个程序可

  • Android使用ContentResolver搜索手机通讯录的方法

    本文实例讲述了Android使用ContentResolver搜索手机通讯录的方法.分享给大家供大家参考,具体如下: 在这个程序中使用ContentResolver来访问通讯录里联系人的关键字,并将所有找到的联系人存入CursorAdapter里.输入搜索人员名字a ,会将所有以a开头的名字都显示出来,输入*,则所有通讯录中的人名显示于AutoCompleteView的AdapterView里,若发生了User选择事件后,会将勾选的联系人电话号码显示于TextView里. 此程序中用到了Cont

  • android利用ContentResolver访问者获取手机短信信息

    利用ContentResolver访问者获取手机短信信息,在此记录一下,一遍以后查询. 首先看一下结果,结果如下: activity_message.xml类: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_

  • android之ContentResolver与ContentProvider介绍

    android中对数据操作包含有: file, sqlite3, Preferences, ContectResolver与ContentProvider前三种数据操作方式都只是针对本应用内数据,程序不能通过这三种方法去操作别的应用内的数据. android中提供ContectResolver与ContentProvider来操作别的应用程序的数据. 一. 使用方式 一个应用实现ContentProvider来提供内容给别的应用来操作, 一个应用通过ContentResolver来操作别的应用数

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

    通过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; impo

  • Android利用ContentProvider读取短信内容

    本文实例为大家分享了Android利用ContentProvider读取短信内容的具体代码,供大家参考,具体内容如下 首先,我们来看下运行效果 运行效果如下: 展示短信内容的效果如下: 布局文件(activity_sms.xml) <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an

  • 浅析Android手机卫士接收短信指令执行相应操作

    推荐阅读: 浅析Android手机卫士sim卡绑定 深入浅析Android手机卫士保存密码时进行md5加密 详解Android 手机卫士设置向导页面 浅析Android手机卫士关闭自动更新 浅析Android手机卫士自定义控件的属性 浅析Android手机卫士读取联系人 通过广播接收者,接收到短信,对短信内容进行判断,如果为我们指定的值就执行相应的操作. 如果短信内容是"#*location*#" 就执行,获取手机位置 如果短信内容是"#*alarm*#" 就执行,

  • 获取Android手机中所有短信的实现代码

    Java核心代码: public String getSmsInPhone() { 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 = "c

  • Android黑科技之读取用户短信+修改系统短信数据库

    安卓系统比起ios系统最大的缺点,相信大家都知道,就是系统安全问题.这篇博客就秀一波"黑科技". 读取用户短信 Android应用能读取用户手机上的短信,相信已经不是什么新鲜事,比如我们收到的短信验证码,一些app马上就能自动获取并填上验证码,省去我们手动填写验证码.原理就是通过Android的ContentProvider组件间接访问系统的短信数据库,获取所有短信内容.下面来演示一下. 布局很简单,如下: 代码如下: public class MainActivity extends

  • Android创建简单发送和接收短信应用

    本文实例为大家分享了Android创建发送和接收短信应用的简单实现过程,供大家参考,具体内容如下 一.接收短信 项目的结构如下:一个简单的接收和发送短信的功能 1.定义一个接收短信的广播:当手机接收到一条短信的时候,系统会发出一条值为android.provider.Telephony.SMS_RECEIVED 的广播,这条广播里携带着与短信相关的所有数据. // 接收短信的广播 class MessageReceiver extends BroadcastReceiver { @Overrid

  • Android如何实现接收和发送短信

    每一部手机都具有短信接收和发送功能,下面我们通过代码来实现接收和发送短信功能. 一.接收短信 1.创建内部广播接收器类,接收系统发出的短信广播 2.从获得的内容中解析出短信发送者和短信内容 3.在Activity中注册广播 4.添加接收短信权限 下面放上具体的代码  activity_main.xml文件用于显示短信发送者号码和显示短信内容 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout

  • Android基础开发小案例之短信发送器

    先看看效果图: 布局文件: activity_main.xml <span style="font-family:Comic Sans MS;font-size:14px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" androi

  • Android实现将已发送的短信写入短信数据库的方法

    短信是手机常见的功能,本文就以实例形式讲述了Android实现将已发送的短信写入短信数据库的方法.分享给大家供大家参考之用.具体如下: 一般来说,把短信发送出去以后,需要把已发送的短信写入短信数据库.短信数据库有多个Uri,其中已发送的Uri是content://sms/sent. 具体功能代码如下: // 把短信写入数据库 public void writeMsg(){ try{ ContentValues values = new ContentValues(); // 发送时间 value

  • android开发基础教程—打电话发短信

    打电话发短信demo 复制代码 代码如下: public class MainActivity extends Activity { EditText mPhoneNum,mMessage; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mPhoneNum=(Edit

随机推荐