Android读取SIM卡ICCID

这篇具有很好参考价值的文章主要介绍了Android读取SIM卡ICCID。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

方法一,使用TelephonyManager的getSimSerialNumber()获取

TelephonyManager telephonyManager = (TelephonyManager)context.getSystemService(TELEPHONY_SERVICE);
String iccid = telephonyManager.getSimSerialNumber()

需要添加权限:<uses-permission android:name="android.permission.READ_PHONE_STATE" />

方法二,通过发AT命令读取SIM卡ICCID(可以解决读取某些SIM卡ICCID长度不对的问题)文章来源地址https://www.toymoban.com/news/detail-588322.html

		new Thread(new Runnable() {
            @Override
            public void run() {
            	String com = "/dev/ttyUSB2";
            	String cmd = "at+qccid\r\n";
            	if(adbcommand("chmod 0777 "+com) && sendAtCmd(com,cmd)){
            		iccidtv.setText("ICCID:"+recAtresult(com));
            	}
            	iccidtv.setText("ICCID:"+recAtresult(com));
            	//iccidtv.setText("ICCID:"+getSimSerialNumber(getApplicationContext()));
            }

        }).start();
	
public boolean adbcommand(String command) {
		Process process = null;
		DataOutputStream os = null;
		//String excresult = "";
		try {
			process = Runtime.getRuntime().exec("su");
			os = new DataOutputStream(process.getOutputStream());
			os.writeBytes(command + "\n");
			os.writeBytes("exit\n");
			os.flush();

			if (process.waitFor() != 0) {
				// System.err.println("exit value = " + process.exitValue());
			}
			BufferedReader in = new BufferedReader(new InputStreamReader(
					process.getInputStream()));
			StringBuffer stringBuffer = new StringBuffer();
			String line = null;
			while ((line = in.readLine()) != null) {
				stringBuffer.append(line + " ");
			}
			//excresult = stringBuffer.toString();
			// System.out.println(excresult);
			return true;

		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
		//return excresult;
	}
	public static boolean sendAtCmd(String fileName, String atcmd) {
		boolean atResult = true;// at指令的返回结果
		Log.i(TAG, "fileName = " + fileName + ", atcmd = " + atcmd);
		try {
			BufferedWriter atWriter = new BufferedWriter(new FileWriter(
					fileName));
			atWriter.write(atcmd, 0, atcmd.getBytes().length);
			atWriter.flush();
			atWriter.close();
			atWriter = null;
			// 以上是往fileName该通道写入AT指令

		} catch (FileNotFoundException e2) {
			Log.e(TAG, "FileNotFoundException :" + fileName);
			atResult = false;
		} catch (IOException e) {
			atResult = false;
			e.printStackTrace();
		}
		return atResult;
	}

	public String recAtresult(String fileName) {
		int read_len = 0;
		// 下面来读取该通道里的AT指令返回结果
		BufferedReader atReader;
		String readAtString = null;
		char[] cReaderBuffer = new char[255];
		try {

			atReader = new BufferedReader(new FileReader(fileName));
			try {
				atReader.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			atReader = null;

			try {
				read_len = atReader.read(cReaderBuffer, 0,
						cReaderBuffer.length - 1);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		Log.i(TAG, "read_len = " + read_len);
		if (read_len > 0) {
			if (null == readAtString) {
				readAtString = String.copyValueOf(cReaderBuffer, 0, read_len);
			} else {
				readAtString = readAtString
						+ String.copyValueOf(cReaderBuffer, 0, read_len);
			}
			Log.i(TAG, "readAtString = " + readAtString);
			
		}
		return readAtString;

	}

到了这里,关于Android读取SIM卡ICCID的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android获取App冷启动、热启动时间

    启动模拟器或者连接手机,通过adb命令的方式获取App冷启动、热启动时间。 启动App的adb命令: -W:启动完成之后,返回启动耗时。 比如,我的packagename是com.example.myapplication,我的MainActivity的配置如下: 则adb启动命令为 一、冷启动时间(如果应用启动过,则从最近任务杀进程

    2024年02月05日
    浏览(80)
  • uni-app 获取android相册

    在uni-app中提供的封装好的api中没有提供获取手机相册的能力,只能打开相册后由用户选择其中的照片,而插件库中提供的获取相册的插件都是收费的,这里为大家分享一个可以自己获取android相册的代码段:

    2024年02月11日
    浏览(48)
  • Android 引入FFmpeg 读取RTSP流 解封装获取H264原始数据

    之前 写了Android中怎么引入FFMmpeg的例子 。 本编文章将会写一个简单的demo实现ffmpeg拉去rtsp流并在界面中打印前五个字节 懒得往下细看的可以点击这里下载工程 基于andorid studio  实际效果下图: android 用ffmpeg 拉取rtsp流 解出h264数据 看下目录结构: 很简单 应用进去之后有一个

    2024年02月03日
    浏览(54)
  • 【Android笔记98】Android小案例之APP应用程序管理(获取已安装应用、卸载应用)

    这篇文章,主要介绍Android小案例之APP应用程序管理(获取已安装应用、卸载应用)。 目录 一、应用管理APP小案例 1.1、运行效果 1.2、使用技术 1.3、案例代码

    2024年02月02日
    浏览(56)
  • APP备案(Android) - 获取签名证书公钥、MD5

    因为近期刚针对各应用平台对APP备案时间节点要求进行了统一整理,然后隔天就被要求提供一下app相关的的公钥和MD5,虽然很快就解决了这个事情,但忍不住又稍微衍生了一下,但行小步,莫问远方吧 关联Blog APP备案(Android) - 各应用平台对APP备案时间节点要求 APP备案(Android

    2024年02月04日
    浏览(55)
  • Android/iOS APP备案- MD5、公钥获取

    应工业和信息化部(工信部)要求, Android/iOS APP需要进行备案, 各备案平台要求填写应用APP的MD5、公钥、SHA-1值等。 以下通过Android、Windows、MacOS三个平台详细介绍获取方式。 APP备案流程:  Android/iOS APP备案流程 1、首先将需要获取MD5、公钥值的APP安装到Android手机; 2、在手机自带的

    2024年02月03日
    浏览(69)
  • Android 11以上获取不到第三方app是否安装

    开年第一篇,处理了一下年前的小问题。 问题:本地app跳转到第三方app地图进行导航,获取不到第三方地图是否安装。 解决: 1.添加包名  This can be done by adding a  queries  element in the Android manifest.在app下的manifest文件内manifest标签下添加 queries标签设置包名 2.MapUtil工具类 3.调用

    2024年02月19日
    浏览(57)
  • 使用android studio编译app到自己的手机上运行,却读取不了手机里面的图片

    问题描述: 使用android studio编译app到自己的手机上运行,却读取不了手机里面的图片 问题分析: 这个是由于这个app没有申请手机端的 媒体文件访问权限,所以读取不了 解决:(我的是Android 10,新版本可能会有不同) 查看AndroidManifest.xml这个文件,发现原来只有permission.CAM

    2024年01月17日
    浏览(55)
  • 将应用设置成系统App/获取Android设备SN号

    1,和系统签名一致;(签名设置+签名文件) 2,配置Manifest  至此你的App就是一个系统App了,可以执行一些系统App才能有的操作,如获取机器SN号:

    2024年02月13日
    浏览(44)
  • Android 12.0默认授予app获取序列号SerialNo权限

    在12.0的系统rom定制化中,在一些第三方app开发中,会获取序列号等属性,而在10.0以后的高版本对于获取系统属性的相关信息要求严格 必须有权限才可以,10.0以前的Android版本中,可以直接通过调用Build.SERIAL来获取序列号,在高版本中,为了保护个人隐私, 不让第三方应用轻

    2024年02月07日
    浏览(97)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包