一.获取手机IMEI

手机在生产时,每部手机均有一个唯一的标识(ID),国际上采用国际移动设备身份码(IMEI, International Mobile Equipment Identity)。IMEI是由15位数字组成的"电子串号",它与每台手机一一对应,而且该码是全世界唯一的。每一只手机在组装完成后都将被赋予一个全球唯一的一组号码就是IMEI码。

1.加入下面的权限

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

2.代码中:

检测是否需要动态权限:

    private void setPhoneStateManifest() {if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {// toast("需要动态获取权限");ActivityCompat.requestPermissions(LoginActivity.this, new String[]{Manifest.permission.READ_PHONE_STATE}, 1);} else {// toast("不需要动态获取权限");TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);imei = tm.getDeviceId();Log.i("获取imei", "IMEI:" + imei);}}

获取手机的IMEI(单卡,代码较少就不打注释了,看Log也是一样的)

    @Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {if (requestCode == 1 && grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);imei = tm.getDeviceId();Log.i("获取imei", "IMEI:" + imei);}}

二.获取手机的IP地址:

1.加入权限(通过WiFi获取)

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>

2.代码实现(可以直接调用,亲测有效) 

public static String getIPAddress(Context context) {NetworkInfo info = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();if (info != null && info.isConnected()) {if (info.getType() == ConnectivityManager.TYPE_MOBILE) {//当前使用2G/3G/4G网络try {//Enumeration<NetworkInterface> en=NetworkInterface.getNetworkInterfaces();for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {NetworkInterface intf = en.nextElement();for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {InetAddress inetAddress = enumIpAddr.nextElement();if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {return inetAddress.getHostAddress();}}}} catch (SocketException e) {e.printStackTrace();}} else if (info.getType() == ConnectivityManager.TYPE_WIFI) {//当前使用无线网络WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);WifiInfo wifiInfo = wifiManager.getConnectionInfo();String ipAddress = intIP2StringIP(wifiInfo.getIpAddress());//得到IPV4地址return ipAddress;}} else {//当前无网络连接,请在设置中打开网络}return null;}/*** 将得到的int类型的IP转换为String类型** @param ip* @return*/public static String intIP2StringIP(int ip) {return (ip & 0xFF) + "." +((ip >> 8) & 0xFF) + "." +((ip >> 16) & 0xFF) + "." +(ip >> 24 & 0xFF);}

三.获取手机的Mac地址:

获取手机的Mac地址有些麻烦,因为Android6.0提交的数据都提交到同一个mac地址的数据库去了,原来Android6.0之后用原来的方法获取得到的mac地址都是02:00:00:00:00:00 。获取蓝牙的mac地址也不例外。从这个版本开始, Android 移除了通过 WiFi 和蓝牙 API 来在应用程序中可编程的访问本地硬件标示符。现在 WifiInfo.getMacAddress() 和 BluetoothAdapter.getAddress() 方法都将返回 02:00:00:00:00:00 。不过上有政策下有对策下面,通过此方法获取Mac地址亲测有效:

1.权限:

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

2.代码中方法: (返回的字符串就是你设备的mac地址。具体看Log跟代码中的注释,可直接调用)

public static String macAddress() throws SocketException {String address = null;// 把当前机器上的访问网络接口的存入 Enumeration集合中Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();Log.d("TEST_BUG", " interfaceName = " + interfaces );while (interfaces.hasMoreElements()) {NetworkInterface netWork = interfaces.nextElement();// 如果存在硬件地址并可以使用给定的当前权限访问,则返回该硬件地址(通常是 MAC)。 byte[] by = netWork.getHardwareAddress();if (by == null || by.length == 0) {continue;}StringBuilder builder = new StringBuilder();for (byte b : by) {builder.append(String.format("%02X:", b));}if (builder.length() > 0) {builder.deleteCharAt(builder.length() - 1);}String mac = builder.toString();Log.d("TEST_BUG", "interfaceName="+netWork.getName()+", mac="+mac);// 从路由器上在线设备的MAC地址列表,可以印证设备Wifi的 name 是 wlan0if (netWork.getName().equals("wlan0")) {Log.d("TEST_BUG", " interfaceName ="+netWork.getName()+", mac="+mac);address = mac;}}return address;} 

Android中获取手机 IMEI Mac地址 IP地址相关推荐

  1. Android中获取手机中的联系人信息

    #Android中获取手机中的联系人信息 1.0.查看系统通讯录的表,表路径:data->data->com.android.providers.contacts->database ...

  2. Android之获取手机IMEI号和IMSI号

    首先我们看一下IMEI号和IMSI号是什么: (1)IMEI(International Mobile Equipment Identity,国际移动身份识别码):是由15位数字组成的"电子 ...

  3. qt准确获取本机mac和ip地址

    前言 公司服务器有多个mac地址,是用网上的代码获取时总是不准确,只能自己封装一下.qt通过QNetworkInterface类来获取网络接口的各种信息,我是通过解析QNetworkInterface ...

  4. Android中获取手机设备信息、RAM、ROM存储信息,如宽、高、厂商名、手机品牌

    借鉴:https://www.jianshu.com/p/ca869aa2fd72 今天有两个工具类总结,代码里都有注释,直接看代码. 一.首先第一个,主要获取手机设备信息DeviceInfoUtil ...

  5. Android中获取手机的IMEI

    IMEI的概念 IMEI(International Mobile Equipment Identity): 是国际移动设备身份码的缩写,国际移动装备辨识码,是由15位数字组成的"电子串号& ...

  6. php客户端局域网ip地址,PHP在局域网中获取客户端计算机名、IP地址、MAC地址

    //php获取ip的算法 if(getenv('HTTP_CLIENT_IP')) { $onlineip = getenv('HTTP_CLIENT_IP'); } elseif(getenv('H ...

  7. Android中获取手机电量信息

    有些时候我们需要在我们的应用上为用户展示当前手机的电量,这时候我们就需要用到广播了,我们都知道在动态注册广播的时候,我们需要传入一个BroadcastReceiver类对象,还有一个意图过滤器Inte ...

  8. android获取机主手机号,Android中 获取手机通讯录和手机机主手机号码——诺诺涂鸦记忆...

    目标:获取手机通讯录联系人的姓名和手机号码,屏幕座机和其他非手机号码,避免号码重复 (注:我只给出了代码思路和用法示例,大家可以自己调用方法debug运行看结果或者自行编写显示结果的代码,根据需要进行 ...

  9. android中获取手机系统年、月、日

    在android中系统的月份是从0-11计算的,所以我们想要拿到真实的月份需要加一. int year = Integer. valueOf (Calendar. getInstance ().get ...

最新文章

  1. Ubuntu 16.04更新软件提示需要安装不能信任的软件包 http://archive.ubuntukylin.com:10006/ubuntukylin xenial InRelease
  2. Microsoft Office PowerPoint 2020中文版
  3. Linux下Nginx编译安装过程详解
  4. mysql aa复制_MySQL主从复制实现
  5. 【数据结构】排序算法及优化整理
  6. Android应用截图嵌入到真实设备
  7. nginx log记录请求响应日志及日志分割
  8. ✳编程求当n≤100时,n!的准确值
  9. 四大技巧轻松搞定云容器
  10. mysql自增id获取失败
  11. 固态硬盘 linux 文件系统,SSD是否需要使用特别的文件系统?
  12. 删除 Tomcat 上次关闭遗留下来的 SESSION 缓存
  13. python showinfo 方法_Python GUI之tkinter窗口视窗教程大集合(看这篇就够了)
  14. indesign教程,如何创建对齐参考线?
  15. C++11常用特性的使用经验总结-概述及目录
  16. GAOT工具箱设置交叉概率和变异概率
  17. mysql用shell脚本链接数据库进行操作
  18. 永久免费的内网端口映射工具推荐【无公网IP】
  19. 九个完全免费的PPT模板网站
  20. jQuery02(达)

热门文章

  1. oracle 自带性能监控,oracle的性能监控
  2. 疫情之下,我和公司都快熬不住了
  3. 郭天祥_书本例程_代码.zip下载地址
  4. js实现PDF在线预览
  5. Can't locate Automake/Config.pm in @INC(@INC contains: /usr/local/share/automake-1.14 /xxxxx)
  6. Kubernetes是啥?用它写个hello,world啊!
  7. 雅思写作 Day 1 阅读笔记
  8. echarts-环形图
  9. C4D-学习笔记-3-前置知识
  10. uniyu 雷达波束_雷达极化信息获取及极化信号处理技术研究综述