Android 双卡获取当前使用流量在线卡的信息
最近接触了一个项目,需要获取在线流量卡的信息,下面的方式,可以获取大部分手机的正确手机卡信息。
一 获取获取IMEI
public static String getDeviced(int soltId,Context context) {
return (String) getPhoneInfo(soltId,"getDeviceId", context);
}
获取 IMSI
public static String getSubscriberId(int subId, Context context) {
String imsi = (String) getPhoneInfo(subId, "getSubscriberId", context);
return imsi;
}
获取 iccid
public static String getSimSerialNumber(int subId, Context context) {
String imsi = (String) getPhoneInfo(subId, "getSimSerialNumber", context);
return imsi;
}
subId 为卡槽 id
二、双卡的时候获取哪个卡是使用流量的卡
@SuppressLint("MissingPermission")
public static Integer getDefaultDataSubId(Context context)
{
Integer id = -1;
try {
SubscriptionManager sm = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP_MR1) {
sm = SubscriptionManager.from(context.getApplicationContext());
Method getSubId = sm.getClass().getMethod("getDefaultDataSubId");
if(getSubId != null)
{
id = (int) getSubId.invoke(sm);
}
}
} catch (NoSuchMethodException e) {
try {
SubscriptionManager sm = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP_MR1) {
sm = SubscriptionManager.from(context.getApplicationContext());
Method getSubId = sm.getClass().getMethod("getDefaultDataSubscrptionId");
if(getSubId != null)
{
id = (int) getSubId.invoke(sm);
}
}
} catch (NoSuchMethodException e1) {
//
try {
SubscriptionManager sm = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP_MR1) {
sm = SubscriptionManager.from(context.getApplicationContext());
Method getSubId = sm.getClass().getMethod("getDefaultDataPhoneId");
// Method getSubId = Class.forName("android.telephony.SubscriptionManager").getDeclaredMethod("getSubId", new Class[]{Integer.TYPE});
if(getSubId != null)
{
id = (int) getSubId.invoke(sm);
Log.v("",(int) getSubId.invoke(sm) + "");
}
}
} catch (NoSuchMethodException e2) {
e.printStackTrace();
} catch (IllegalAccessException e2) {
e.printStackTrace();
} catch (InvocationTargetException e2) {
e.printStackTrace();
}
} catch (IllegalAccessException e1) {
e.printStackTrace();
} catch (InvocationTargetException e1) {
e.printStackTrace();
}
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return id;
}
使用 getDefaultDataSubId 可以获取大部分手机哪个是在线的数据的卡 ,getDefaultDataSubscrptionId 是荣耀系列的手机能获取到,但小米、红米.vivo 等手机的获取不到。
上面两个可以获取大部分的,三星的好像不行,三星的把副卡的数据流量打开时,会自动关闭主卡。三星的使用 这个getDefaultDataPhoneId , 这个可以获取到三星的哪个手机卡在线吗,但是当使用上面的获取SIMI 的方法时,两个卡,返回的都是主卡的值。
对三星的手机做了一下特殊处理:
if ( Utils.getSubscriberId(0,mContext).equals( Utils.getSubscriberId(1,mContext))) {
if (id == 1) {
imsi=SystemUtil.getPhoneIMSI(mContext);
imei=SystemUtil.getIMEI(mContext);
iccid=SystemUtil.getPhoneICCID(mContext);
}else {
imsi=Utils.getSubscriberId(id,mContext);
imei=Utils.getDeviced(id,mContext);
iccid=Utils.getSimSerialNumber(id,mContext);
}
}else {
imsi=Utils.getSubscriberId(id,mContext);
imei=Utils.getDeviced(id,mContext);
iccid=Utils.getSimSerialNumber(id,mContext);
}
当传 0、 1 时获取到的SIMI 信息一样时
获取副卡信息 使用 下面的方法
@SuppressLint("MissingPermission")
public static String getPhoneIMSI(Context context) {
TelephonyManager mTelephonyMgr = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
String str = "";
try {
str=mTelephonyMgr.getSubscriberId();
}catch (Exception e) {
str = "";
}
return str;
}
@SuppressLint("MissingPermission")
public static String getIMEI(Context ctx) {
TelephonyManager tm = (TelephonyManager) ctx.getSystemService(Activity.TELEPHONY_SERVICE);
if (tm != null) {
try {
return tm.getDeviceId();
}catch (Exception e) {
return "";
}
}
return null;
}
@SuppressLint("MissingPermission")
public static String getPhoneICCID(Context context) {
TelephonyManager mTelephonyMgr = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
try {
return mTelephonyMgr.getSimSerialNumber();
}catch (Exception e) {
return "";
}
}
获取主卡信息 ,还可以使用 一 标题里面的方法。
Android 双卡获取当前使用流量在线卡的信息的更多相关文章
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)
众所周知,通过PackageManager可以获取手机端已安装的apk文件的信息,具体代码如下 PackageManager packageManager = this.getPackageManag ...
- Android记录3--ExpandableListView使用+获取SIM卡状态信息
Android记录3--ExpandableListView使用+获取SIM卡状态信息 2013年8月9日Android记录 ExpandableListView是一个可以实现下拉列表的控件,大家可能 ...
- Android学习笔记-获取手机内存,SD卡存储空间。
前面介绍到如何保存数据到手机内存或者SD卡,但是问题是,在保存以前,我们还需要对他们的空间(可用空间),进行判断,才可以进行后续操作,所以,本节我们就介绍如何获取手机内存以及Sd卡的空间. //这时获 ...
- android 双卡手机发短信/判断手机是否为双卡
通过反射发现sendMultipartTextMessage多了一个phoneType的参数,这个参数就是这只用GMS还是CDMA卡发送的. phoneType获取方法,iTelephony.getA ...
- android自动获取短信验证码
前言:android应用的自动化测试必然会涉及到注册登录功能,而许多的注册登录或修改密码功能常常需要输入短信验证码,因此有必要能够自动获得下发的短信验证码.主要就是实时获取短信信息.android上获 ...
- android中获取root权限的方法以及原理(转)
一. 概述 本文介绍了android中获取root权限的方法以及原理,让大家对android 玩家中常说的“越狱”有一个更深层次的认识. 二. Root 的介绍 1. Root 的目的 可以让我们拥有 ...
- Android—将Bitmap图片保存到SD卡目录下或者指定目录
直接上代码就不废话啦 一:保存到SD卡下 File file = new File(Environment.getExternalStorageDirectory(), System.currentT ...
- Android NFC近场通信03----读写MifareClassic卡
Android NFC近场通信02----读写MifareClassic卡 一.MifareClassic卡 相关 一般来 ...
- URL转Drawable之 Android中获取网络图片的三种方法
转载自: http://doinone.iteye.com/blog/1074283 Android中获取网络图片是一件耗时的操作,如果直接获取有可能会出现应用程序无响应(ANR:Applicatio ...
随机推荐
- Wechat 微信端正确播放audio、video的姿势
在开发微信项目时,有在项目中播放音频(audio)和视频(video)的需求: 在开发中,我们会遇到的问题 audio.video在Android和IOS系统上的兼容性: video播放完成后,跳出浏 ...
- angular4.0使用JSONP数据请求
ng4中有很多获取数据的API,为了满足跨域的需求,我选择JSONP模块: 应该有很多小伙伴遇到这个报错吧 injected script did not invoke callback: 下面我写个 ...
- Spark算子篇 --Spark算子之aggregateByKey详解
一.基本介绍 rdd.aggregateByKey(3, seqFunc, combFunc) 其中第一个函数是初始值 3代表每次分完组之后的每个组的初始值. seqFunc代表combine的聚合逻 ...
- php代码审计一些笔记
之前学习了seay法师的代码审计与及80sec的高级审计,整理了一些笔记在印象里面,也发到这里作为记录 1,漏洞挖掘与防范(基础篇) sql注入漏洞 挖掘经验:注意点:登录页面, ...
- SQL列中含有换行符的查找和替换方法
最近在获取数据时,发现程序读取的字段中含有\r\n字符,检查数据库表中的数据,发现是varchar字符串中包含了换行符.导入数据导致了这一情况出现. 回车换行 不同系统的行结尾符号并不同,如下: li ...
- 聊聊ThreadLocal原理以及使用场景-JAVA 8源码
相信很多人知道ThreadLocal是针对每个线程的,但是其中的原理相信大家不是很清楚,那咱们就一块看一下源码. 首先,我们先看看它的set方法.非常简单,从当前Thread中获取map.那么这个ge ...
- CentOS7服务去Nginx使用-安装
1.官网下载目前稳定版本nginx 这里我使用1.12.1版本进行安装. 上传到linux的/mnt/pack/nginx这个目录,主要是存放linux安装相关的文件. 可以使用window下载好上传 ...
- Jeecg踩坑不完全指南
公司用了这个叫做jeecg的快速开发框架,我不知道有多少公司在用这个框架,园子里有的可以吱一声.个人觉得这框架唯一优势就是可以让不会ssh的人也能进行开发,只要你会J2SE,有web后台发开经验即可. ...
- GCC编译选项 -OX[转]
作者:知乎用户链接:https://www.zhihu.com/question/27090458/answer/137944410来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...
- shiro真正项目中的实战应用核心代码!!!
欢迎转载!!!请注明出处!!! 说道shiro的学习之路真是相当坎坷,网上好多人发的帖子全是简单的demo样例,核心代码根本没有,在学习过程中遇到过N多坑. 经过自己的努力,终于整出来了,等你整明白之 ...