【Android】获取设备的基本服务信息

本文详细介绍了TelephonyManager类的功能及使用方法,包括如何获取手机基本信息和服务状态,如何监听电话状态变化,并提供了相关代码示例。
TelephonyManager提供了取得手机基本服务的信息的一种方式。因此应用程序可以使用TelephonyManager来探测手机基本服务的情况。
应用程序也可以注册listener来监听电话状态的改变。
我们不能对TelephonyManager进行实例化,只能通过如下的形式得到对其实例的引用:
Context.getSystemService(Context.TELEPHONY_SERVICE).
注意:对手机的某些信息进行读取是 需要一定许可(permission)的。
可以通过在manifest file中添加一定的许可(permission),以便来对对手机的某些信息进行读取。



先是Java代码

[java]  view plain copy
  1. TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);  
  2.         StringBuilder sb = new StringBuilder();  
  3.         sb.append("\nDeviceId(IMEI) = " + tm.getDeviceId());  
  4.         sb.append("\nDeviceSoftwareVersion = " + tm.getDeviceSoftwareVersion());  
  5.         sb.append("\nLine1Number = " + tm.getLine1Number());  
  6.         sb.append("\nNetworkCountryIso = " + tm.getNetworkCountryIso());  
  7.         sb.append("\nNetworkOperator = " + tm.getNetworkOperator());  
  8.         sb.append("\nNetworkOperatorName = " + tm.getNetworkOperatorName());  
  9.         sb.append("\nNetworkType = " + tm.getNetworkType());  
  10.         sb.append("\nPhoneType = " + tm.getPhoneType());  
  11.         sb.append("\nSimCountryIso = " + tm.getSimCountryIso());  
  12.         sb.append("\nSimOperator = " + tm.getSimOperator());  
  13.         sb.append("\nSimOperatorName = " + tm.getSimOperatorName());  
  14.         sb.append("\nSimSerialNumber = " + tm.getSimSerialNumber());  
  15.         sb.append("\nSimState = " + tm.getSimState());  
  16.         sb.append("\nSubscriberId(IMSI) = " + tm.getSubscriberId());  
  17.         sb.append("\nVoiceMailNumber = " + tm.getVoiceMailNumber());  
  18.         Log.e("info", sb.toString());   

然后是Manifest.xml中的权限代码

[java]  view plain copy
  1. <uses-permission android:name="android.permission.READ_PHONE_STATE" />  


我们把获得的内容信息展示到屏幕上,方便阅览。

由于我在家中是用的虚拟机,因此一些信息无法正常显示,先呈上一个虚拟机运行的效果图,实机的会过几天补上。



