手机号码获取随记

1.移动 短信发送cxll 到10086 然后截取短信内容去获取号码(目前有些号码是没有写在sim卡的信息里,所以只能这种方式去获取)

2.联通 (目前有些号码是没有写在sim卡的信息里,所以只能这种方式去获取)

SubscriptionManager.from(context).getActiveSubscriptionInfoList()里面的mNum

{id=3 iccId=89860122801168872054 simSlotIndex=1 carrierId=1436 displayName=中国联通 carrierName=中国联通 nameSource=3 iconTint=-13408298 number=+8618565627700 dataRoaming=0 iconBitmap=android.graphics.Bitmap@170243b mcc=460 mnc=01 countryIso=cn isEmbedded=false nativeAccessRules=null cardString=89860122801168872054 cardId=2 isOpportunistic=false groupUUID=null isGroupDisabled=false profileClass=-1 ehplmns=[46001] hplmns=[46001, 46009, 46001, 46009] subscriptionType=0 groupOwner=null carrierConfigAccessRules=null areUiccApplicationsEnabled=true}

3.电信

暂时没有找到方法去获取此类信息,短信等都没有暴露出本机号码

无感获取号码目前这些,当然非要当流氓,那么简单方法就是自己填号码加验证码

流氓无感就是将手机信息和卡信息等个人信息发短信过去,通过服务器接口读取来短信号码和个人信息进行绑定

默认拨号两个方法

  1. 使用Intent里自带的方法

    Intent intent = new Intent(Intent.ACTION_CALL);
    Uri data = Uri.parse("tel:" + phoneNum);
    intent.setData(data);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.putExtra("com.android.phone.extra.slot", slotId);//slot值为0或1,分别代表卡1,卡2
    startActivity(intent);
  1. 有系统权限的前提下,拨号前首先设置默认拨号SIM卡,通过反射的方式去执行

反射设置默认拨号sim卡方法:

private void setDefaultVoiceCallId(int slotId) {
        try {
            if(mLastUserSetCallDefault!=-2) {
                Class<?> mClass = Class.forName("android.telephony.SubscriptionManager");
                Constructor con = mClass.getDeclaredConstructor(Context.class);
                if (!con.isAccessible()) {
                    con.setAccessible(true);
                }
                Object store = con.newInstance(this);
                Method[] methods = mClass.getDeclaredMethods();
                Method method = null;
                for (Method m : methods) {
                    if (m.getName().equalsIgnoreCase("setDefaultVoiceSubscriptionId")) {
                        method = m;
                        break;
                    }
                }
                if (!method.isAccessible()) {
                    method.setAccessible(true);
                }

                int subscriptionId = CSDeviceUtils.getSimSubscriptionId(this, slotId);
                method.invoke(store, subscriptionId);
                Log.e(TAG, "setDefaultVoiceCallId subscriptionId=" + subscriptionId + "   slotId=" + slotId);
            }else{
                Log.e(TAG, "setDefaultVoiceCallId 无效");
            }
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch(Exception e){
            e.printStackTrace();
        }
    }