- Andriod 要联网、获得机型信息,需要得到授权。
- 对于模拟器,就是配置AndroidManifest.xml 文件 加入 Xml代码
- <!-- 联网权限 -->
- <uses-permission
- android:name="android.permission.INTERNET" />
- <!-- 获取机型信息权限 -->
- <uses-permission
- android:name="android.permission.READ_PHONE_STATE" />
- <!-- 获取短信发送权限 -->
- <uses-permission
- android:name="android.permission.SEND_SMS" />
- <!-- 联网权限 -->
- <uses-permission
- android:name="android.permission.INTERNET" />
- <!-- 获取机型信息权限 -->
- <uses-permission
- android:name="android.permission.READ_PHONE_STATE" />
- <!-- 获取短信发送权限 -->
- <uses-permission
- android:name="android.permission.SEND_SMS" />
- 现在你就可以调用HttpUrlConnection进行Http请求了,试试以下代码,你可以获得机型信息。
- Java代码
- //...extends Activity
- TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
- StringBuilder sb = new StringBuilder();
- sb.append("\nDeviceId(IMEI) = " + tm.getDeviceId());
- sb.append("\nDeviceSoftwareVersion = " + tm.getDeviceSoftwareVersion());
- sb.append("\nLine1Number = " + tm.getLine1Number());
- sb.append("\nNetworkCountryIso = " + tm.getNetworkCountryIso());
- sb.append("\nNetworkOperator = " + tm.getNetworkOperator());
- sb.append("\nNetworkOperatorName = " + tm.getNetworkOperatorName());
- sb.append("\nNetworkType = " + tm.getNetworkType());
- sb.append("\nPhoneType = " + tm.getPhoneType());
- sb.append("\nSimCountryIso = " + tm.getSimCountryIso());
- sb.append("\nSimOperator = " + tm.getSimOperator());
- sb.append("\nSimOperatorName = " + tm.getSimOperatorName());
- sb.append("\nSimSerialNumber = " + tm.getSimSerialNumber());
- sb.append("\nSimState = " + tm.getSimState());
- sb.append("\nSubscriberId(IMSI) = " + tm.getSubscriberId());
- sb.append("\nVoiceMailNumber = " + tm.getVoiceMailNumber());
- Log.d("info", sb.toString());
- //...extends Activity
- TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
- StringBuilder sb = new StringBuilder();
- sb.append("\nDeviceId(IMEI) = " + tm.getDeviceId());
- sb.append("\nDeviceSoftwareVersion = " + tm.getDeviceSoftwareVersion());
- sb.append("\nLine1Number = " + tm.getLine1Number());
- sb.append("\nNetworkCountryIso = " + tm.getNetworkCountryIso());
- sb.append("\nNetworkOperator = " + tm.getNetworkOperator());
- sb.append("\nNetworkOperatorName = " + tm.getNetworkOperatorName());
- sb.append("\nNetworkType = " + tm.getNetworkType());
- sb.append("\nPhoneType = " + tm.getPhoneType());
- sb.append("\nSimCountryIso = " + tm.getSimCountryIso());
- sb.append("\nSimOperator = " + tm.getSimOperator());
- sb.append("\nSimOperatorName = " + tm.getSimOperatorName());
- sb.append("\nSimSerialNumber = " + tm.getSimSerialNumber());
- sb.append("\nSimState = " + tm.getSimState());
- sb.append("\nSubscriberId(IMSI) = " + tm.getSubscriberId());
- sb.append("\nVoiceMailNumber = " + tm.getVoiceMailNumber());
- Log.d("info", sb.toString());
- 在Android中以上机型信息在手机状态Status里
- Settings->About Phone->Status
- 各个栏目的功能介绍如下:
- Battery status:电池充电/未充电状态
- Battery level:电池剩余电量
- Phone number:手机序列号
- Network:所处的移动网络
- Signal strength:信号度
- Network type:网络制式
- Service state:所在服务区
- Roaming:漫游/未漫游
- Data access:共访问的数据大小
- IMEI:IMEI码
- IMEI SV:IMEI码的版本
- IMSI:国际移动用户识别码
- Wi-Fi Mac address:G1无线Wi-Fi网络的Mac地址。
- Bluetooth address:蓝牙地址
- Up time:正常运行时间
- Awake Time:手机唤醒时间
- 在计算机上,我们习惯用MAC地址来标志一台计算机。在Android设备上,可以用IMIE或者Android ID来标志一个设备。
- 看一下Android上怎样获取这样的信息。
- 一个是TelephonyManager的getDeviceId,另外一个是Settings.System的ANDROID_ID
- 这里贴一段测试代码:
- Java代码
- package com.npc4.android.imie;
- import android.app.Activity;
- import android.content.Context;
- import android.os.Bundle;
- import android.telephony.TelephonyManager;
- import android.util.Log;
- import android.provider.Settings.System;
- /**
- * @author lixinso
- * 获取系统的唯一标识
- */
- public class IMIE extends Activity {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- getImieStatus();
- getAndroidId();
- }
- private void getImieStatus() {
- TelephonyManager tm = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
- String deviceId = tm.getDeviceId();
- Log.e("DEVICE_ID ", deviceId + " ");
- }
- private void getAndroidId(){
- String androidId = System.getString(getContentResolver(), System.ANDROID_ID);
- Log.e("ANDROID_ID", androidId + " ");
- }
- }
- package com.npc4.android.imie;
- import android.app.Activity;
- import android.content.Context;
- import android.os.Bundle;
- import android.telephony.TelephonyManager;
- import android.util.Log;
- import android.provider.Settings.System;
- /**
- * @author lixinso
- * 获取系统的唯一标识
- */
- public class IMIE extends Activity {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- getImieStatus();
- getAndroidId();
- }
- private void getImieStatus() {
- TelephonyManager tm = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
- String deviceId = tm.getDeviceId();
- Log.e("DEVICE_ID ", deviceId + " ");
- }
- private void getAndroidId(){
- String androidId = System.getString(getContentResolver(), System.ANDROID_ID);
- Log.e("ANDROID_ID", androidId + " ");
- }
- }
- tm.getDeviceId()表示唯一的设备ID,例如对于GSM手机返回IMEI,对于CDMA手机返回MEID,如果设备不可用则返回NULL,比如在模拟器上。
- System.getString(getContentResolver(), System.ANDROID_ID)表示一个64位的数字,在设备第一次启动的时候随机生成并在设备的整个生命周期中不变。(如果重新进行出厂设置可能会改变)
- 如何获取一个能唯一标识每台Android设备的序号?这个问题有很多答案,但是他们中的大部分只在某些情况下有效。根据测试:所有的设备都可以返回一个 TelephonyManager.getDeviceId() 所有的GSM设备 (测试设备都装载有SIM卡) 可以返回一个TelephonyManager.getSimSerialNumber() 所有的CDMA 设备对于 getSimSerialNumber() 却返回一个空值! 所有添加有谷歌账户的设备可以返回一个 ANDROID_ID 所有的CDMA设备对于 ANDROID_ID 和 TelephonyManager.getDeviceId() 返回相同的值(只要在设置时添加了谷歌账户) 目前尚未测试的:没有SIM卡的GSM设备、没有添加谷歌账户的GSM设备、处于飞行模式的设备。 所以如果你想得到设备的唯一序号, TelephonyManager.getDeviceId() 就足够了。但很明显暴露了DeviceID会使一些用户不满,所以最好把这些id加密了。实际上加密后的序号仍然可以唯一的识别该设备,并且不会明显的暴露用户的特定设备,例如,使用 String.hashCode() ,结合UUID: 1 final TelephonyManager tm = (TelephonyManager) getBaseContext().getSystemService(Context.TELEPHONY_SERVICE); 2 3 final String tmDevice, tmSerial, tmPhone, androidId; 4 tmDevice = "" + tm.getDeviceId(); 5 tmSerial = "" + tm.getSimSerialNumber(); 6 androidId = "" + android.provider.Settings.Secure.getString(getContentResolver(), android.provider.Settings.Secure.ANDROID_ID); 7 8 UUID deviceUuid = new UUID(androidId.hashCode(), ((long)tmDevice.hashCode() << 32) | tmSerial.hashCode()); 9 String uniqueId = deviceUuid.toString(); 最后的deviceID可能是这样的结果: 00000000-54b3-e7c7-0000-000046bffd97
Android 获取唯一设备号和机型信息
最新推荐文章于 2024-08-22 16:16:43 发布