最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

Android获取双卡双待手机的SIM卡信息示例代码

IT圈 admin 37浏览 0评论

2023年12月11日发(作者:喜勇锐)

Android获取双卡双待手机的SIM卡信息示例代码

前言

需要验证手机号的功能,但是国内的手机多是双卡双待的,无法获取到两个号码。在Android的官方文档是没有提供相应的Api

的,因为标准的Andoird是没有双卡的,好像也只有国内才会搞双卡双待的神器吧。

以下记录一下做这个功能所学习到的东西。

Android 获取本机手机号(适用于双卡双待手机)

直接上代码:

import tionTargetException;

import ;

import ;

import ty;

import t;

import Preferences;

import ;

import ;

import enceManager;

import fo;

import onyManager;

import ;

import ew;

public class MainActivity extends Activity

{

private TextView tv;

private TextView tv2;

// ///////////////////////////////////

static String ISDOUBLE;

static String SIMCARD;

static String SIMCARD_1;

static String SIMCARD_2;

static boolean isDouble;

// //////////////////////////////////

@Override

protected void onCreate(Bundle savedInstanceState)

{

te(savedInstanceState);

setContentView(ty_main);

tv = (TextView) findViewById();

tv2 = (TextView) findViewById(2);

t("不知道哪个卡可用!");

getNumber();

}

private void getNumber()

{

TelephonyManager tm = (TelephonyManager) temService(ONY_SERVICE);

String phoneNumber1 = e1Number();

// String phoneNumber2 = upIdLevel1();

initIsDoubleTelephone(this);

if (isDouble)

{

// t("这是双卡手机!");

t("本机号码是:" + " " + phoneNumber1 + " " + "这是双卡手机!");

} else

{

// t("这是单卡手机");

t("本机号码是:" + " " + phoneNumber1 + " " + "这是单卡手机");

} }

public void initIsDoubleTelephone(Context context)

{

isDouble = true;

Method method = null;

Object result_0 = null;

Object result_1 = null;

TelephonyManager tm = (TelephonyManager) temService(ONY_SERVICE);

try

{

// 只要在反射getSimStateGemini 这个函数时报了错就是单卡手机(这是我自己的经验,不一定全正确)

method = hod("getSimStateGemini", new Class[]

{ });

// 获取SIM卡1

result_0 = (tm, new Object[]

{ new Integer(0) });

// 获取SIM卡2

result_1 = (tm, new Object[]

{ new Integer(1) });

} catch (SecurityException e)

{

isDouble = false;

tackTrace();

// n("1_ISSINGLETELEPHONE:"+ng());

} catch (NoSuchMethodException e)

{

isDouble = false;

tackTrace();

// n("2_ISSINGLETELEPHONE:"+ng());

} catch (IllegalArgumentException e)

{

isDouble = false;

tackTrace();

} catch (IllegalAccessException e)

{

isDouble = false;

tackTrace();

} catch (InvocationTargetException e)

{

isDouble = false;

tackTrace();

} catch (Exception e)

{

isDouble = false;

tackTrace();

// n("3_ISSINGLETELEPHONE:"+ng());

}

SharedPreferences sp = aultSharedPreferences(context);

Editor editor = ();

if (isDouble)

{

// 保存为双卡手机

lean(ISDOUBLE, true);

// 保存双卡是否可用

// 如下判断哪个卡可用.双卡都可以用

if (result_ng().equals("5") && result_ng().equals("5"))

{

if (!ing(SIMCARD, "2").equals("0") && !ing(SIMCARD, "2").equals("1"))

{

ing(SIMCARD, "0");

}

lean(SIMCARD_1, true);

lean(SIMCARD_2, true);

t("双卡可用");

} else if (!result_ng().equals("5") && result_ng().equals("5"))

{// 卡二可用

if (!ing(SIMCARD, "2").equals("0") && !ing(SIMCARD, "2").equals("1"))

{

ing(SIMCARD, "1");

}

lean(SIMCARD_1, false);

lean(SIMCARD_2, true); t("卡二可用");

} else if (result_ng().equals("5") && !result_ng().equals("5"))

{// 卡一可用

if (!ing(SIMCARD, "2").equals("0") && !ing(SIMCARD, "2").equals("1"))

{

ing(SIMCARD, "0");

}

lean(SIMCARD_1, true);

lean(SIMCARD_2, false);

t("卡一可用");

} else

{// 两个卡都不可用(飞行模式会出现这种种情况)

lean(SIMCARD_1, false);

lean(SIMCARD_2, false);

t("飞行模式");

}

} else

{

// 保存为单卡手机

ing(SIMCARD, "0");

lean(ISDOUBLE, false);

}

();

}

@Override

public boolean onCreateOptionsMenu(Menu menu)

{

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(, menu);

return true;

}

}

