2012-03-20 5 views
1

このコードが実際に出力するものを理解するのに役立てる必要があります。それはファイルにuuidを置いていますか? 私はhttp://android-developers.blogspot.com/2011/03/identifying-app-installations.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(); 
     } 
    } 
} 
+0

これは電話で作成されていない場合、コードはUUIDをファイルに書き込みます。私は私の携帯電話のSDカードを検索して、私はそれにUUIDを持っている特定のファイルを見ていない。しかし、読めない1つのフォルダがありますが、UUIDプライベートですか?ユーザーからも? –

答えて

1
public synchronized static String id(Context context) 

(UUID.randomUUID()によって生成された)永続UUIDを返します。つまり、毎回同じUUIDを返します。 @Alonso Domiguezが答えたように、それはおそらく命名に基づくインストールIDです。目的は、このコードを使用するアプリケーションの各インスタンスに一意のIDを与えることです。

ここにトリックは

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

機能である:

writeInstallationFile(installation) 

はランダムなUUIDを生成し、ハードコードされたファイルにそのUUIDを書き込みます。ただし、一度だけ呼び出されます。なぜなら、最初の呼び出しの後、!installation.exists()は常にfalseになるからです(UUIDの書き込みによってそのファイルが作成されるためです)。

+0

これは電話で作成されたことがない場合、コードがUUIDをファイルに書き込むことを理解しています。私は私の携帯電話のSDカードを検索して、私はそれにUUIDを持っている特定のファイルを見ていない。しかし、読めない1つのフォルダがありますが、UUIDプライベートですか?ユーザーからも? –

+0

このファイルは、フォルダcontext.getFilesDir()にINSTALLATIONという名前で作成されます(実際はコード内のどこかの変数です)。これがどこであるかを知りたい場合は、これらの2つの値を持つLogステートメントを挿入することができます。SDカードエクスプローラからファイルが隠されていることはわかりますが(わかりませんが) – mfrankli

+0

さて、私はプログラムが始まったときにログに記録することしかできなかったので、プログラムの中には何も入っていないと言うことができます。 –

1

私の視点から、それはそのようなものとして、「ファイルへのUUIDが」存在しない、インストールのUUIDを返しません。

インストール用にそのIDを取得しようとするとUUIDが最初に生成され、ファイル内に格納されるため、同じコンテキストを使用して前回生成されたUUIDが返されます。

1

コードはランダムなUUIDを返します。このUUIDはファイルに保持されます。 UUIDがすでに生成された場合は、ファイルから読み出し、それ以外の場合は、ランダムにそれを作成し、ファイルに保存

関連する問題