取得电信网络与手机的相关信息

YOLOv5轻量化实战:从Ghost模块到工业级部署的完整指南 本文详细介绍了YOLOv5轻量化实战,重点解析了Ghost模块在工业检测中的应用及其优化策略。通过Ghost卷积技术,模型参数量和GFLOPs显著降低,同时保持高精度,适用于实时性要求严格的工业场景。文章还提供了从模型优化到TensorRT加速的完整部署指南,助力开发者实现高效工业级应用。 阅读详情

要取得SIM卡信息状态以及相关信息可以使用TelephonyManager对象来获取。

当然除了SIM卡信息外,TelephonyManager还可以用来取得电信网络的相关信息。例如电信网络国别、电信公司代码、电信公司名称和网络类型等等。甚至还可以取得每部手机的唯一的IMEI码与IMSI码。

除此之外,如果要取得手机内的设置值,如蓝牙、无线网络的设置状态,还可以通过Android API提供的android.provider.Settings.System.对象来取得。


当然activity_main.xml中首先需要有ListView

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" >
    </ListView>

</RelativeLayout>

item中只是用来显示title和详细信息

telephone_info_items.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/tel_title"
        android:layout_width="wrap_content"
        android:layout_height="18sp"
        android:layout_marginTop="5sp"
        android:text="title"
        android:textColor="@android:color/black"
        android:textSize="14sp" />

    <TextView
        android:id="@+id/tel_info"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:maxLines="2"
        android:text="info"
        android:textSize="22sp" />

</LinearLayout>

接下来是代码的实现

程序中以getSystemService(TELEPHONY_SERVICE)取得TelephonyManager对象,再通过TelephonyManager提供的方法取得电信网络相关信息。

另外,程序以android.provider.Settings.System.getString取得手机相关设置信息,并将取得的信息展示在ListView中。

MainActivity.java

package com.demo.telephoneInfo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.content.ContentResolver;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

public class MainActivity extends Activity {

	private TelephonyManager telMgr = null;
	private SimpleAdapter simpleAdapter = null;
	private List<Map<String, String>> list = new ArrayList<Map<String, String>>();
	private ListView lv = null;

	@SuppressWarnings("deprecation")
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		lv = (ListView) findViewById(R.id.listView1);

		telMgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);

		Map<String, String> map = new HashMap<String, String>();
		// 手机号码
		map.put("tel_title", "本机号码");
		if (telMgr.getLine1Number() != null) {
			map.put("tel_info", "开始"+telMgr.getLine1Number()+"结束");
		} else {
			map.put("tel_info", "无法获取");
		}
		list.add(map);

		// 取得电信网络国别
		 map = new HashMap<String, String>();
		map.put("tel_title", "电信网络国别");
		if (telMgr.getNetworkCountryIso() != null) {
			map.put("tel_info", telMgr.getNetworkCountryIso());
		} else {
			map.put("tel_info", "无法获取");
		}
		list.add(map);

		// 获取电信公司代码
		 map = new HashMap<String, String>();
		map.put("tel_title", "电信公司代码");
		if (telMgr.getNetworkOperator() != null) {
			map.put("tel_info", telMgr.getNetworkOperator());
		} else {
			map.put("tel_info", "无法获取");
		}
		list.add(map);

		// 获取电信公司名称
		 map = new HashMap<String, String>();
		map.put("tel_title", "电信公司名称");
		if (telMgr.getNetworkOperatorName() != null) {
			map.put("tel_info", telMgr.getNetworkOperatorName());
		} else {
			map.put("tel_info", "无法获取");
		}
		list.add(map);

		// 获取移动通信类型
		 map = new HashMap<String, String>();
		map.put("tel_title", "移动通信类型");
		if (telMgr.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM) {
			map.put("tel_info", "GSM");
		} else if (telMgr.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA) {
			map.put("tel_info", "CDMA");
		} else if (telMgr.getPhoneType() == TelephonyManager.PHONE_TYPE_SIP) {
			map.put("tel_info", "SIP");
		} else {
			map.put("tel_info", "未知");
		}
		list.add(map);

		// 获取网络类型
		 map = new HashMap<String, String>();
		map.put("tel_title", "网络类型");
		if (telMgr.getNetworkType() == TelephonyManager.NETWORK_TYPE_EDGE) {
			map.put("tel_info", "EDGE");
		} else if (telMgr.getNetworkType() == TelephonyManager.NETWORK_TYPE_GPRS) {
			map.put("tel_info", "GPRS");
		} else if (telMgr.getNetworkType() == TelephonyManager.NETWORK_TYPE_UMTS) {
			map.put("tel_info", "UMTS");
		} else if (telMgr.getNetworkType() == TelephonyManager.NETWORK_TYPE_HSDPA) {
			map.put("tel_info", "HSDPA");
		} else {
			map.put("tel_info", "未知");
		}
		list.add(map);

		// 获取漫游状态
		 map = new HashMap<String, String>();
		map.put("tel_title", "漫游状态");
		if (telMgr.isNetworkRoaming()) {
			map.put("tel_info", "漫游中");
		} else {
			map.put("tel_info", "无漫游");
		}
		list.add(map);

		// 获取手机IMEI
		 map = new HashMap<String, String>();
		map.put("tel_title", "手机IMEI");
		if (telMgr.getDeviceId() != null) {
			map.put("tel_info", telMgr.getDeviceId());
		} else {
			map.put("tel_info", "无法取得");
		}
		list.add(map);

		// 获取手机IMEI SoftwareVersion
		 map = new HashMap<String, String>();
		map.put("tel_title", "手机IMEI SoftwareVersion");
		if (telMgr.getDeviceSoftwareVersion() != null) {
			map.put("tel_info", telMgr.getDeviceSoftwareVersion());
		} else {
			map.put("tel_info", "无法取得");
		}
		list.add(map);

		// 获取手机IMSI
		 map = new HashMap<String, String>();
		map.put("tel_title", "手机IMSI");
		if (telMgr.getSubscriberId() != null) {
			map.put("tel_info", telMgr.getSubscriberId());
		} else {
			map.put("tel_info", "无法取得");
		}
		list.add(map);

		// 取得ContentResolver
		ContentResolver cv = this.getContentResolver();
		String tmpStr = null;

		// 获取蓝牙状态
		 map = new HashMap<String, String>();
		map.put("tel_title", "蓝牙状态");
		tmpStr = android.provider.Settings.System.getString(cv,
				android.provider.Settings.System.BLUETOOTH_ON);
		if ("1".equals(tmpStr)) {
			map.put("tel_info", "已打开");
		} else {
			map.put("tel_info", "未打开");
		}
		list.add(map);

		// 取得数据漫游是否打开
		 map = new HashMap<String, String>();
		map.put("tel_title", "数据漫游");
		tmpStr = android.provider.Settings.System.getString(cv,
				android.provider.Settings.System.DATA_ROAMING);
		if ("1".equals(tmpStr)) {
			map.put("tel_info", "已打开");
		} else {
			map.put("tel_info", "未打开");
		}
		list.add(map);

		// 取得WIFI数据
		 map = new HashMap<String, String>();
		map.put("tel_title", "WIFI数据");
		tmpStr = android.provider.Settings.System.getString(cv,
				android.provider.Settings.System.WIFI_ON);
		if ("1".equals(tmpStr)) {
			map.put("tel_info", "已打开");
		} else {
			map.put("tel_info", "未打开");
		}
		list.add(map);

		// 取得飞行模式
		 map = new HashMap<String, String>();
		map.put("tel_title", "飞行模式");
		tmpStr = android.provider.Settings.System.getString(cv,
				android.provider.Settings.System.AIRPLANE_MODE_ON);
		if ("1".equals(tmpStr)) {
			map.put("tel_info", "已打开");
		} else {
			map.put("tel_info", "未打开");
		}
		list.add(map);

		simpleAdapter = new SimpleAdapter(this, list,
				R.layout.telephone_info_items, new String[] { "tel_title",
						"tel_info" },
				new int[] { R.id.tel_title, R.id.tel_info });

		lv.setAdapter(simpleAdapter);

		lv.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3) {
				Toast.makeText(
						MainActivity.this,
						list.get(arg2).get("tel_title") + "的状态/内容为"
								+ list.get(arg2).get("tel_info"),
						Toast.LENGTH_LONG).show();

			}
		});

	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

做完以上基本程序已经开发完毕。附上权限即可。

    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>

效果如图



有一问题,真机测试电话号码无法显示,希望大佬告知一下。谢谢。