当然不要忘记添加权限:

获取双卡双待手机SIM卡信息

使用反射遍历 TelephonyManager 中的方法,通过肉眼基本能找到获取双卡双待号码的方法,最后通过反射取到 SIM 卡信

息。

// 遍历 TelephonyManager 里的方法

public void printTelephonyManagerMethodNamesForThisDevice() {

TelephonyManager telephony = (TelephonyManager) getSystemService(ONY_SERVICE);

Class telephonyClass;

try {

telephonyClass = e(ss().getName());

Method[] methods = hods();

for (int i = 0; i < ; i++) {

Log.i(TAG, "n" + methods[i] + " declared by " + methods[i].getDeclaringClass());

}

} catch (ClassNotFoundException e) {

tackTrace();

}

}

// 获取双卡双待 SIM 卡序列号

public void getSubscriberId() {

TelephonyManager telephony = (TelephonyManager) getSystemService(ONY_SERVICE);

Class telephonyClass;

Object result = null;

Object result0 = null;

Object result1 = null;

try {

telephonyClass = e(ss().getName());

Method m1 = hod("getSubscriberId");

Method m2 = hod("getSubscriberId", new Class[]{});

result = (telephony);

result0 = (telephony, 0); result1 = (telephony, 1);

} catch (Exception e) {

tackTrace();

}

Log.i(TAG, " getSubscriberId : " + scriberId() + "n"

+ " result : " + result + "n"

+ " result0 : " + result0 + "n"

+ " result1 : " + result1 + "n");

}

是否能取到手机号,取决于手机卡,而大部分手机卡都取不到手机号码,只能取到 SIM 卡序列号。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言

交流,谢谢大家对的支持。

2023年12月11日发(作者:喜勇锐)

Android获取双卡双待手机的SIM卡信息示例代码

前言

需要验证手机号的功能,但是国内的手机多是双卡双待的,无法获取到两个号码。在Android的官方文档是没有提供相应的Api

的,因为标准的Andoird是没有双卡的,好像也只有国内才会搞双卡双待的神器吧。

以下记录一下做这个功能所学习到的东西。

Android 获取本机手机号(适用于双卡双待手机)

直接上代码:

import tionTargetException;

import ;

import ;

import ty;

import t;

import Preferences;

import ;

import ;

import enceManager;

import fo;

import onyManager;

import ;

import ew;

public class MainActivity extends Activity

