Android 获取sim中带有字母的ccid(小白教程)
文章目录
- 前言
- 一、使用TelephonyManager获取ccid
- 二、使用at指令获取ccid
- 一、安装adb
- 二、判断哪一个串口对应的是4G模块
- 三、代码
- 四、 参考
前言
之前一直使用TelephonyManager获取sim的ccid,但是在项目运行的时候发现获取到的ccid只有短短的几位,后来发现卡上面的ccid带有字母,问老板,老板说今年的新卡都是带有字母的,没办法只有自己去解决了。
一、使用TelephonyManager获取ccid
@SuppressLint("MissingPermission")public static String getICCID(Context ctx) {TelephonyManager tm = (TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE);if (tm != null) {return tm.getSimSerialNumber() == null ? "null" : tm.getSimSerialNumber();}return "null";}
如上方代码一样,此方法获取带有字母的ccid,只能够获取到字母前面的几位,而字母后面的确没有获取到,相信大部分来这的也都是这种情况。看源码可知,此方法只能获取到10进制数字,获取不到16进制,而物联网卡有的是带有16进制的,所以这种方案行不通,只能另寻方法。
二、使用at指令获取ccid
相信大部分都不熟悉at命令是什么东东,我刚开始也不知道,大家也无须了解,会用就可以了。
其实当我们在使用4G模块的时候,板子会在dev目录下生成类似串口的文件,我们可以通过去获取此文件内容从而去获取ccid。但是如果我们没有板子的开发文档的时候,我们也不知道具体是哪一个串口控制的4G模块,这个时候别急,首先你的电脑上必须要安装了adb,我们通过adb获取到dev目录下的文件,从而去判断哪一个串口控制的是4G模块。
一、安装adb
adb如何安装大家自行百度吧,正常来讲安装Android Studio的时候adb已经是安装好了的。
二、判断哪一个串口对应的是4G模块
我们打开Android Studio自带的命令行
1.先取得设备的root权限
adb root
2.进入设备
adb shell
当输入行前面变成 # 的时候代表已经取得root权限了,如果是 $ ,那就是还没有取得root权限。
3.获取dev下的文件目录
ls dev/
这个时候会打印出来的就是dev目录下所有的文件,这个时候我们将其进行截图保存下来,然后拆下4G模块,再次进行上方的指令,这个时候将两次获取的数据进行比对,将其缺少的进行记录下来,一个一个进行尝试,下面给出我在3128板子上面获取到的目录文件。
可以看出差别就在ttyUSB0 ttyUSB1 ttyUSB2这三个数据,我们依次进行尝试就行了,工具类代码在下面给出。
三、代码
public static String getICCID() {String ccid = "";String file = "/dev/ttyUSB1";String cmd = "at+qccid";RandomAccessFile localRandomAccessFile = null;try {localRandomAccessFile = new RandomAccessFile(file, "rw");localRandomAccessFile.writeBytes(cmd + "\r\n");localRandomAccessFile = new RandomAccessFile(file, "r");byte[] arrayOfByte = new byte[1024];int readSize = 0;while ((readSize = localRandomAccessFile.read(arrayOfByte)) == -1) {}localRandomAccessFile.close();ccid = new String(arrayOfByte).substring(0, readSize);Log.e("原始数据:", ccid);ccid = ccid.substring(ccid.indexOf(":") + 1,ccid.indexOf(":") + 22);Log.e("ccid:", ccid);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return ccid;}
运行结果:
四、 参考
https://blog.csdn.net/wqjcsdn/article/details/103710978
Android 获取sim中带有字母的ccid(小白教程)相关推荐
- android 获取sim卡operator
android 获取sim卡运营商信息 TelephonyManager tm = (TelephonyManager)Context.getSystemService(Context.TELEPHO ...
- Android 获取SIM卡信息
android 获取sim卡运营商信息 TelephonyManager tm = (TelephonyManager)Context.getSystemService(Context.TELEPHO ...
- Android 获取SDCard中某个目录下图片
本文介绍Android开发中如何获取SDCard中某目录下的所有图片并显示出来,下面的我们提供的这个函数是通用的,只要提供路径就可以查询出该目录下所有图片的路径信息,并保存到一个List<Str ...
- android 获取apk中的素材图片
昨天,当我制作app的登录界面时,需要部分图片素材,可是我的公司没有UI工程师来为我制作图片资源,怎么办呢?看到别的app的图片很适合我的app所需图片,老板说直接可以直接从别的app获取图片资源,我 ...
- android 获取sim卡,Android 获取手机SIM卡运营商
直接上代码: /** * 获取SIM卡运营商 * * @param context * @return */ public static String getOperators(Context con ...
- Android获取手机中外置内存卡、内置内存卡、手机内存路径
http://www.open-open.com/code/view/1433585940578 首先内部存储路径为/data/data/youPackageName/,下面讲解的各路径都是基于你自己 ...
- Android获取通讯录中的所有联系人工具类
一个获取通讯录中所有联系人的工具类,存储在Map中,Map中key为手机号,value为联系人的姓名.还提供了一个根据手机号查询该手机号的联系人姓名的功能. 注:同一联系人可以存储多个手机号,但是同一 ...
- Android获取手机中外置内存卡 内置内存卡 手机内存路径
http://www.open-open.com/code/view/1433585940578 首先内部存储路径为/data/data/youPackageName/,下面讲解的各路径都是基于你自己 ...
- android 获取url中的参数,验证邮箱格式,截取字符串中键值对的值,String的字节长度,去空格,替换字符
String ss="hello"; byte[] buff=ss.getBytes(); int f=buff.length; System.out.println(f); 字节 ...
最新文章
- svn 主干和分支项目代码更新与同步
- 读《瓦尔登湖》,寂寞的共鸣
- 全球及中国家用除湿机行业消费需求调研及十四五发展趋势研究报告2022-2027年
- AsyncTask的理解
- php类如何变为静态调用,PHP类中静态方法如何调用非静态方法?_后端开发
- linux 模拟延时和丢包
- phaser java_Java 7的并发编程-Phaser
- STL中的关联式容器——set(集合)
- GIMP 教程在 github 发布文章外,又做视频了
- Windows Azure AppFabric Caching入门简介
- Windows: 定制多用户多Registry键脚本
- 新会计准则与旧版内容的不同比较
- 一个测试反应速度的小游戏
- 史上最清晰的雷霆战机游戏开发全过程(基于java,素材和源码均齐全)
- trie树模板(前缀树)
- Java泛型中的桥方法(Bridge Method)
- 引导方法深度补全系列—基于SPN模型—1—《Depth estimation via affinity learned with convolutional spatial propagat》文章细读
- 【日语】流行日语【二】
- python+requests+pytest 接口自动化框架(一)
- 飞瓜app Sign