1.深入浅出:理解三极管截止、放大和饱和状态!——参考《模拟电子技术基础》清华大学华成英主讲 幼儿园水平理解三极管截止、放大和饱和状态!书上看不懂,听课听不懂的过来! 绕不开的三极管结构 以NPN为例,晶体三极管的结构,这是很多人不想看的,但是确实是非常重要的!不看结构是理解不了工作原理的! (这样记忆:N是negative,负,代表多子为电子;P是positive,正,代表多子为空穴) 注意观察三极管的结构,有助于理解工作时的状态。 两张图结合起来看,略作解释: 1.图中空心为空穴带正... 阅读详情

相关推荐

实战解析:基于Python的APT攻击检测与ATT&CK框架应用

本文通过实战案例,详细解析了如何利用Python编程语言结合MITRE ATT&CK框架,构建一套针对高级持续性威胁(APT)的自动化检测与狩猎系统。文章涵盖了从环境搭建、核心检测逻辑编写、到模块化框架设计与主动威胁狩猎的全过程,为安全从业者提供了可落地的技术方案,以有效应对复杂的网络攻击。

weixin_29044157的博客 389

Android之TelephonyManager类的方法详解

    TelephonyManager类主要提供了一系列用于访问与手机通讯相关的状态和信息的get方法。其中包括手机SIM的状态和信息、电信网络的状态及手机用户的信息。在应用程序中可以使用这些get方法获取相关数据。     TelephonyManager类的对象可以通过Context.getSystemService(Context.TELEPHONY_SERVICE)方法来获得,需要注意...

weixin_34268753的博客 390

故障转移集群无法连接到节点_Windows 2012系统群集故障转移集群

理论知识很重要!集群和群集是什么意思?其实看到标题可能会感觉有点绕,简单易懂的来说一下:集群,英文名称为Cluster,集群的意思就是将多个系统连接在一起,可以让多台服务器能够像一台服务器那样工作。通常采用集群系统是为了提高系统的稳定性和网络中心的数据处理能力以及服务能力。第二个就是:群集,其实这个概念也不难理解,群集是把多个计算机连接在一起,形成整形,随后可以更好的利用设备资源的一项新...

weixin_39535283的博客 3251

取得电信网络与手机的相关信息——TelephonyManager 与 System 的应用

TelephonyManager  可以取得当前的手机所在电信网络相关信息,System取得手机的相关信息与设置如蓝牙、无线网络的设置状态 示例程序运行示意图如下:   获取TelephonyManager 对象和使用android.provider.Settings.System 的方式如下 TelephonyManager   telMgr = (TelephonyManager)ge

daozhongyang的专栏 941

手把手教你利用qemu搭建银河麒麟V11 arm环境

在Windows环境下,初学者或企业用户常通过VMware、VirtualBox等虚拟机软件安装Ubuntu、Red Hat等Linux系统,这类工具更侧重X86等复杂指令集架构(CISC,常见于Intel、AMD处理器)的虚拟化。而QEMU是一款开源的虚拟机监视器与模拟器,核心优势在于可模拟ARM、MIPS、RISC-V等精简指令集架构(RISC)的处理器并提供虚拟化能力,更适合对虚拟化技术有一定了解的用户。可能是电脑性能问题,安装过程比较慢,需要耐心等待。等操作系统下载完成后,进行安装了。

huanhuanzhou blog 2455

手把手教你为FPGA项目集成HyperRAM IP核:从AXI接口封装到上板调试全流程

本文详细介绍了如何为FPGA项目集成HyperRAM IP核,涵盖从AXI接口封装到上板调试的全流程。通过对比DDR3L、PSRAM和HyperRAM的性能指标,突出HyperRAM在低功耗和小封装尺寸方面的优势,并提供硬件连接、AXI4-Lite接口设计、状态机优化及调试技巧等实用内容,帮助开发者高效完成FPGA项目中的内存扩展。

weixin_32103009的博客 286

取得电信网络和手机的相关信息之TelephonyManager与android.provider.settings.System

