/** * @description: * @author chenshiqiang E-mail:csqwyyx@163.com * @date 2014年5月14日 上午12:09:47 * @version 1.0 */ package com.csq.thesceneryalong.utils; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.RandomAccessFile; import java.util.UUID; import android.content.Context; /** * 在程序安装后第一次运行后生成一个ID实现的,但该方式跟设备唯一标识不一样, * 它会因为不同的应用程序而产生不同的ID,而不是设备唯一ID。 * 因此经常用来标识在某个应用中的唯一ID(即Installtion ID),或者跟踪应用的安装数量. * @author csq * */ public class Installation { private static String sID = null; private static final String INSTALLATION = "INSTALLATION"; public synchronized static String id(Context context) { if (sID == null) { File installation = new File(context.getFilesDir(), INSTALLATION); try { if (!installation.exists()) writeInstallationFile(installation); sID = readInstallationFile(installation); } catch (Exception e) { throw new RuntimeException(e); } } return sID; } private static String readInstallationFile(File installation) throws IOException { RandomAccessFile f = new RandomAccessFile(installation, "r"); byte[] bytes = new byte[(int) f.length()]; f.readFully(bytes); f.close(); return new String(bytes); } private static void writeInstallationFile(File installation) throws IOException { FileOutputStream out = new FileOutputStream(installation); String id = UUID.randomUUID().toString(); out.write(id.getBytes()); out.close(); } }