Android 电话薄调用相关


  /*
     * 根据电话号码取得联系人姓名
     */
    public static String getContactNameByPhoneNumber(Context context, String address) {
        String[] projection = { ContactsContract.PhoneLookup.DISPLAY_NAME,
                ContactsContract.CommonDataKinds.Phone.NUMBER };

        // 将自己添加到 msPeers 中
        Cursor cursor = context.getContentResolver().query(
                ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                projection, // Which columns to return.
                ContactsContract.CommonDataKinds.Phone.NUMBER + " = ‘"
                        + address + "‘", // WHERE clause.
                null, // WHERE clause value substitution
                null); // Sort order.

        if (cursor == null) {
            Log.d(TAG, "getPeople null");
            return null;
        }
        for (int i = 0; i < cursor.getCount(); i++) {
            cursor.moveToPosition(i);

            // 取得联系人名字
            int nameFieldColumnIndex = cursor
                    .getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME);
            String name = cursor.getString(nameFieldColumnIndex);
            return name;
        }
        return null;
    }

/**
     * 获取所有联系人内容
     * @param context
     * @param address
     * @return
     */
    public static String getContacts(Context context) {
        StringBuilder sb = new StringBuilder();

        ContentResolver cr = context.getContentResolver();
        Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null,
                null, null, null);

        if (cursor.moveToFirst()) {
            do {
                String contactId = cursor.getString(cursor
                        .getColumnIndex(ContactsContract.Contacts._ID));
                String name = cursor
                        .getString(cursor
                                .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                //第一条不用换行
                if(sb.length() == 0){
                    sb.append(name);
                }else{
                    sb.append("\n" + name);
                }

                Cursor phones = cr.query(
                        ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                        null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                                + " = " + contactId, null, null);
                while (phones.moveToNext()) {
                    String phoneNumber = phones
                            .getString(phones
                                    .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    // 添加Phone的信息
                    sb.append("\t").append(phoneNumber);

                }
                phones.close();

            } while (cursor.moveToNext());
        }
        cursor.close();
        return sb.toString();

-----------------------------权限-------------:

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

---------------------直接调用系统电话薄:--------------------

startActivityForResult(new Intent(Intent.ACTION_PICK,
                    ContactsContract.Contacts.CONTENT_URI), 0);
@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        Config.putLog("requestCode:" + requestCode + "resultCode:" + resultCode);
        if (resultCode == Activity.RESULT_OK) {
            // ContentProvider展示数据类似一个单个数据库表
            // ContentResolver实例带的方法可实现找到指定的ContentProvider并获取到ContentProvider的数据
            ContentResolver reContentResolverol = getContentResolver();
            // URI,每个ContentProvider定义一个唯一的公开的URI,用于指定到它的数据集
            Uri contactData = data.getData();
            // 查询就是输入URI等参数,其中URI是必须的,其他是可选的,如果系统能找到URI对应的ContentProvider将返回一个Cursor对象.
            Cursor cursor = managedQuery(contactData, null, null, null, null);
            cursor.moveToFirst();
            // 获得DATA表中的名字
            phone_name = cursor.getString(cursor
                    .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
            // 条件为联系人ID
            String contactId = cursor.getString(cursor
                    .getColumnIndex(ContactsContract.Contacts._ID));
            // 获得DATA表中的电话号码,条件为联系人ID,因为手机号码可能会有多个
            Cursor phone = reContentResolverol.query(
                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = "
                            + contactId, null, null);
            if (phone.getCount() > 1) {
                phone_numbers = new String[phone.getCount()];
            }
            int count = 0;
            while (phone.moveToNext()) {
                phone_number = phone
                        .getString(
                                phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))
                        .replace("+86", "").replace(" ", "");
                Config.putLog("电话号码---" + phone_number);
                if (phone.getCount() > 1) {
                    phone_numbers[count] = phone_number;
                    ++count;
                }
            }
            if (phone.getCount() > 1) {
                Dialog alertDialog = new AlertDialog.Builder(this)
                        .setTitle("请选择电话号码")
                        .setItems(phone_numbers,
                                new DialogInterface.OnClickListener() {

                                    @Override
                                    public void onClick(DialogInterface dialog,
                                            int which) {
                                        phone_number = phone_numbers[which];
                                        if (Config.isMobileNO(phone_number)) {
                                            et_mobile.setText(phone_number);
                                            tv_phone_name.setText(phone_name);
                                        } else {
                                            tv_ISP.setTextColor(Color.RED);
                                            tv_ISP.setText("号码格式错误");
                                        }
                                    }
                                })
                        .setNegativeButton("取消",
                                new DialogInterface.OnClickListener() {

                                    @Override
                                    public void onClick(DialogInterface dialog,
                                            int which) {
                                    }
                                }).create();
                alertDialog.show();
            } else {
                et_mobile.setText(phone_number);
                tv_phone_name.setText(phone_name);
                if (!Config.isMobileNO(phone_number)) {
                    tv_ISP.setTextColor(Color.RED);
                    tv_ISP.setText("号码格式错误");
                }

            }
        }
        super.onActivityResult(requestCode, resultCode, data);
    }
时间: 2024-10-07 17:58:00

Android 电话薄调用相关的相关文章

android 电话薄先10位匹配,若是无法匹配,则换成7位匹配

案例 1: 如果您保存的有:A:04165191666, B:5191666,  来电号码是:04165191666 因为是7位匹配,所以A和B都可以匹配到,但是最佳匹配还是A,最后显示A: 来电5191666则匹配到B. 案例 2: 仅保存 A:04165191666, 来电5191666或者04165191666则都匹配A. 案例 3: 仅保存 B:5191666, 来电5191666或者04165191666则都匹配B. 可以在7匹配的基础上,将符合条件的号码匹配做进一步筛选即可. 首先,

Android的JS调用Java代码或使用了Javascript相关技术改如何混淆

http://www.androidren.com/index.php?qa=282&qa_1=android的js调用java代码或使用了javascript相关技术改如何混淆 Android 4.2开始 JS调用Java代码的时候必须加上@JavascriptInterface才能调用. 加上@JavascriptInterface之后就必须要考虑混淆时候的问题,如果混淆的时候把@JavascriptInterface搞丢了你的程序就无法调用了. 其实很简单,你只需要在混淆里面加上: -ke

Android中如何调用拨打电话?

Android系统原本就为手机设计,所以,在android系统中的任何App中,只要愿意,拨打指定电话非常方便. 核心就是使用Intent跳转,指定请求Action为Intent.ACTION_CALL 即可. [源码下载] http://www.code4apk.com/android-code/178 核心代码如下: 1 Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:13888888888"); 下面一起来

Android6.0来电号码电话薄名称匹配

本文将介绍系统接收到来电之后,如何在电话薄中进行匹配联系人的流程.分析将从另外一篇文章(基于Android6.0的RIL框架层模块分析)中提到的与本文内容相关的代码开始. //packages/service/***/Call.java public void handleCreateConnectionSuccess( CallIdMapper idMapper, ParcelableConnection connection) { setHandle(connection.getHandle

Android使用ksoap2-android调用WebService学习

转自 Android使用ksoap2-android调用WebService学习 之前主要做客户端UI交互,很少处理数据和接触服务端,但现在的移动设备根本不可能离得开网络连接,数据的交换.最近学习的是在android端如何去调用远程WebService,都说WebService是一种基于SOAP协议的远程调用标准,对于这个协议理解不深,知道webservice可以将不同操作系统平台.不同语言.不同技术整合到一块,android SDK没有直接调用webservice的库,最常用的是借助ksoap

Android上传图片之调用系统拍照和从相册选择图片

Android上传图片之调用系统拍照和从相册选择图片 前言: 万丈高楼平底起,万事起于微末.不知不觉距离上篇博文已近四个月,2015年12月17日下午发了第一篇博文,现在是2016年4月6日.时间间隔长的过分啊,我自己都看不下去了.原因呢?当然是自己的原因,其实是有很多时间来些博客的,但是这些时间都花在DOTA上了(还是太年轻啊).请原谅我的过错--. 一.概述: 现在几乎应用都会用到上传图片的功能,而要上传图片,首先得选择图片,本文不针对如何上传图片到服务器(每个项目与服务器交互的方式不同,因

电话薄程序

//该程序需要连接数据库.根据word文档要求所有功能均已实现.//大部分方法基本差不多,//在查询修改的时候能输出 最大ID号 和最小ID号,并且可以对输入的ID号进行判断是否存在(具体方法请查看 修改电话号码, 其他修改方法暂时没有相对完善, 只针对修改电话号码的方法进行了修改,方便后期对编写程序思路的查看). package 电话薄1; public class Menu { //主菜单 public void mainMenu() { for(int i = 0 ; i >= 0 ; i

Android使用Intent调用摄像头并获取照片

使用Android的Intent调用另外一个activity的时候,采用的是多线程机制,异步方式.startActivityForResult之后被调用activity并没有马上返回结果给调用activity,Android的Acitivity对象中startActivityForResult的源代码中有相关的解释. /** * Launch an activity for which you would like a result?????? when it finished.?????? *

android 的webview调用php服务器js , js 调用Android的webview

最近项目的需求: Android通过webView调用php的数据 , 这时候是需要整理webview和JavaScript之间相互调用的时候了 一. 理清思路: (1) . 双方都是客户端 , 一个是Android , 一个是js( js当然是客户端 , 后面说明) (2) . Android的webview需要支持JavaScript , 即 WebSettings settings = myWebView.getSettings(); settings.setJavaScriptEnabl