{

/*
获取手机(ios,android)的设备唯一码(mac地址, IMEI)
2018年02月16日 ⁄ 综合 ⁄ 共 2697字 ⁄ 字号 小 中 大 ⁄ 评论关闭

app中总会用到客户端下载量数据统计,一般都是用的设备的唯一码作为标示,以下是获取mac地址的代码片段,记录备份。

android 获取mac地址

1. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE">

2. private String getLocalMacAddress(){

WifiManager wifi = (WifiManager)getSystemService(Context.WIFI_SERVICE);

WifiInfo info = wifi.getConnectionInfo();

return info.getMacAddress();

}

android 获取IMEI数据

public static String getIMEI(Context context) {

return ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId();

}

ios 获得mac地址

+(NSString *)getLocalMacAddress

{

int                    mib[6];

size_t                len;

char                *buf;

unsigned char        *ptr;

struct if_msghdr    *ifm;

struct sockaddr_dl    *sdl;

mib[0] = CTL_NET;

mib[1] = AF_ROUTE;

mib[2] = 0;

mib[3] = AF_LINK;

mib[4] = NET_RT_IFLIST;

if ((mib[5] = if_nametoindex("en0")) == 0) {

//printf("Error: if_nametoindex error/n");

return NULL;

}

if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0) {

//printf("Error: sysctl, take 1/n");

return NULL;

}

if ((buf = malloc(len)) == NULL) {

//printf("Could not allocate memory. error!/n");

return NULL;

}

if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) {

//printf("Error: sysctl, take 2");

return NULL;

}

ifm = (struct if_msghdr *)buf;

sdl = (struct sockaddr_dl *)(ifm + 1);

ptr = (unsigned char *)LLADDR(sdl);

// NSString *outstring = [NSString stringWithFormat:@"%02x:%02x:%02x:%02x:%02x:%02x", *ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5)];

NSString *outstring = [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x", *ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5)];

free(buf);

return [outstring uppercaseString];

}

ios获取时候所需包含的头文件

#include<sys/socket.h>

#include<sys/sysctl.h>
#include<net/if.h>
#include <net/if_dl.h>

- (NSString *) macaddress{

int                mib[6];
   size_t             len;
   char               *buf;
    unsignedchar      *ptr;
    structif_msghdr   *ifm;
    structsockaddr_dl  *sdl;

mib[0] =CTL_NET;
    mib[1] =AF_ROUTE;
    mib[2] =0;
    mib[3] =AF_LINK;
    mib[4] =NET_RT_IFLIST;

if ((mib[5]= if_nametoindex("en0")) == 0) {
       printf("Error: if_nametoindex errorn");
       return NULL;
    }

if(sysctl(mib, 6, NULL, &len, NULL, 0)< 0) {
       printf("Error: sysctl, take 1n");
       return NULL;
    }

if ((buf =malloc(len)) == NULL) {
       printf("Could not allocate memory. error!n");
       return NULL;
    }

if(sysctl(mib, 6, buf, &len, NULL, 0)< 0) {
       printf("Error: sysctl, take 2");
       free(buf);
       return NULL;
    }

ifm =(struct if_msghdr *)buf;
    sdl =(struct sockaddr_dl *)(ifm + 1);
    ptr =(unsigned char *)LLADDR(sdl);
    NSString*outstring = [NSString stringWithFormat:@"X:X:X:X:X:X",
                          *ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5)];
   free(buf);

returnoutstring;
}
- (NSString *)getMacAddress
{
*/

}