{

private TextView tv;

private TextView tv2;

// ///////////////////////////////////

static String ISDOUBLE;

static String SIMCARD;

static String SIMCARD_1;

static String SIMCARD_2;

static boolean isDouble;

// //////////////////////////////////

@Override

protected void onCreate(Bundle savedInstanceState)

{

te(savedInstanceState);

setContentView(ty_main);

tv = (TextView) findViewById();

tv2 = (TextView) findViewById(2);

t("不知道哪个卡可用!");

getNumber();

}

private void getNumber()

{

TelephonyManager tm = (TelephonyManager) temService(ONY_SERVICE);

String phoneNumber1 = e1Number();

// String phoneNumber2 = upIdLevel1();

initIsDoubleTelephone(this);

if (isDouble)

{

// t("这是双卡手机!");

t("本机号码是:" + " " + phoneNumber1 + " " + "这是双卡手机!");

} else

{

// t("这是单卡手机");

t("本机号码是:" + " " + phoneNumber1 + " " + "这是单卡手机");

} }

public void initIsDoubleTelephone(Context context)

{

isDouble = true;

Method method = null;

Object result_0 = null;

Object result_1 = null;

TelephonyManager tm = (TelephonyManager) temService(ONY_SERVICE);

try

{

// 只要在反射getSimStateGemini 这个函数时报了错就是单卡手机(这是我自己的经验,不一定全正确)

method = hod("getSimStateGemini", new Class[]

{ });

// 获取SIM卡1

result_0 = (tm, new Object[]

{ new Integer(0) });

// 获取SIM卡2

result_1 = (tm, new Object[]

{ new Integer(1) });

} catch (SecurityException e)

{

isDouble = false;

tackTrace();

// n("1_ISSINGLETELEPHONE:"+ng());

} catch (NoSuchMethodException e)

{

isDouble = false;

tackTrace();

// n("2_ISSINGLETELEPHONE:"+ng());

} catch (IllegalArgumentException e)

{

isDouble = false;

tackTrace();

} catch (IllegalAccessException e)

{

isDouble = false;

tackTrace();

} catch (InvocationTargetException e)

{

isDouble = false;

tackTrace();

} catch (Exception e)

{

isDouble = false;

tackTrace();

// n("3_ISSINGLETELEPHONE:"+ng());

}

SharedPreferences sp = aultSharedPreferences(context);

Editor editor = ();

if (isDouble)

{

// 保存为双卡手机

lean(ISDOUBLE, true);

// 保存双卡是否可用

// 如下判断哪个卡可用.双卡都可以用

if (result_ng().equals("5") && result_ng().equals("5"))

{

if (!ing(SIMCARD, "2").equals("0") && !ing(SIMCARD, "2").equals("1"))

{

ing(SIMCARD, "0");

}

lean(SIMCARD_1, true);

lean(SIMCARD_2, true);

t("双卡可用");

} else if (!result_ng().equals("5") && result_ng().equals("5"))

{// 卡二可用

if (!ing(SIMCARD, "2").equals("0") && !ing(SIMCARD, "2").equals("1"))

{

ing(SIMCARD, "1");

}

lean(SIMCARD_1, false);

lean(SIMCARD_2, true); t("卡二可用");

} else if (result_ng().equals("5") && !result_ng().equals("5"))

{// 卡一可用

if (!ing(SIMCARD, "2").equals("0") && !ing(SIMCARD, "2").equals("1"))

{

ing(SIMCARD, "0");

}

lean(SIMCARD_1, true);

lean(SIMCARD_2, false);

t("卡一可用");

} else

{// 两个卡都不可用(飞行模式会出现这种种情况)

lean(SIMCARD_1, false);

lean(SIMCARD_2, false);

t("飞行模式");

}

} else

{

// 保存为单卡手机

ing(SIMCARD, "0");

lean(ISDOUBLE, false);

}

();

}

@Override

public boolean onCreateOptionsMenu(Menu menu)

{

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(, menu);

return true;

}

}

当然不要忘记添加权限:

获取双卡双待手机SIM卡信息

使用反射遍历 TelephonyManager 中的方法,通过肉眼基本能找到获取双卡双待号码的方法,最后通过反射取到 SIM 卡信

息。

// 遍历 TelephonyManager 里的方法

public void printTelephonyManagerMethodNamesForThisDevice() {

TelephonyManager telephony = (TelephonyManager) getSystemService(ONY_SERVICE);

Class telephonyClass;

try {

telephonyClass = e(ss().getName());

Method[] methods = hods();

for (int i = 0; i < ; i++) {

Log.i(TAG, "n" + methods[i] + " declared by " + methods[i].getDeclaringClass());

}

} catch (ClassNotFoundException e) {

tackTrace();

}

}

// 获取双卡双待 SIM 卡序列号

public void getSubscriberId() {

TelephonyManager telephony = (TelephonyManager) getSystemService(ONY_SERVICE);

Class telephonyClass;

Object result = null;

Object result0 = null;

Object result1 = null;

try {

telephonyClass = e(ss().getName());

Method m1 = hod("getSubscriberId");

Method m2 = hod("getSubscriberId", new Class[]{});

result = (telephony);

result0 = (telephony, 0); result1 = (telephony, 1);

} catch (Exception e) {

tackTrace();

}

Log.i(TAG, " getSubscriberId : " + scriberId() + "n"

+ " result : " + result + "n"

+ " result0 : " + result0 + "n"

+ " result1 : " + result1 + "n");

}

是否能取到手机号,取决于手机卡,而大部分手机卡都取不到手机号码,只能取到 SIM 卡序列号。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言

交流,谢谢大家对的支持。

发布评论

评论列表 (0)

  1. 暂无评论