Android获取 SIM 卡序列号+读取系统联系人

本文介绍如何在Android应用中读取SIM卡序列号及设备通讯录中的联系人信息,包括所需权限声明及具体实现代码。通过示例展示了如何使用Android系统API进行数据查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

添加权限

<uses-permission android:name=“android.permission.READ_PHONE_STATE”/>

//保存 sim 卡

TelephonyManager tm = (TelephonyManager) getActivity().getSystemService(Context.TELEPHONY_SERVICE);

//获取 sim 卡序列号

String simSerialNumber = tm.getSimSerialNumber();

Log.d("SetUp2Fm",simSerialNumber);


/*系统的通讯录的表存在data/data/com.android.providers.contacts/databases目录

 *需要用3张表来查询联系人

 *raw_contacts,保存-联系人,contact_id, 作为查询条件

 *data,保存-电话号码,raw_contact_id 作为查询条件查询响应的电话号码和联系人

 *mimetypes,保存-地址,姓名, email, 等等的Id,_id 作为查询条件,查询出具体的手机号码

 */

//代码,需要添加读取联系人权限,READ_CONTACT

package com.mobilesafe.hexl.activity.mobilesafe;

import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListView;
import android.widget.SimpleAdapter;

import com.mobilesafe.hexl.R;
import com.mobilesafe.hexl.base.AppBaseActivity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * Created by hexl on 16/7/4.
 * 选择联系人
 */
public class SelectContactActivity extends AppBaseActivity {

    private ListView listView;

    @Override
    protected void bindLayout(Bundle savedInstanceState) {
        setContentView(R.layout.activity_contcat_listview);
    }

    @Override
    protected void initView() {
        listView = findViewId(R.id.listview);
    }

    @Override
    protected void initData() {

        List<Map<String, String>> maps = readContact();
        Log.d("SelectContactActivity", "maps:" + maps);


        listView.setAdapter(new SimpleAdapter(this, readContact(), R.layout.item_contact,
                new String[]{"name", "phone"}, new int[]{R.id.name, R.id.phone}));

    }

    private List<Map<String, String>> readContact() {
        List<Map<String, String>> list = new ArrayList<>();

        Uri rawUri = Uri.parse("content://com.android.contacts/raw_contacts");//获取contacts ID
        Uri dataUri = Uri.parse("content://com.android.contacts/data");// 获取联系人信息

        Cursor rawQuery = getContentResolver().query(rawUri, new String[]{"contact_id"}, null, null, null);

        if (rawQuery != null) {
            while (rawQuery.moveToNext()) {
                String contact_id = rawQuery.getString(0);
                Log.d("MainActivity", contact_id);

                Cursor dataQuery = getContentResolver().query(dataUri, new String[]{"data1", "mimetype"},
                        "contact_id=?", new String[]{contact_id}, null);
                if (dataQuery != null) {
                    Map<String, String> map = new HashMap<>();
                    while (dataQuery.moveToNext()) {
                        String data1 = dataQuery.getString(0);
                        String mimetype = dataQuery.getString(1);

                        if (mimetype.equals("vnd.android.cursor.item/phone_v2")) {
//                            Log.d("SelectContactActivity", "号码:  " + data1);
                            map.put("phone", data1);
                        }
                        if (mimetype.equals("vnd.android.cursor.item/name")) {
                            map.put("name", data1);
                        }
                    }
                    list.add(map);
                    dataQuery.close();
                }

            }
            rawQuery.close();
        }
        return list;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值