android获取通讯记录,sim卡和手机

    //获取手机和手机卡通讯录
    public  static  String getContacts()
    {
        String szContacts = "";

        szContacts=getPhoneContacts()+getSIMContacts();

        return  szContacts;
    }

 

 // 获取手机联系人
    public static String getPhoneContacts()
    {
        String szpPhoneContacts = "";
        ContentResolver resolver = s_ctx.getContentResolver();
        StringBuffer bufs  = new StringBuffer();

        // 获取手机联系人
        Cursor phoneCursor = resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                PHONES_PROJECTION, null, null, null);

        JSONObject jsobjs = new JSONObject();
        // 不为空
        if (phoneCursor != null) {
            while (phoneCursor.moveToNext()) {

                // 得到手机号码
                String phoneNumber = phoneCursor.getString(PHONES_NUMBER);
                // 当手机号码为空的或者为空字段 跳过当前循环
                if (TextUtils.isEmpty(phoneNumber))
                    continue;

                // 得到联系人名称
                String contactName = phoneCursor.getString(PHONES_DISPLAY_NAME);

                try
                {
                    jsobjs.put("联系人名称",contactName);
                    jsobjs.put("电话号码",phoneNumber);
                    bufs.append(jsobjs);

                } catch (JSONException e)
                {
                    e.printStackTrace();
                }


            }

            phoneCursor.close();

        }
        szpPhoneContacts = bufs.toString();
        return  szpPhoneContacts;
    }

    /** 得到手机SIM卡联系人人信息 **/
    public static String getSIMContacts()
    {
        StringBuffer bufs = new StringBuffer();
        String simconteacts = "";
        ContentResolver resolver = s_ctx.getContentResolver();
        // 获取Sims卡联系人
        Uri uri = Uri.parse("content://icc/adn");
        Cursor phoneCursor = resolver.query(uri, PHONES_PROJECTION, null, null,
                null);

        if (phoneCursor != null) {
            while (phoneCursor.moveToNext()) {

                // 得到手机号码
                String phoneNumber = phoneCursor.getString(PHONES_NUMBER);
                // 当手机号码为空的或者为空字段 跳过当前循环
                if (TextUtils.isEmpty(phoneNumber))
                    continue;
                // 得到联系人名称
                String contactName = phoneCursor.getString(PHONES_DISPLAY_NAME);

                JSONObject jsobj = new JSONObject();
                try
                {
                    jsobj.put("联系人名称",contactName);
                    jsobj.put("电话号码",phoneNumber);
                    bufs.append(jsobj);
                } catch (JSONException e)
                {
                    e.printStackTrace();
                }


            }

            phoneCursor.close();
        }

        //sim卡中记录
        simconteacts = bufs.toString();
        return  simconteacts;
    }

 

转载于:https://www.cnblogs.com/fply/p/8350929.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 4.4 中,您可以使用以下代码来获取双 SIM 卡信息: ```java TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); String simSerialNumber1 = telephonyManager.getSimSerialNumber(0); String simSerialNumber2 = telephonyManager.getSimSerialNumber(1); String subscriberId1 = telephonyManager.getSubscriberId(0); String subscriberId2 = telephonyManager.getSubscriberId(1); String line1Number1 = telephonyManager.getLine1Number(0); String line1Number2 = telephonyManager.getLine1Number(1); String networkOperatorName1 = telephonyManager.getNetworkOperatorName(0); String networkOperatorName2 = telephonyManager.getNetworkOperatorName(1); String networkCountryIso1 = telephonyManager.getNetworkCountryIso(0); String networkCountryIso2 = telephonyManager.getNetworkCountryIso(1); String simOperatorName1 = telephonyManager.getSimOperatorName(0); String simOperatorName2 = telephonyManager.getSimOperatorName(1); ``` 其中,`getSimSerialNumber(int slotIndex)` 方法用于获取指定 SIM 卡的序列号,`getSubscriberId(int slotIndex)` 方法用于获取指定 SIM 卡的 IMSI 号,`getLine1Number(int slotIndex)` 方法用于获取指定 SIM 卡的手机号码,`getNetworkOperatorName(int slotIndex)` 方法用于获取指定 SIM 卡所属的运营商名称,`getNetworkCountryIso(int slotIndex)` 方法用于获取指定 SIM 卡所属的国家代码,`getSimOperatorName(int slotIndex)` 方法用于获取指定 SIM 卡所属的 SIM 运营商名称。 需要注意的是,以上方法中的 `slotIndex` 参数可以取值 0 或 1,分别代表第一张 SIM 卡和第二张 SIM 卡。如果您的设备只支持一张 SIM 卡,那么所有的方法都只能使用 `slotIndex` 参数取值为 0 的情况。 此外,获取双 SIM 卡信息还可以使用 `SubscriptionManager` 类,该类是在 Android 5.1 中引入的,但也可以在 Android 4.4 中使用,需要通过反射来调用。如果您需要使用 `SubscriptionManager` 类,请参考以下代码: ```java SubscriptionManager subscriptionManager = (SubscriptionManager) getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE); List<SubscriptionInfo> subscriptionInfos = null; if (subscriptionManager != null) { subscriptionInfos = subscriptionManager.getActiveSubscriptionInfoList(); } if (subscriptionInfos != null) { for (SubscriptionInfo subscriptionInfo : subscriptionInfos) { int slotIndex = subscriptionInfo.getSimSlotIndex(); String simSerialNumber = subscriptionInfo.getIccId(); String subscriberId = subscriptionInfo.getImsi(); String line1Number = subscriptionInfo.getNumber(); String networkOperatorName = subscriptionInfo.getCarrierName().toString(); String networkCountryIso = subscriptionInfo.getCountryIso(); String simOperatorName = subscriptionInfo.getDisplayName().toString(); } } ``` 以上代码中,`getActiveSubscriptionInfoList()` 方法用于获取当前设备上所有活跃的 SIM 卡信息,返回一个 `List<SubscriptionInfo>` 对象。`SubscriptionInfo` 类包含了获取 SIM 卡信息的所有方法,使用方法与上面介绍的方法相同。需要注意的是,`getActiveSubscriptionInfoList()` 方法只能在支持 `SubscriptionManager` 类的设备上使用,否则会出现 `java.lang.NoSuchMethodError` 异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值