Android 获取手机(ios,android)的设备唯一码(mac地址, IMEI)的更多相关文章

  1. 稳定获取Android设备唯一码(UUID)的解决方案

    最近做的一个项目中需要用到Android设备唯一码(UUID)来标识一台设备, Android中设备唯一码有很多,如:MAC地址.IMEI号(DeviceId).IMSI号.ANDROID_ID.序列 ...

  2. Android设备唯一码的获取

    Android设备唯一码的获取 UTDID是集团无线设备统一ID方案,目的是给每一台设备一个ID,作为唯一标识.UTDID由客户端生成,并在设备中各个客户端之间共享.UTDID的生成中包含时间戳和随机 ...

  3. android获取手机信息大全

    IMEI号,IESI号,手机型号: private void getInfo() { TelephonyManager mTm = (TelephonyManager) getSystemServic ...

  4. android获取手机信息2

    IMEI号,IESI号,手机型号: private void getInfo() { TelephonyManager mTm = (TelephonyManager) getSystemServic ...

  5. [转] android获取手机信息大全

    原文链接:http://blog.csdn.net/hytfly/article/details/8552483 IMEI号,IESI号,手机型号: private void getInfo() { ...

  6. Android 获取手机Mac地址,手机名称

    /** * 获取手机mac地址<br/> * 错误返回12个0 */ public static String getMacAddress(Context context) { // 获取 ...

  7. 获取Android设备WIFI的MAC地址 “MAC地址”

    需要指出的是:wifi状态和wifi AP状态是互斥的状态:也就是一旦发现WIFI AP打开,WIFI是不能被打开的. 获取Android设备的WIFI MAC地址,首先需要将设备中的WIFI个人热点 ...

  8. Android 获取手机信息,设置权限,申请权限,查询联系人,获取手机定位信息

    Android 获取手机信息,设置权限,申请权限,查询联系人,获取手机定位信息 本文目录: 获取手机信息 设置权限 申请权限 查询联系人 获取手机定位信息 调用高德地图,设置显示2个坐标点的位置,以及 ...

  9. android API版本对应的系统版本及Android获取手机和系统版本等信息的代码

    学了这么久的Android,竟然一直对其API对应的名称关系一值搞不清楚,现在网上认真看了下资料,转载一个觉得写得不错的作者的文章,记下来: [背景] 之前折腾android期间,慢慢地知道了,And ...

随机推荐

  1. 配置自己的CocoaPods库

    序 默认安装的cocoapods确实很好用,可是毕竟自己会写一些库和修改一些第三方库来用.所幸cocoapods确实是一个神器.他可以定义自己的库来用. 如何安装Cocoapods,请参考这篇 从头来 ...

  2. Note-Git:Git 笔记

    ylbtech-Note-Git:Git 笔记 1.返回顶部 ·  Git 分支管理: 主干/master.热修正/hotfix.预生产/release.开发develop.个人1(个人.小团队)/f ...

  3. 16/7/27-PHP环境配置(php5.5.3.7+mysql5.7.12+Apache2.4)

    非常感谢http://www.cnblogs.com/jicheng1014/archive/2012/01/26/2329531.html 配置php环境问题 php.ini 路径 "\& ...

  4. vs2010修改的内容在浏览器页面不变怎么办

    解决方法1: 如果是静态页面, Ctrl+F5 强制刷新浏览器页面 解决方法2: 页面中<%@ Page Language="C#" CodeBehind="Def ...

  5. 利用Spring实现Hello World

    因为最近要做Java Web方面的开发,所以,就像使用Spring来实现一个以前学其他程序时首先做的一个示例"Hello World!"练练手,之前用很多中语言实现过hello w ...

  6. Codeforces 1166E(思维)

    题面 有一个长度为n的序列a,有m次操作.每一次操作一个人选a的一个子集x,另一个人会选x的补集y.且x集合中的数的最小公倍数比y集合中的数的最小公倍数大.现在给出所有x,判断是否有一个序列a满足条件 ...

  7. 远程连接SuSE系统的配置方法

    今天,在VMware上搭建了SuSE Linux系统,使用xshell远程进行连接,一直连接不上,后来百度了一下,连接成功,这里总结一下配置的办法: (1):关闭防火墙 (2):配置sshd( Pas ...

  8. python学习第三十六天命名空间的概念

    python命名空间也叫名字空间,也叫名称空间,任何编程语言都有命名空间,大体意思都一样,定义文件所在的目录,下面详细讲述命名空间几种情况 1,locals: 是函数内的名称空间,包括局部变量和形参 ...

  9. Java 小技巧和在Java避免NullPonintException的最佳方法(翻译)

                前几天就g+里面看到有人引用这篇博文.看了一下.受益颇多. 所以翻译过来,希望和大家一起学习.本人英语水平有限,假设有错,请大家指正. 原文地址(须要翻墙):http://ja ...

  10. 左侧菜单收缩的实现(包括,筛选器,addclass、removeclass、绑定事件,链式编程)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...