2012-03-20 1 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(); 
    } 
} 

이 내 애플 리케이션에 게시됩니다 정확히 어떻게 코드에 그것을 발견했다. 이 설치의 UUID를 반환 내 관점에서

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가있는 특정 파일을 보지 못했습니다. 그러나 읽을 수없는 폴더가 하나 있습니다. UUID가 비공개입니까? 심지어 사용자로부터? –

답변

1
public synchronized static String id(Context context) 

지속적인 UUID 반환에 저장 (UUID.randomUUID에 의해 생성을()). 즉, 매번 동일한 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가있는 특정 파일을 보지 못했습니다. 그러나 읽을 수없는 폴더가 하나 있습니다. UUID가 비공개입니까? 심지어 사용자로부터? –

+0

파일은 폴더 context.getFilesDir()에 INSTALLATION이라는 이름으로 생성됩니다 (실제로 코드의 어딘가에있는 변수 일 수 있음). 이 위치를보고 싶다면이 두 값을 가진 Log 문을 삽입 해보십시오. SD 카드 탐색기에서 파일을 숨길 수 있습니다 (확실하지는 않지만). – mfrankli

+0

좋아, 내가 할 수있는 일은 프로그램이 시작될 때 로그하는 것이었다. 프로그램에서 어떤 방법으로도 들어 가지 못한다고 말할 수있다. –

1

이 아닌 같은 건 "파일에 대한 UUID는"존재하지 않습니다.

UUID는 처음 설치시 해당 ID를 가져오고 파일 내에 저장되면 생성되므로 동일한 컨텍스트를 사용하여 이전 생성 된 UUID를 반환합니다.

1

코드는 임의의 UUID를 반환하며 파일에 유지됩니다. UUID를 이미 생성 된 경우가 그렇지 않으면 무작위로 생성, 파일에서를 읽고 다음 파일