2012-02-07 96 views
1

我正在嘗試實現下面找到的代碼,以便在安裝應用程序時爲用戶權限生成隨機ID號。我只是有幾個問題。在應用程序安裝時設置唯一ID - Android

  1. 如果我爲此創建了一個新文件(Install.java),如何訪問另一個類中的ID?
  2. 如何確保在首次安裝應用程序時執行程序的這一部分?現在,程序從我的Main.java類開始(我是Java新手)。它會在應用程序安裝時運行嗎?

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

我強烈建議您不要寫入文件(您不知道哪些設備可用於所有品牌和型號的手機),而是使用Preferences或SharedPreferences對象。除此之外,您還可以利用BackupManager,因此如果用戶在另一部手機上安裝應用程序,BackupManager會將任何存儲的首選項複製到新手機。 – 2012-02-07 14:43:00

+0

@RichardGreen感謝您的回覆。我正在嘗試使用SharedPreference來實現此功能,但我遇到了很多麻煩。你能否看看我的另一篇文章,告訴我在哪裏和我如何在給出的代碼中實現它?這裏有一個鏈接:http://stackoverflow.com/questions/9177092/saving-user-id-in-shared-preferences-android/9177246#9177246 – mkyong 2012-02-07 14:46:52

回答

1

據我知道你沒有得到的方式來運行的任意代碼之後安裝完成。

我認爲你可以得到的最接近的是在你的MainActivity的onCreate()方法中進行檢查,以確定這是否是第一次運行(檢查這個的好方法可能是獲取對你的文件的引用並調用file.exists(),所產生的布爾會告訴你是否需要創建您的UID文件

+0

所以包括在我的主要活動,而不是一個單獨的課? – mkyong 2012-02-07 14:27:32

2

下面是一些代碼我使用 - 隨時適應,你會...

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

只需添加 - 初始化後不能生成字符串 - 你可以開始搞亂服務等等,但是你最好在我第一次運行應用程序時這樣做(我認爲)。 – 2012-02-07 23:11:34

相關問題