权限

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

-----------------------------------------------------

主Activity类

package com.sl.getdeviceid;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) 
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

ApplicationContext.initialize(this);
Device.getDeviceId(this);
}
}

-----------------------------------------------------

保存应用程序上下文

package com.sl.getdeviceid;

import android.content.Context;

public class ApplicationContext
{
private static Context contextSingleton;

public static void initialize(Context context)
{
contextSingleton = context;
}

public static Context getContext()
{
return contextSingleton;
}

}

-----------------------------------------------------

Device类

package com.sl.getdeviceid;

import java.io.File;
import java.io.IOException;

import android.content.Context;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.Log;

public class Device 
{
public static String getDeviceId(Context context)
{
String deviceId = getDeviceIdFromFile();
if(TextUtils.isEmpty(deviceId))
{
deviceId = getDeviceIdFromDeviceInfo(context);
setDeviceIdToFile(context, deviceId);
}

return deviceId;
}

public static String getDeviceIdFromFile()
{
String deviceId = "";

try 
{
File memoryFile = new File(FileUtil.DIR.CACHE_PATH_MEMORY_DIR_DEVICEID);
File sdcardFile = new File(FileUtil.DIR.CACHE_PATH_SDCARD_DIR_DEVICEID);

if(memoryFile.exists())
{
return deviceId = FileUtil.read(FileUtil.DIR.CACHE_PATH_MEMORY_DIR_DEVICEID);
}

if(sdcardFile.exists())
{
return deviceId = FileUtil.read(FileUtil.DIR.CACHE_PATH_SDCARD_DIR_DEVICEID);
}

catch (Exception e) 
{
Log.e("Device", "getDeviceIdFromFile: " + e.toString());
}

return deviceId;
}

public static String getDeviceIdFromDeviceInfo(Context context) 
{
StringBuilder deviceId = new StringBuilder();

try 
{
WifiManager wifi = (WifiManager) context.getSystemService("wifi");
WifiInfo info = wifi.getConnectionInfo();
String wifiMac = info.getMacAddress();

if (!TextUtils.isEmpty(wifiMac)) 
{
Log.e("Device", "wifiMac: " + wifiMac);
deviceId.append(wifiMac).append('\002');
}

TelephonyManager tm = (TelephonyManager) context.getSystemService("phone");
String imei = tm.getDeviceId();
if (!TextUtils.isEmpty(imei))
{
Log.e("Device", "imei: " + imei);
deviceId.append(imei).append('\002');
}

String sn = tm.getSimSerialNumber();
if (!TextUtils.isEmpty(sn)) 
{
Log.e("Device", "sn: " + sn);
deviceId.append(sn);
}


catch (Exception e)
{
Log.e("Device", e.toString());
}

Log.e("Device", "deviceId.toString(): " + deviceId.toString());

return deviceId.toString();
}

public static void setDeviceIdToFile(Context context, String deviceId)
{
if (!FileUtil.isExistDir(FileUtil.DIR.CACHE_PATH_MEMORY_DIR)) 
{
   FileUtil.createMemoryDir(FileUtil.DIR.CACHE_PATH_MEMORY_DIR);
}
   
if (!FileUtil.isExistDir(FileUtil.DIR.CACHE_PATH_SDCARD_DIR)) 
{
   FileUtil.createSDCardDir(FileUtil.DIR.CACHE_PATH_SDCARD_DIR);
}
  
File memoryFile = new File(FileUtil.DIR.CACHE_PATH_MEMORY_DIR_DEVICEID);
File sdcardFile = new File(FileUtil.DIR.CACHE_PATH_SDCARD_DIR_DEVICEID);
  
if (!memoryFile.exists())
{
   try 
   {
    memoryFile.createNewFile();
   } 
   catch (IOException e) 
   {
    Log.e("Device", e.toString());
   }
   
   FileUtil.writeSingleLine(memoryFile, deviceId);
}

if (!sdcardFile.exists()) 
    {
    try 
    {
    sdcardFile.createNewFile();
    } 
    catch (IOException e) 
    {
    Log.e("Device", e.toString());
    }
   
    FileUtil.writeSingleLine(sdcardFile, deviceId);
    }
}

}

-----------------------------------------------------

文件类

package com.sl.getdeviceid;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;

import org.apache.http.util.EncodingUtils;

import android.content.Context;
import android.os.Environment;
import android.util.Log;

public class FileUtil 
{
public static boolean isAvailable()
{
   return Environment.getExternalStorageState().equals("mounted");
}

public static String getSDcardPath()
{
   return Environment.getExternalStorageDirectory().getAbsolutePath();
}

public static String getMemoryFilesPath(Context context)
{
   if (context == null) 
   {
     Log.e("FileUtil", "context is null");
     return "";
   }
   
   return context.getFilesDir().getAbsolutePath();
}
 
public static class DIR
{
public static String MEMORY_DIR = getMemoryFilesPath(ApplicationContext.getContext());
   public static String SDCARD_DIR = getSDcardPath();
   public static String CACHE_PATH_MEMORY_DIR = MEMORY_DIR + File.separator + "KODCACHE";
   public static String CACHE_PATH_SDCARD_DIR = SDCARD_DIR + File.separator + "KODCACHE";
public static String CACHE_PATH_MEMORY_DIR_DEVICEID = MEMORY_DIR + File.separator + "KODCACHE" + File.separator + "DEVICEID.log";
public static String CACHE_PATH_SDCARD_DIR_DEVICEID = SDCARD_DIR + File.separator + "KODCACHE" + File.separator + "DEVICEID.log";
}

public static String read(String fileName)
{
String res = "";
   File file = new File(fileName);
   
   try
   {
     FileInputStream fis = new FileInputStream(file);
     int length = fis.available();
     byte[] buffer = new byte[length];
     fis.read(buffer);
     res = EncodingUtils.getString(buffer, "UTF-8");
     fis.close();
   } 
   catch (IOException e)
   {
    Log.e("FileUtil", e.toString());
   }
   return res;
}

public static boolean isExistDir(String path)
{
   File dir = new File(path);

return (dir.exists()) && (dir.isDirectory());
}

public static boolean createMemoryDir(String memoryPath)
{
   File file = new File(memoryPath);
   boolean mkOk = false;
   
   if (!file.isDirectory()) 
   {
     mkOk = file.mkdirs();
     
     if (!mkOk) 
     {
       mkOk = file.mkdirs();
     }
   }
   
   return mkOk;
}

public static boolean createSDCardDir(String SDCardPath)
{
   boolean mkOk = false;
   
   if (isAvailable())
   {
     File file = new File(SDCardPath);
     
     if (!file.isDirectory())
     {
       mkOk = file.mkdirs();
       
       if (!mkOk) 
       {
         mkOk = file.mkdirs();
       }
     }
   }
   
   return mkOk;
}

public static void writeSingleLine(File file, String content)
{
   FileWriter fw = null;
   
   try 
   {
     fw = new FileWriter(file, true);
     fw.write(content);
   } 
   catch (IOException e) 
   {
    Log.e("FileUtil", e.toString());
   } 
   finally 
   {
   if (fw != null)
   {
    try 
   {
       fw.close();
   }
   catch (IOException e) 
   {
      Log.e("FileUtil", e.toString());
   }
   }
   }
}

}

得到Android设备的唯一id相关推荐

  1. android 获取蓝牙设备id_不需要任何权限获得Android设备的唯一ID

    这个问题来自于Is there a unique Android device ID? 我对这个问题的答案做了整理,包括将另一篇文章加入进来作为补充,可以完美解决此问题. 作者提出的问题: Andro ...

  2. 获取android设备唯一编号_获取android设备的唯一ID

    在Android开发者官方blog上已经有一篇文章对此做了总结(参考链接1), 这里结合自已查询的资料再总结一下, 并给出最终符合要求的解决方案. 1. ANDROID_ID, Secure.ANDR ...

  3. android 自动生成id,《转载》生成Android设备的唯一ID

    1.最简单的方式:获取IMEI号 TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVIC ...

  4. Unity实现在Android端获取Android手机的唯一ID(设备号)(亲测Android11可用)

    Unity实现在Android端获取Android手机的唯一ID(设备号)(亲测Android11可用) 备注:测试版本Unity2020,理论上Unity2018以上都可用,未做测试 - 文章初衷 ...

  5. 获得Android设备的唯一序列号

    理论部分 1.每个设备都有一个唯一序列号,Android设备也不例外,PC上用Mac地址 实践部分 1.核心代码: Secure.getString(getContentResolver(),Secu ...

  6. Android View 生成唯一 Id

    Android View 生成唯一 Id 可以使用 Hook LayoutInflater 的方法替换 SystemService 原有的 LayoutInflater,在自定义的 LayoutInf ...

  7. Android之如何获取Android设备的唯一识别码笔记

    因为需要在项目中需要获得一个稳定.可靠的设备唯一识别码,因此搜了一些网上的资料.今天我们将介绍几种方式. 1. DEVICE_ID 假设我们确实需要用到真实设备的标识,可能就需要用到DEVICE_ID ...

  8. 获取Android设备的唯一识别码|设备号|序号|UUI

    如何获取一个能唯一标识每台Android设备的序号? 这个问题有很多答案,但是他们中的大部分只在某些情况下有效. 根据测试: 所有的设备都可以返回一个 TelephonyManager.getDevi ...

  9. 获取Android设备的唯一识别码|设备号|序号|UUID

    转载请标明出处:http://blog.csdn.net/xx326664162/article/details/50511283 文章出自:薛瑄的博客 你也可以查看我的其他同类文章,也会让你有一定的 ...

最新文章

  1. 暂存单点传播帧,以及使用 TIM 来传递
  2. JavaEE企业级快速开发平台jeesite4的使用和快速搭建项目
  3. golang中的defer
  4. [CF1082E] Increasing Frequency
  5. 折叠菜单,选择下拉(手风琴)
  6. JAVA获取图片的宽、高和大小
  7. 雷军微博点名夸黑鲨2 强烈建议“提前备货”
  8. PAT:1050. String Subtraction (20) AC
  9. 通过共享文件夹来进行前后端独立开发
  10. [AHOI2007]密码箱
  11. yolov5深度剖析+源码debug级讲解系列(二)backbone构建
  12. 用户抱怨苹果一体机进灰 苹果称中国环境不好
  13. 国产操作系统银河麒麟V10-sp1-0521桌面系统文件共享配置
  14. 【区块链】Go 实现简单区块链
  15. 安全背后: 浏览器是如何校验证书的
  16. 如何使用开源合成器Natron入门
  17. ipa文件在线上传工具,代替xcode
  18. 操作无法完成 计算机名不正确,共享打印机报“键入的打印机名称不正确”三种解决方法...
  19. android 彩信处理
  20. 模拟生成验证码,有相应次数限制(个人学习记录)

热门文章

  1. 使用 js替换网页中的关键词为链接
  2. 可能用到的C# WinForm技术小结
  3. Win7新手系列教程:从安装到简单使用(新人必读)
  4. 试用版office 2010中提示Error opening SocialConnectorRes.dll求解!!
  5. 部署安全的香港服务器注意事项
  6. VMware虚拟机中CentOS根分区的扩展
  7. 2019秋季PAT甲级_C++题解
  8. English trip V1 - 22. My Life Teacher:Emily Key: describe talk about past 过去式
  9. 渐进式迭代教学法--PHP
  10. Storm概念学习系列之storm-starter项目(完整版)(博主推荐)