<br />      除了SIM卡的相关信息之外,我们可以使用TelephonyManager来获取电信网络的相关信息。例如电信网络国别、电信网络国别、代码、名称、网络类型等。<br />初次之外,我们要想获得蓝牙、无限网络等手机内置值,我们可以通过android.provider.settings.System来获取。<br />至于TelephonyManager这个类,我们前边已经介绍过了。现在,我们来看看android.provider.settings.System.<br />/***

梦中一夜下江南 4194

51单片机 驱动有源/无源蜂鸣器+Proteus仿真

51单片机 驱动有源/无源蜂鸣器+Proteus仿真 相关篇《51单片机 Proteus仿真有源蜂鸣器始终不响原因及解决方法》 电路搭建 采用NPN管驱动有源蜂鸣器电路 采用PNP管驱动有源蜂鸣器电路 采用PNP管驱动无源蜂鸣器 采用NPN管驱动无源蜂鸣器 Proteus元器件列表 实例代码 /************************************************************************************* * 实验现象:下载程序

perseverance51博客 2万+

电信技术名词解释:GSM、GSM900及GSM1800

电信技术名词解释:GSM、GSM900及GSM1800http://www.sina.com.cn 2004年07月24日 23:06 新浪科技  GSM全名为:Global System for Mobile Communications,中文为全球移动通讯系统,俗称"全球通",由欧洲开发的数字移动电话网络标准,它的开发目的是让全球各地共同

皮建华的专栏 2746

【Claude】权限被拒绝 (Permission Denied) 全场景排查 — 已解决

权限配置是 Claude Code 安全使用的核心机制。通过合理的 allow/deny 规则、正确的通配符使用、子代理独立配置、定期安全审计,可以在保证安全性的同时不影响开发效率。deny 优先:deny 规则优先级高于 allow,先保护敏感资源通配符精确单层匹配,**递归匹配,Bash(cmd*)允许带参数最小权限:只允许必要的操作,避免Bash(*)等危险规则CI 用 skip:Headless 模式用避免挂起子代理独立:每个子代理单独配置权限,不自动继承保护密钥:deny.env。

一键难忘的博客 3946

视觉自动对焦(Z 轴运动 + 相机拍照 + 清晰度计算) 的核心程序

控制 Z 轴匀速扫动一段距离,在移动过程中等间距触发相机拍照,后台计算每张图的清晰度,最后移动到最清晰的位置,完成自动对焦。

StevenChen的博客 307

专题:2005年通信产业十大热门趋势预测

编者按: 2004年是通信产业反展的重要一年,在行业步出“电信冬天”的新一年,业界明现感受到“春”的暖意。如此,2005年更值得业界期待。而行业发展所堆积的诸多因素,使得2005年注定要成为中国通信产业发展历史上关键一年,也许深刻变革历史,也许深远影响未来。备受关注的中国3G策略,在2005年将会明朗,这将深刻变革中国无线通信产业格局和模式,由此带来的规模巨大的网络建设和真正启动的无线内容经济,将

网络精英-服务日 1638

《大数据: Hive 交互命令和常用配置》

一、Hive 交互命令 1. 首先解决一个可能发生的问题 (log4 jar包冲突) 我这里解决方法就是删除一个,我删的是hive下的包 yexiang@hadoop1:<hive>$ hive SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/opt/soft/apache-hive-2.3.7-bin/lib/log4j-slf4j-impl-2.6.2.ja.

yexiang优快云的专栏 289

BREW手机中的相关参数说明(下)

5 网络信息 手机的网络信息一般包括两个方面:电信网络信息和互联网信息。电信网络信息指IS-95A,IS-95B,CDMA1x,EV-DO,UMTS等等,同时指明相应的无线频率800MHz, 1500MHz, 1800MHz, 1900MHz等。 互联网信息包括手机可以同时支持的TCP和UDP的数目,早期的BREW手机至少支持1个TCP和1个UDP连接,BREW 2.x的手机至少同时支持3个...

hulunberbus 101

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

ListView展示网络服务信息 (SIM信息的扩展)!

先来看下程序运行的图片: 程序的框架如下: 代码部分,第一步,主程序代码,同样把注释写到了程序当中: /** * 这个应用是取得sim卡信息的扩展,只是多取得了一些电信网络与手机的相关信息,其他基本相同 */ public class GetSIMinfoExpand extends Activity { private TelephonyMan...

weixin_30610755的博客 158

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Android 获取手机SIM资料详解

TelephonyManager类主要提供了一系列用于访问与手机通讯相关的状态和信息的get方法。其中包括手机SIM的状态和信息、电信网络的状态及手机用户的信息。在应用程序中可以使用这些get方法获取相关数据。 TelephonyManager类的对象可以通过 Context.getSystemService(Context.TELEPHONY_SERVICE)方法来获得,需要注意的是

1338

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

android 获取 imei号码

SIM卡的状态必须是 SIM_STATE_READY(使用getSimState()判断).SIM_STATE_PIN_REQUIRED 锁定状态,需要用户的PIN码解锁 2。SIM_STATE_PUK_REQUIRED 锁定状态,需要用户的PUK码解锁 3。SIM_STATE_NETWORK_LOCKED 锁定状态,需要网络的PIN码解锁 4。NETWORK_TYPE_EVDO_A EVDO网络, revision A. 6。

2401_85763924的博客 1202

手机网络及运营商网络,2G,3G,TDSCDMA,WCDMA,CDMA2000

一般的人对手机网络及该使用什么卡一定很混乱,本人也是,所以在网上收集了一些信息,供大家参考下 三家运营商的网络 移动是TDSCDMA (中国标准) 联通是WCDMA   (欧洲标准) 电信是CDMA2000 EVDO(美国标准)   1:是这样的。2G的网络:中国移动和中国联通的网络模式是一样的(GSM模式),手机和卡可以互用。2G中中国电信的网络模式是CDMA,不可以和移动联通互用。

胡杰的专栏 6353

imsi 编码规则

MCC:  移动国家码,三个数字,如中国为 460 MNC:移动网号,两个数字,如中国移动的MNC为00(联通是01,移动159新号段是02,更多在此) MSIN:移动客户识别号,在某一PLMN中移动台的唯一识别码,MSIN=H0H1H2H3(S)XXXXXX(共11位) 中国移动网络编号:46000、46002、46007 (国家码+网号) 中国移动网络段号: 段号代码

cherry 的专栏 1万+

电信业务字段含义

Package Type: FTTx 光钎接入 WTTX(CPE)无线宽带 Cable有线电视电缆 LTE移动数据 Package_FMC:待定 Package Name套餐名称 Package Price套餐价格 PLN每月套餐价格 Contract合同期限 without obligation无合约 Installation PLN安装 Activation PLN激活...

weixin_42024830的博客 395

Android之TelephonyManager类

  TelephonyManager类是做应用时必须的工具。该类主要提供了一系列用于访问与手机通讯相关的状态和信息的get方法。其中包括手机SIM的状态和信息、电信网络的状态及手机用户的信息。TelephonyManager类的对象可以通过Context.getSystemService(Context.TELEPHONY_SERVICE)方法来获得,然后可以使用get方法获取相关数据。   注...

weixin_30949361的博客 138

电信客户流失预测----科大讯飞xDataWhale

记录第一次参加正式的数据挖掘竞赛,由科大讯飞xDatawhale举办的《电信客户流失预测挑战赛》

tiantizzz的博客 1772

TelephonyManager类的方法详解[Android]

TelephonyManager类主要提供了一系列用于访问与手机通讯相关的状态和信息的get方法。其中包括手机SIM的状态和信息、电信网络的状态及手机用户的信息。在应用程序中可以使用这些get方法获取相关数据。     TelephonyManager类的对象可以通过Context.getSystemService(Context.TELEPHONY_SERVICE)方法来获得,需要注意的是有些

xak的专栏 793

读取SIM卡的状态理论说明

最近要用到读取联系人的功能,那么联系人保存在两个地方,一个是SIM卡,就是我们的手机卡;另一个就是手机本地数据库中保存的联系人信息。大家可以拿出自己的手机,选定某一个联系人,点击功能菜单,你会发现有一个选项是同步到SIM卡或者手机,这样就是说:你可以把联系人只保存在SIM卡上,或者只保存在手机本地数据库中,但是这样,当你的手机没电了,你想把卡放在别人手机上的时候,你的电话号码就很会没有你原来手机本

sonicliji的专栏 1139

第86章、系统服务之TELEPHONY_SERVICE(从零开始学Android)

  TelephonyManager类主要提供了一系列用于访问与手机通讯相关的状态和信息的get方法。其中包括手机SIM的状态和信息、电信网络的状态及手机用户的信息。在应用程序中可以使用这些get方法获取相关数据。 TelephonyManager类的对象可以通过Context.ge...

chenliaolve8143的博客 662
上一篇: 仿QQ列表--Android控件ExpandableListView的使用
下一篇: Cocos2dx Cannot find module with tag 'CocosDenshion/android' in import path
mr_same
博客等级 码龄17年 8粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值