Понимание этого кода - PullRequest
1 голос
/ 20 марта 2012

Вид необходимости помочь понять, что на самом деле этот код выводит. Это положить UUID в файл? Я нашел его на http://android -developers.blogspot.com / 2011/03 / идентификации-приложения-установки.html

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

Код, как он размещен в моем приложении.

package com.UUIID;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import android.util.Log;
import java.io.RandomAccessFile;
import java.util.UUID;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.widget.TextView;

public class UUIDActivity extends Activity {
    /** Called when the activity is first created. */
    TextView text;
    private static final String TAG = "Installation";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Log.d(TAG, "program started");
        text = (TextView) findViewById(R.id.textfield);

    }

    class Installation {

        private String sID = null;
        private static final String INSTALLATION = "INSTALLATION";

        public synchronized String id(Context context) {
            if (sID == null) {
                File installation = new File(context.getFilesDir(),
                        INSTALLATION);
                try {

                    if (!installation.exists())
                        writeInstallationFile(installation);
                    Log.d(TAG, "Inside of installation If statement");
                    sID = readInstallationFile(installation);
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            }
            return sID;
        }

        private String readInstallationFile(File installation)
                throws IOException {
            RandomAccessFile f = new RandomAccessFile(installation, "r");
            byte[] bytes = new byte[(int) f.length()];
            f.readFully(bytes);
            Log.d(TAG, "Right before it calls f to close");
            f.close();
            return new String(bytes);
        }

        private void writeInstallationFile(File installation)
                throws IOException {
            FileOutputStream out = new FileOutputStream(installation);
            String id = UUID.randomUUID().toString();
            Log.d(TAG, "Right before the file gets written out.");
            out.write(id.getBytes());
            out.close();
        }
    }
}

Ответы [ 3 ]

1 голос
/ 20 марта 2012

Код возвращает случайный UUID, который сохраняется в файле.Если UUID уже был сгенерирован, он считывает его из файла, в противном случае он создает его случайным образом и затем сохраняет его в файл

1 голос
/ 20 марта 2012
public synchronized static String id(Context context)

возвращает постоянный UUID (генерируется UUID.randomUUID ()). Другими словами, он будет возвращать один и тот же UUID каждый раз. Как ответил @Alonso Domiguez, это, вероятно, идентификатор установки, основанный на именовании. Цель состоит в том, чтобы дать каждому экземпляру приложения, которое использует этот код, уникальный идентификатор.

Трюк здесь

if (!installation.exists())
    writeInstallationFile(installation);
sID = readInstallationFile(installation);

Функция:

writeInstallationFile(installation)

генерирует случайный UUID и записывает этот UUID в жестко запрограммированный файл. Однако он будет вызываться только один раз; потому что после первого вызова! installation.exists () всегда будет ложным (поскольку запись UUID создает этот файл).

1 голос
/ 20 марта 2012

С моей точки зрения, он возвращает UUID установки, а не "UUID для файла", поскольку такой вещи не существует.

UUID генерируется при первой попытке получить этот идентификатор для установки и сохраняется в файле, поэтому дальнейшие вызовы с использованием того же контекста вернут предыдущий сгенерированный UUID.

...