得到Android设备的唯一id
权限
<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的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 获得AndroidManifest.xm
- 下一篇: 001_支持并发的两次判空懒汉单例