【问题标题】:How to get device's IMEI/ESN number with code programming But in android > 6如何通过代码编程获取设备的 IMEI/ESN 号码但在 android > 6
【发布时间】:2017-01-16 01:48:55
【问题描述】:

我的 Android 版本是 Marshmallow 6.0

如何在 android > 6 中以编程方式查找/获取 imei 号码。

注意:我在 AndroidManifest.xml 文件中添加了 READ_PHONE_STATE 权限。

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

在 MainActivity 内部

TelephonyManager manager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String deviceid = manager.getDeviceId();

//Device Id is IMEI number

Log.d("msg", "Device id " + deviceid);

【问题讨论】:

标签: android android-6.0-marshmallow android-permissions imei


【解决方案1】:

我的 Android 版本是 Marshmallow 6.0

注意:您需要运行时权限

我在 AndroidManifest.xml 文件中添加了 READ_PHONE_STATE 权限。

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

在 MainActivity 中:

private static final int PERMISSIONS_REQUEST_READ_PHONE_STATE = 999;

private TelephonyManager mTelephonyManager;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if (checkSelfPermission(Manifest.permission.READ_PHONE_STATE)
            != PackageManager.PERMISSION_GRANTED) {
        requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE},
                PERMISSIONS_REQUEST_READ_PHONE_STATE);
    } else {
        getDeviceImei();
    }
....

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions,
                                       int[] grantResults) {
    if (requestCode == PERMISSIONS_REQUEST_READ_PHONE_STATE
            && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        getDeviceImei();
    }
}

private void getDeviceImei() {

    mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    String deviceid = mTelephonyManager.getDeviceId();
    Log.d("msg", "DeviceImei " + deviceid);
}

【讨论】:

    【解决方案2】:

    API 级别 26 中也不推荐使用 getDeviceId() 方法。 因此,您还需要使用 getImei() 或 getAllCellInfo() 来获取 imei 详细信息。

    【讨论】:

      【解决方案3】:

      需要权限:READ_PHONE_STATE

      <uses-permission android:name="android.permission.READ_PHONE_STATE" />
      
      /**
       * Gets the device unique id called IMEI. Sometimes, this returns 00000000000000000 for the
       * rooted devices.
       **/
      public static String getDeviceImei(Context ctx) {
          TelephonyManager telephonyManager = (TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE);
          Log.i(Tag, "Return Sim count in device : "+manager.getPhoneCount());
          Log.i(Tag, "Defualt device ID: "+manager.getDeviceId());
          Log.i(Tag, "First Sim IMEI:  "+manager.getDeviceId(0));
          Log.i(Tag, "Secand Sim IMEI "+manager.getDeviceId(1));
          return telephonyManager.getDeviceId();
      }
      

      如果设备 ID 不可用,则返回 null。

      【讨论】:

      • 在复制粘贴答案之前仔细阅读问题
      猜你喜欢
      • 2016-08-07
      • 1970-01-01
      • 2019-03-21
      • 1970-01-01
      • 2014-01-21
      • 1970-01-01
      • 2013-01-11
      • 1970-01-01
      • 2022-01-21
      相关资源
      最近更新 更多