主要静态成员常量:
手机的 通话状态:(它们对应PhoneStateListener. LISTEN_CALL_STATE
int  CALL_STATE_IDLE  Device call state: No activity.
Device call state: No activity. 
空闲。没有任何活动。
int  CALL_STATE_OFFHOOK  Device call state: Off-hook.
Device call state: Off-hook. At least one call exists that is dialing, active, or on hold, and no calls are ringing or waiting. 
摘机状态。至少有个电话活动。该活动或是拨打(dialing)或是通话,或是 on hold。并且没有电话是ringing or waiting
:on hold的意思是暂时挂起。比如在进行通话A的时候,来了个新的电话B,我们暂时挂起通话A,等通话B结束了,才继续进行A的通话。
int  CALL_STATE_RINGING  Device call state: Ringing.
Device call state: Ringing. A new call arrived and is ringing or waiting. In the latter case, another call is already active. 
来电。来电,电话铃声响起的那段时间或正在通话又来新电,新来电话不得不等待的那段时间。
数据连接活动状态(它们对应PhoneStateListener. LISTEN_DATA_ACTIVITY
int  DATA_ACTIVITY_DORMANT 
Data connection is active, but physical link is down
int  DATA_ACTIVITY_IN 
Data connection activity: Currently receiving IP PPP traffic.
int  DATA_ACTIVITY_INOUT 
Data connection activity: Currently both sending and receiving IP PPP traffic.
int  DATA_ACTIVITY_NONE 
Data connection activity: No traffic.
int  DATA_ACTIVITY_OUT 
Data connection activity: Currently sending IP PPP traffic.
数据连接状态(它们对应PhoneStateListener. LISTEN_DATA_CONNECTION_STATE )
int   DATA_CONNECTED 
Data connection state: Connected.
int  DATA_CONNECTING 
Data connection state: Currently setting up a data connection.
int  DATA_DISCONNECTED 
Data connection state: Disconnected.
int  DATA_SUSPENDED 
Data connection state: Suspended.
数据传送的网络类型
int  NETWORK_TYPE_1xRTT 
Current network is 1xRTT
int  NETWORK_TYPE_CDMA 
Current network is CDMA: Either IS95A or IS95B
int  NETWORK_TYPE_EDGE 
Current network is EDGE
int  NETWORK_TYPE_EHRPD 
Current network is eHRPD
int  NETWORK_TYPE_EVDO_0 
Current network is EVDO revision 0
int  NETWORK_TYPE_EVDO_A 
Current network is EVDO revision A
int  NETWORK_TYPE_EVDO_B 
Current network is EVDO revision B
int  NETWORK_TYPE_GPRS 
Current network is GPRS
int  NETWORK_TYPE_HSDPA 
Current network is HSDPA
int  NETWORK_TYPE_HSPA 
Current network is HSPA
int  NETWORK_TYPE_HSUPA 
Current network is HSUPA
int  NETWORK_TYPE_IDEN 
Current network is iDen
int  NETWORK_TYPE_LTE 
Current network is LTE
int  NETWORK_TYPE_UMTS 
Current network is UMTS 
int  NETWORK_TYPE_UNKNOWN 
Network type is unknown
语音传送的网络类型
int  PHONE_TYPE_CDMA 
Phone radio is CDMA.
int  PHONE_TYPE_GSM 
Phone radio is GSM.
int  PHONE_TYPE_NONE 
No phone radio.
int  PHONE_TYPE_SIP 
Phone is via SIP.
SIM卡状态
int  SIM_STATE_ABSENT 
SIM card state: no SIM card is available in the device
int  SIM_STATE_NETWORK_LOCKED 
SIM card state: Locked: requries a network PIN to unlock
int  SIM_STATE_PIN_REQUIRED 
SIM card state: Locked: requires the user's SIM PIN to unlock
int  SIM_STATE_PUK_REQUIRED 
SIM card state: Locked: requires the user's SIM PUK to unlock
int  SIM_STATE_READY 
SIM card state: Ready
int  SIM_STATE_UNKNOWN 
SIM card state: Unknown.
手机 通话状态广播中的对应值
public static final String  EXTRA_STATE_IDLE 
Value used with EXTRA_STATE corresponding to CALL_STATE_IDLE.
它在手机通话状态改变的广播中,用于表示CALL_STATE_IDLE状态
public static final String  EXTRA_STATE_OFFHOOK 
Value used with EXTRA_STATE corresponding to CALL_STATE_OFFHOOK.
它在手机通话状态改变的广播中,用于表示CALL_STATE_OFFHOOK状态
public static final String  EXTRA_STATE_RINGING 
Value used with EXTRA_STATE corresponding to CALL_STATE_RINGING.
它在手机通话状态改变的广播中,用于表示CALL_STATE_RINGING状态
String  ACTION_PHONE_STATE_CHANGED 
Broadcast intent action indicating that the call state (cellular) on the device has changed.
The EXTRA_STATE extra indicates the new call state. If the new state is RINGING, a second extra EXTRA_INCOMING_NUMBER provides the incoming phone number as a String.
Requires the  READ_PHONE_STATE permission.
This was a sticky broadcast in version 1.0, but it is no longer sticky. Instead, use getCallState() to synchronously query the current call state.
在广播中如果用Action是ACTION_PHONE_STATE_CHANGED来 标示它是 通话状态改变的广播
:需要许可READ_PHONE_STATE。
String  EXTRA_INCOMING_NUMBER  The lookup key used with the ACTION_PHONE_STATE_CHANGED 
broadcast for a String containing the incoming phone number.
在手机通话状态改变的广播,用于从extra取来电号码。
String  EXTRA_STATE  The lookup key used with the ACTION_PHONE_STATE_CHANGED 
broadcast for a String containing the new call state.
在通话状态改变的广播,用于从extra取来通话状态。
主要成员函数:
public int  getCallState()
Returns a constant indicating the call state (cellular) on the device.
取得手机的通话状态。
public CellLocation  getCellLocation ()
Returns the current location of the device. Return null if current location is not available.
返回手机当前所处的位置。如果当前定位服务不可用,则返回null
注:需要许可(Permission)ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION.
public int  getDataActivity ()
Returns a constant indicating the type of activity on a data connection (cellular).
返回当前数据连接活动状态的情况。
public int  getDataState ()
Returns a constant indicating the current data connection state (cellular).
返回当前数据连接状态的情况。
public String  getDeviceId ()
Returns the unique device ID, for example, the IMEI for GSM and the MEID or ESN for CDMA phones. Return null if device ID is not available.
返回手机的设备ID。比如对于GSM的手机来说是IMEI码,对于CDMA的手机来说MEID码或ESN码。如果读取失败,则返回null。
:需要许可(Permission)READ_PHONE_STATE
:手机上的IMEI就是手机身份识别号码。IMEI码贴在手机背面的标志上,并且读写于手机内存中。它也是该手机在厂家的"档案"和"身份证号"。
关于IMEI的更多内容参考《手机身份识别码之IMEI》
public String  getDeviceSoftwareVersion ()
Returns the software version number for the device, for example, the IMEI/SV for GSM phones. Return null if the software version is not available.
返回手机软件版本号。比如对于GSM手机返回的是IMEI/SV码。如果读取失败,则返回null。
注1:需要许可(Permission)READ_PHONE_STATE
注2:按照文档该函数返回的还是IMEI和getDeviceId ()一样。不解。
String  getLine1Number ()
Returns the phone number string for line 1, for example, the MSISDN for a GSM phone. Return null if it is unavailable.
返回手机的Line1Number。比如对于GSM手机返回的是MSISDN码。如果读取失败,则返回null。
注1:需要许可(Permission)READ_PHONE_STATE
注2:关于MSISDN的更多内容请参考《MSISDN(唯一能识别移动用户的号码)》
public List<NeighboringCellInfo>  getNeighboringCellInfo ()
Returns the neighboring cell information of the device.
Returns
    * List of NeighboringCellInfo or null if info unavailable.
返回手机的neighboring cell信息
      :文档上说需要许可(Permission)ACCESS_COARSE_UPDATES,但是在android.Manifest.permission中却找不到该常量。
public String  getNetworkCountryIso ()
Returns the ISO country code equivalent of the current registered operator's MCC (Mobile Country Code).
返回网络所在的国家代码(ISO标准形式)
注1: 只有手机注册到了网络,该功能才可用. 
注2:如果是在CDMA的网络中,返回的结果可能不可靠(可通过getPhoneType()来判断是否在CDMA网络中)。
public String  getNetworkOperator ()
Returns the numeric name (MCC+MNC) of current registered operator.
返回当前网络提供商的数字名字(MCC+MNC的形式)
如果是在CDMA的网络中,返回的结果可能不可靠(可通过getPhoneType()来判断是否在CDMA网络中)。
:MCC(Mobile Country Code,移动国家号码),用于唯一地标识移动客户属于的国家。它由三位十进制数组成(000-999),例如我国的MCC为460
public String  getNetworkOperatorName ()
Returns the alphabetic name of current registered operator.
返回当前网络提供商的名字(字母形式)
如果是在CDMA的网络中,返回的结果可能不可靠(可通过getPhoneType()来判断是否在CDMA网络中)。
public int  getNetworkType ()
Returns a constant indicating the radio technology (network type) currently in use on the device for data transmission.
返回用于传输数据的网络的无线类型。比如GPRS
public int  getPhoneType ()
Returns a constant indicating the device phone type. This indicates the type of radio used to transmit voice calls.
返回手机用于传输语言的无线类型。比如GSM,CDMA
public String  getSimCountryIso ()
Returns the ISO country code equivalent for the SIM provider's country code.
返回SIM卡提供商的国家代码。
public String getSimOperator ()
Returns the MCC+MNC (mobile country code + mobile network code) of the provider of the SIM. 5 or 6 decimal digits.
返回SIM卡的提供商代码,以MCC+MNC的形式(mobile country code + mobile network code)。该码是5或6为的十进制形式。
:只有SIM的状态是SIM_STATE_READY的时候,该功能才可用。
public String  getSimOperatorName ()
Returns the Service Provider Name (SPN).
返回SIM卡服务商的名字。
注:只有SIM的状态是SIM_STATE_READY的时候,该功能才可用。
public String  getSimSerialNumber ()
Returns the serial number of the SIM, if applicable. Return null if it is unavailable.
返回SIM卡的编码。如果读取失败,则返回null。
注:需要许可(Permission)READ_PHONE_STATE
public int  getSimState ()
Returns a constant indicating the state of the device SIM card.
返回SIM卡的状态
public String  getSubscriberId ()
Returns the unique subscriber ID, for example, the IMSI for a GSM phone. Return null if it is unavailable.
返回国际移动用户识别码。对于GSM手机来说是IMSI。如果读取失败,则返回null。
注1:imsi是国际移动用户识别码。它主要是用于国际漫游的。这个对用户来说应该是透明的。关于imsi的更多内容可参考《国际移动用户识别码imsi》
注2:需要许可(Permission)READ_PHONE_STATE
public String  getVoiceMailAlphaTag ()
Retrieves the alphabetic identifier associated with the voice mail number.
使用语言邮箱号得到其字母形式的标识符(和语音邮件相关的标签)
注:需要许可(Permission)READ_PHONE_STATE
public String  getVoiceMailNumber ()
Returns the voice mail number. Return null if it is unavailable.
得到语音邮箱码。
:需要许可(Permission)READ_PHONE_STATE
public boolean  hasIccCard ()
Returns
    * true if a ICC card is present 
    ICC卡是否存在
public boolean  isNetworkRoaming ()
Returns true if the device is considered roaming on the current network, for GSM purposes.
查看是否在漫游。
:它只在GSM下使用。
public void  listen (PhoneStateListener listener, int events)
Registers a listener object to receive notification of changes in specified telephony states.
To register a listener, pass a PhoneStateListener and specify at least one telephony state of interest in the events argument. At registration, and when a specified telephony state changes, the telephony manager invokes the appropriate callback method on the listener object and passes the current (udpated) values.
To unregister a listener, pass the listener object and set the events argument to LISTEN_NONE (0).
Parameters
listener  The PhoneStateListener object to register (or unregister)
events  The telephony state(s) of interest to the listener, as a bitwise-OR combination of PhoneStateListener LISTEN_ flags. 
可以通过PhoneStateListener listener来监听手机的状态。
1:unregister是通过把events设置为LISTEN_NONE (0)来实现的。
2:PhoneStateListener除了可以监听手机的通话状态,数据连接活动状态,数据连接状态还可以监听很多状态。
具体见《PhoneStateListener》
3:手机的通话状态可以通过Receiver来监听,具体见上面关于ACTION_PHONE_STATE_CHANGED的说明.

工程资源:http://download.youkuaiyun.com/detail/etzmico/3839135

/****************************************************************************************************

转载请标明出处,原文地址:http://blog.youkuaiyun.com/etzmico/article/details/7009571

****************************************************************************************************/


源码地址: https://pan.quark.cn/s/44d07910d9c3 标题“PCBM_LP_Viewer_V2009”标识了一种专门服务于PCB焊盘构建的软件应用,其版本号记录为2009。 该软件的核心用途在于辅助用户依照IPC7351国际标准来构建精密的焊盘构造,从而保障电子设备的稳定运行与生产品质。 PCB焊盘在印制电路板(Printed Circuit Board)的设计环节中占据核心地位,它承担着将电子元件的引脚与电路板进行电气连接的任务,确保两者间的连接性能。 焊盘的构造规划对焊接成效及整个电路板的运作效能具有直接影响。 在PCBM LP Viewer V2009软件中,使用者能够借助前沿的工具与参数设定,对焊盘的形态、尺寸、间距等要素进行个性化定制,以适应不同元器件与实际应用场景的要求。 IPC7351是由国际电子互连技术协会颁布的一套规范体系,它为电子产品的焊盘构建提供了统一的准则。 该规范体系涉及焊盘的尺寸规格、形态样式、热管理效能、机械耐力等多个维度,致力于提升焊盘的工作表现,减少生产过程中的瑕疵,增强电子产品在高温条件下的运行稳定性。 PCBM LP Viewer V2009软件严格遵循这一规范体系,使得设计人员能够便捷地构建出符合要求的焊盘,进而降低设计过程中的潜在风险,提高产品的整体质量。 操作PCBM LP Viewer V2009软件时,用户可以体验到以下特性:1. **图形化界面**:设计出直观且操作简便的界面,让焊盘设计流程更为顺畅。 2. **自定义参数**:能够根据元器件的具体规格对焊盘的尺寸、形态及孔径等参数进行灵活调整。 3. **自动计算**:软件能够自动核算出最优的焊盘尺寸,并按照IPC7351标准进行优化处理。 4. **...
代码下载地址: https://pan.quark.cn/s/5c2ff67041b8 在Android应用构建过程中,ListView被广泛采用作为一个展示大量数据条目的控件。 该控件具备出色的数据滚动处理能力,能够依据可用屏幕空间进行视图的动态加载与回收,以此实现内存的有效节省。 本文将详细阐述在Android平台如何构建一个ListView,并展示如何使其包含多种不同规格的条目。 1. **ListView的构成框架** ListView由一系列视图(条目)构成,每个视图对应数据集中的单个数据项。 这些条目通过适配器进行连接,适配器负责建立数据与视图的联系,并决定数据在ListView中的呈现方式。 2. **适配器的设计** 在Android系统里,通常选用BaseAdapter或者诸如ArrayAdapter、CursorAdapter等预设适配器来为ListView提供适配服务。 适配器需要重新设计以下功能: - `getCount()`: 返回ListView中包含的条目总数。 - `getItem(int position)`: 根据指定位置提取数据对象。 - `getItemId(int position)`: 获取指定位置条目的唯一标识符,一般返回位置索引值。 - `getView(int position, View convertView, ViewGroup parent)`: 为ListView生成或复用条目视图。 这是适配器的关键部分,依据数据对象和可复用的视图来填充条目内容。 3. **定制化适配器** 当ListView需要展示多种格式条目时,可以设计专属的适配器。 在`getView()`方法中,依据数据类型返回不同的视图样式。 可以通过检查数据对...
源码地址: https://pan.quark.cn/s/db95d26ecc9b “图书管理(借阅)”小程序作为一个入门级项目,主要运用C#编程语言进行开发,通过整合tabControl控件,致力于构建一个基础的图书管理平台,其核心功能在于图书信息的维护以及借阅流程的处理。 对于希望掌握C#及Windows应用程序开发的初学者而言,该项目提供了一个理想的实践环境。 在C#开发环境中,tabControl被视作一种常见的界面组件,它赋予了用户在不同标签页间切换以组织与展示信息的能力。 在此图书管理应用中,tabControl或许被用于划分不同的功能模块,诸如“图书目录”、“借阅详情”和“用户档案”等,使用者借此能够便捷地在各项功能间切换操作。 图书管理系统的数据管理通常依赖于数据库技术。 依据描述,该应用内含数据库文件,但作者指出“运行时需自行添加”,暗示数据库可能并未与项目原生集成,使用者必须手动进行配置或导入数据库方可正常运行。 数据库的构建可能包含书籍资料表(涵盖书名、作者、出版社、存量等字段)、借阅记录表(涉及借阅者、借阅时段、归还时段等字段)以及用户资料表(包含用户名、密码、联络方式等字段)。 在现实中的图书管理平台,为了完成借阅操作,开发者需设计逻辑以处理以下任务:1. **新增/修改书籍信息**:赋予管理员录入新书籍资料或更新现有书籍详情的权限。 2. **检索书籍**:使用者可依据书名、作者等条件查询书籍。 3. **执行借阅**:用户选择借书时,系统将核查库存,并修正借阅记录,同步减少相应书籍的存量。 4. **处理还书**:书籍归还时,系统将更新借阅记录并补充库存。 5. **用户账户管理**:涵盖注册、登录、调整个人资料等操作。 6. **权限管理**:区分普通...
<think>好的,用户想在荣耀平板V9 Pro的电脑模式下安装PyCharm。首先,我需要确认荣耀平板V9 Pro的操作系统是什么。根据之前的引用信息,用户提到的安装教程有MAC、Windows和Linux的,但平板通常是基于Android系统的。不过,电脑模式可能类似于桌面环境,比如华为的EMUI电脑模式,可能还是基于Android的,而不是Windows或Linux。 接下来,PyCharm是否有官方的Android版本?根据已知信息,JetBrains官网提供的PyCharm有Windows、macOS和Linux版本,没有提到Android支持。因此,在Android设备上直接安装PyCharm可能不可行。 用户可能需要通过其他方法,比如使用远程桌面连接到PC,或者在平板上安装Linux系统,再安装PyCharm。但荣耀平板V9 Pro是否支持安装Linux呢?这需要查看设备的硬件和系统是否允许。或者,用户可能考虑使用Termux这样的Android终端模拟器,安装Python环境,但PyCharm作为IDE可能需要图形界面支持,这在Termux中可能比较复杂。 另外,用户提到电脑模式,可能平板连接了键盘和鼠标,模拟桌面操作。但即使如此,Android系统本身不支持直接运行PyCharm。可能需要寻找替代方案,比如使用在线IDE,或者通过云开发环境访问PyCharm。 根据引用[4],在Linux下安装PyCharm需要下载Linux版本,解压并运行脚本。如果用户能在平板上安装Linux系统,可能可行,但这对普通用户来说难度较大。或者,使用类似UserLAnd的App在Android上运行Ubuntu,然后按照引用[4]的步骤安装PyCharm。 总结可能的步骤:1. 确认设备是否支持Linux环境;2. 安装Linux系统或使用模拟器;3. 下载Linux版PyCharm并安装;4. 配置Python解释器。但这个过程复杂,可能不适合所有用户。因此,可能需要建议替代方案,如使用在线IDE或远程开发。</think>在荣耀平板V9 Pro的电脑模式下安装PyCharm需注意以下要点: 1. **系统兼容性确认** PyCharm官方仅支持Windows/macOS/Linux系统,而荣耀平板V9 Pro的电脑模式基于Android系统,**无法直接安装原生PyCharm**。需通过以下替代方案实现: 2. **替代方案一:远程开发** - 在PC端安装PyCharm并启用远程访问[^2] - 平板上安装远程桌面工具(如Microsoft Remote Desktop)连接PC - 通过PC运行PyCharm,平板作为显示终端操作 3. **替代方案二:Linux环境模拟** 使用Termux+Proot部署Linux子系统(如Ubuntu): ```bash pkg install proot-distro proot-distro install ubuntu proot-distro login ubuntu apt install wget tar wget https://download.jetbrains.com/python/pycharm-community-2023.2.1.tar.gz tar -xzf pycharm-*.tar.gz cd pcharm-*/bin && ./pycharm.sh ``` 此方法需手动配置X11图形服务[^4] 4. **替代方案三:在线IDE** 使用CodeWithMe、Gitpod或Replit等云端开发环境,通过浏览器直接编程。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值