mkyong
mkyong

Reputation: 12947

Setting a Unique ID at Application Install - Android

I'm trying to implement the code found below so that I can generate a random ID number for the user right when the app is installed. I just have a couple questions.

  1. If I create a new file for this (Install.java) how do I access the ID in another class?
  2. How do I make sure that this part of the program is executed when the app is first installed? Right now, the program starts on my Main.java class (I'm new to Java). Will it just run when the app is installed?

    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();
    }
    }
    

Upvotes: 1

Views: 8584

Answers (3)

Manfred Moser
Manfred Moser

Reputation: 29912

Here is a blog post from Tim Bray that explains what you actually should be doing..

http://android-developers.blogspot.com/2011/03/identifying-app-installations.html

Upvotes: 1

Richard Green
Richard Green

Reputation: 2062

Here's some code I use - feel free to adapt as you will...

 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();
    }
    ......

Upvotes: 2

FoamyGuy
FoamyGuy

Reputation: 46846

As far as I know you don't get a way to run any arbitrary code right after installation is complete.

I think the closest you can get is make a check inside your MainActivity onCreate() method that determines whether or not this is the first run (a good way to check this might be to get a reference to your file and call file.exists(), the resulting boolean will tell you whether or not you need to create your UID file.

Upvotes: 1

Related Questions