Android中获取手机 IMEI Mac地址 IP地址
一.获取手机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地址相关推荐
- Android中获取手机中的联系人信息
#Android中获取手机中的联系人信息 1.0.查看系统通讯录的表,表路径:data->data->com.android.providers.contacts->database ...
- Android之获取手机IMEI号和IMSI号
首先我们看一下IMEI号和IMSI号是什么: (1)IMEI(International Mobile Equipment Identity,国际移动身份识别码):是由15位数字组成的"电子 ...
- qt准确获取本机mac和ip地址
前言 公司服务器有多个mac地址,是用网上的代码获取时总是不准确,只能自己封装一下.qt通过QNetworkInterface类来获取网络接口的各种信息,我是通过解析QNetworkInterface ...
- Android中获取手机设备信息、RAM、ROM存储信息,如宽、高、厂商名、手机品牌
借鉴:https://www.jianshu.com/p/ca869aa2fd72 今天有两个工具类总结,代码里都有注释,直接看代码. 一.首先第一个,主要获取手机设备信息DeviceInfoUtil ...
- Android中获取手机的IMEI
IMEI的概念 IMEI(International Mobile Equipment Identity): 是国际移动设备身份码的缩写,国际移动装备辨识码,是由15位数字组成的"电子串号& ...
- php客户端局域网ip地址,PHP在局域网中获取客户端计算机名、IP地址、MAC地址
//php获取ip的算法 if(getenv('HTTP_CLIENT_IP')) { $onlineip = getenv('HTTP_CLIENT_IP'); } elseif(getenv('H ...
- Android中获取手机电量信息
有些时候我们需要在我们的应用上为用户展示当前手机的电量,这时候我们就需要用到广播了,我们都知道在动态注册广播的时候,我们需要传入一个BroadcastReceiver类对象,还有一个意图过滤器Inte ...
- android获取机主手机号,Android中 获取手机通讯录和手机机主手机号码——诺诺涂鸦记忆...
目标:获取手机通讯录联系人的姓名和手机号码,屏幕座机和其他非手机号码,避免号码重复 (注:我只给出了代码思路和用法示例,大家可以自己调用方法debug运行看结果或者自行编写显示结果的代码,根据需要进行 ...
- android中获取手机系统年、月、日
在android中系统的月份是从0-11计算的,所以我们想要拿到真实的月份需要加一. int year = Integer. valueOf (Calendar. getInstance ().get ...
最新文章
- Ubuntu 16.04更新软件提示需要安装不能信任的软件包 http://archive.ubuntukylin.com:10006/ubuntukylin xenial InRelease
- Microsoft Office PowerPoint 2020中文版
- Linux下Nginx编译安装过程详解
- mysql aa复制_MySQL主从复制实现
- 【数据结构】排序算法及优化整理
- Android应用截图嵌入到真实设备
- nginx log记录请求响应日志及日志分割
- ✳编程求当n≤100时,n!的准确值
- 四大技巧轻松搞定云容器
- mysql自增id获取失败
- 固态硬盘 linux 文件系统,SSD是否需要使用特别的文件系统?
- 删除 Tomcat 上次关闭遗留下来的 SESSION 缓存
- python showinfo 方法_Python GUI之tkinter窗口视窗教程大集合(看这篇就够了)
- indesign教程,如何创建对齐参考线?
- C++11常用特性的使用经验总结-概述及目录
- GAOT工具箱设置交叉概率和变异概率
- mysql用shell脚本链接数据库进行操作
- 永久免费的内网端口映射工具推荐【无公网IP】
- 九个完全免费的PPT模板网站
- jQuery02(达)
热门文章
- oracle 自带性能监控,oracle的性能监控
- 疫情之下,我和公司都快熬不住了
- 郭天祥_书本例程_代码.zip下载地址
- js实现PDF在线预览
- Can't locate Automake/Config.pm in @INC(@INC contains: /usr/local/share/automake-1.14 /xxxxx)
- Kubernetes是啥?用它写个hello,world啊!
- 雅思写作 Day 1 阅读笔记
- echarts-环形图
- C4D-学习笔记-3-前置知识
- uniyu 雷达波束_雷达极化信息获取及极化信号处理技术研究综述