在平时开发过程中,app都会要求获取手持设备的IMEI, 手机号码等相关的信息,于是写个功能封装类就很有必要了
step1:新建一个DeviceInfoManager.java的管理类
step2:确保该封装类为单例模式,初始化TelephonyManager.java这个重要的类,有关手机SIM卡相关信息的内容基本都能获取到了
private static DeviceInfoManager mInstance; private Context mContext; private TelephonyManager mTelephonyManager; private DeviceInfoManager() { mContext = MyApp.mInstance; mTelephonyManager = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE); } public static DeviceInfoManager getInstance() { if (mInstance == null) { synchronized (DeviceInfoManager.class) { if (mInstance == null) { mInstance = new DeviceInfoManager(); } } } return mInstance; }
stp:3 一些常用的函数封装了
// IMEI public String getDeviceID() { return mTelephonyManager.getDeviceId()/* "358326034114493" */; // return "000000000000002"; // return "339142123371759"; } public String getOSVersion() { return Build.VERSION.RELEASE; } public String getPhoneType() { return Build.MODEL; } public String getOS() { return "Android"; } // 电话号码 public String getNativePhoneNumber() { String NativePhoneNumber = null; NativePhoneNumber = mTelephonyManager.getLine1Number(); return NativePhoneNumber; } public String getModel() { Log.i("device", "Build.MODEL = " + android.os.Build.MODEL); // 主板 Log.i("device", "Build.PRODUCT = " + android.os.Build.PRODUCT); // 主板 return android.os.Build.MODEL; } // 是否为模拟器 public boolean isEmulator() { return (Build.MODEL.equals("sdk")) || (Build.MODEL.equals("google_sdk")); }
现在此封装类, 需要的功能都有了, 当然想要运行成功,权限是必要的<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
并不是所以的手机都能获取到手机号码,这个估计是运营商没有把手机号码的数据写入到sim卡中造成的。