Java 在应用程序安装时设置唯一ID-Android
我正在尝试实现下面的代码,以便在安装应用程序时为用户生成一个随机ID号。我只是有几个问题Java 在应用程序安装时设置唯一ID-Android,java,android,installation,uuid,Java,Android,Installation,Uuid,我正在尝试实现下面的代码,以便在安装应用程序时为用户生成一个随机ID号。我只是有几个问题 如果我为此创建了一个新文件(Install.java),我如何访问另一个类中的ID 如何确保在首次安装应用程序时执行程序的这一部分?现在,程序从我的Main.java类开始(我是java新手)。它会在安装应用程序时运行吗 public class Install { private static String sID = null; private static final String INSTALLA
public class Install {
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();
}
}
据我所知,在安装完成后,您无法立即运行任意代码
我认为最接近的方法是在MainActivity onCreate()方法中进行检查,以确定这是否是第一次运行(检查这一点的一个好方法可能是获取对文件的引用并调用file.exists(),生成的布尔值将告诉您是否需要创建UID文件。据我所知,您无法在安装完成后立即运行任意代码
我认为最接近的方法是在MainActivity onCreate()方法中进行检查,以确定这是否是第一次运行(检查这一点的一个好方法可能是获取对文件的引用并调用file.exists(),生成的布尔值将告诉您是否需要创建UID文件。以下是我使用的一些代码-请随意调整
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
Log.d(Tag, "Yay onCreate!"); // sorry sometimes I'm a bit verbose with my logs...
createVerifierStrings();
.....
private void createVerifierStrings() {
SharedPreferences prefs = this.getSharedPreferences("Someprefstringreference", 0);
String not_set = "NOTSET";
String android_key;
android_key = prefs.getString("id", not_set);
if (android_key.equals(not_set)) {
Log.d(Tag, "Creating keys for 1st time");
android_key = generateRandomEnoughStuff();
prefs.edit().putString("id", android_key).commit();
}
......
以下是我使用的一些代码-请随意调整
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
Log.d(Tag, "Yay onCreate!"); // sorry sometimes I'm a bit verbose with my logs...
createVerifierStrings();
.....
private void createVerifierStrings() {
SharedPreferences prefs = this.getSharedPreferences("Someprefstringreference", 0);
String not_set = "NOTSET";
String android_key;
android_key = prefs.getString("id", not_set);
if (android_key.equals(not_set)) {
Log.d(Tag, "Creating keys for 1st time");
android_key = generateRandomEnoughStuff();
prefs.edit().putString("id", android_key).commit();
}
......
下面是Tim Bray的一篇博文,解释了你实际上应该做什么
这是蒂姆·布雷(Tim Bray)的一篇博文,解释了你实际上应该做什么
因此,如果您想将此逻辑保留在单独的类中,请将其包含在我的主要活动中,而不是单独的类中?或者将调用
Install.id
作为主要活动中的第一件事。(是的,我知道此注释已晚了6年)因此,如果您想将此逻辑保留在单独的类中,请将其包含在我的主要活动中,而不是单独的类中?或者将调用Install.id
作为主要活动中的第一件事。(是的,我知道此注释迟了6年)我敦促您不要写入文件(您不知道所有品牌和型号的手机都提供哪些设备),但使用首选项或SharedReferences对象。除此之外,您还可以利用BackupManager,这样,如果用户在另一部手机上安装应用程序,BackupManager将跨任何存储的首选项复制到新手机上。@RichardGreen感谢您的回复。我现在正试图使用SharedReference实现此功能,但我没有这会给你带来很多麻烦。你能看看我的另一篇帖子,告诉我在哪里以及我将如何在给出的代码中实现它吗?这里有一个链接:我敦促你不要写文件(你不知道所有品牌和型号的手机都可以使用哪些设备),但使用首选项或SharedReferences对象。除此之外,您还可以利用BackupManager,这样,如果用户在另一部手机上安装应用程序,BackupManager将跨任何存储的首选项复制到新手机上。@RichardGreen感谢您的回复。我现在正试图使用SharedReference实现此功能,但我没有这会带来很多麻烦。你能看看我的另一篇文章,告诉我在哪里以及我将如何在给出的代码中实现它吗?这里有一个链接:只是添加-初始化时你不能生成字符串-你可以开始处理服务等,但你会过得更好(我认为)只是在应用程序第一次运行时这样做。只是要补充一点——你不能在初始化时生成字符串——好吧,你可以开始摆弄服务等,但你最好(我认为)在应用程序第一次运行时这样做。