Android 장치 의 유일한 식별 자 ID 를 가 져 올 수 있 는 권한 이 필요 하지 않 습 니 다.

원본 링크:https://blog.csdn.net/nugongahou110/article/details/47003257
이 문 제 는 http://stackoverflow.com/questions/2785485/is-there-a-unique-android-device-id/2853253#2853253 나 는 이 문제 의 답안 을 정리 했다. 다른 문장 을 보충 으로 넣 으 면 이 문 제 를 완벽 하 게 해결 할 수 있다 는 것 을 포함한다.
저자 가 제기 한 질문:  Android 장치 에 유일한 id 가 있 습 니까?있 으 면 자바 코드 를 통 해 이 id 를 어떻게 얻 습 니까?
답:  저 는 stack OverStack 의 모든 답 을 읽 었 습 니 다. 구 글 의 개발 자 블 로그 와 Android 문 서 는 'Pseudo ID' 가 가장 좋 은 선택 이 라 고 생각 합 니 다.
 
우선 우리 가 왜 다른 방법 을 선택 하지 않 는 지 살 펴 보 자.
User Email
  • 사용 자 는 이메일 (매우 신뢰 할 수 없 음)
  • 을 변경 할 수 있 습 니 다.
  • API5 + 권한 필요 
  • API 14 + 권한 필요 

  •  
    http://stackoverflow.com/questions/2112965/how-to-get-the-android-devices-primary-e-mail-address
    사용자 핸드폰 번호
  • 사용 자 는 그들의 핸드폰 번 호 를 변경 할 수 있다 (매우 믿 을 수 없다)
  • 권한 필요
  •  
    IMEI
     
  • 안 드 로 이 드 핸드폰 만 있 고 IMEI 번 호 는 15 자리 번호 입 니 다. 예 를 들 어 이렇게 359881030314356
  • TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
    
    String szImei = TelephonyMgr.getDeviceId(); 
  • 권한 필요
  • 보통 사용 자 는 당신 이 그들 에 게 이 권한 을 요 구 했 기 때문에 당신 에 게 나 쁜 평 가 를 합 니 다. 왜냐하면 그들 은 당신 이 그들의 프라이버시 를 훔 치고 있다 고 생각 하기 때 문 입 니 다. 분명 한 것 은 데 이 터 를 수집 하고 있 는 것 입 니 다
  •  
    Android ID
     
  • 이것 은 믿 을 수 없 는 것 입 니 다. 가끔 은 null 이기 때 문 입 니 다. 문서 에 명확 하 게 설명 되 어 있 습 니 다. 만약 에 출하 설정 을 복원 하면 그 는 달라 질 것 입 니 다.그리고 만약 당신 이 핸드폰 을 루트 로 한다 면, 당신 도 이 ID 를 바 꿀 수 있 습 니 다.
  • String m_szAndroidID = Secure.getString(getContentResolver(), Secure.ANDROID_ID); 
  • 9774 d56d682e549 c 와 같은 물건 을 되 돌려 주 는 것 은 권한 이 필요 하지 않 습 니 다.

  • WLAN MAC 주소
  • 이것 도 유일무이한 ID 번 호 를 얻 을 수 있 는데 돌아 온 것 은 00: 11: 22: 33: 44: 55 이다.그러나 와 이 파이 가 없 을 때 우 리 는 데 이 터 를 얻 을 수 없다.
  • WifiManager wm = (WifiManager)getSystemService(Context.WIFI_SERVICE);
    
    String m_szWLANMAC = wm.getConnectionInfo().getMacAddress();
  • 권한 이 필요 합 니 다 android. permission. ACCESSWIFI_STATE

  •  
    블 루 투 스 MAC 주소
  • 시장 에서 대부분의 응용 프로그램 은 블 루 투 스 를 사용 하지 않 습 니 다. 만약 에 블 루 투 스 를 사용 하지 않 았 는데 사용자 와 블 루 투 스 권한 을 요구 했다 면 의 심 스 럽 습 니 다.
  • BluetoothAdapter m_BluetoothAdapter = null; 
    m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    String m_szBTMAC = m_BluetoothAdapter.getAddress();
  • 권한 필요
  •  
    가장 적합 한 방법: Pseudo - Unique ID
  • API > = 9: "Build. SERIAL" 이라는 속성 을 통 해 ID 의 유일무이한 것 을 보증 합 니 다.API 9 이상 의 안 드 로 이 드 장 비 는 현재 시장 점유 율 99.5% 다.기억 하기: 기술적 으로 만 0.5% 의 사용 자 를 무시 하고 99.5% 의 사용자
  • 에 전념 할 수 있 습 니 다.
  • API < 9: 우 리 는 장치 의 ROM 버 전 번호, 제조 업 체 이름, CPU 모델 과 다른 하드웨어 정 보 를 읽 어서 15 개의 번 호 를 조합 할 수 있 습 니 다. 이 15 개의 번 호 는 중복 될 수 있 지만 확률 이 너무 낮 아서 무시 할 수 있 습 니 다. 게다가 중복 되 더 라 도 우리 가 손실 한 사용 자 는 최대 0.5% 에 불과 합 니 다.
  • String m_szDevIDShort = "35" + 
                Build.BOARD.length()%10+ Build.BRAND.length()%10 + 
    
                Build.CPU_ABI.length()%10 + Build.DEVICE.length()%10 + 
    
                Build.DISPLAY.length()%10 + Build.HOST.length()%10 + 
    
                Build.ID.length()%10 + Build.MANUFACTURER.length()%10 + 
    
                Build.MODEL.length()%10 + Build.PRODUCT.length()%10 + 
    
                Build.TAGS.length()%10 + Build.TYPE.length()%10 + 
    
                Build.USER.length()%10 ; //13   

    '35' 에 뒤에 있 는 13 명 까지 모두 15 명 입 니 다. 우 리 는 355715565309247 이라는 번 호 를 얻 을 수 있 습 니 다. 어떠한 권한 도 필요 없고 매우 편리 합 니 다.
    //       Psuedo ID
    public static String getUniquePsuedoID() {
           String serial = null;
    
           String m_szDevIDShort = "35" + 
                Build.BOARD.length()%10+ Build.BRAND.length()%10 + 
    
                Build.CPU_ABI.length()%10 + Build.DEVICE.length()%10 + 
    
                Build.DISPLAY.length()%10 + Build.HOST.length()%10 + 
    
                Build.ID.length()%10 + Build.MANUFACTURER.length()%10 + 
    
                Build.MODEL.length()%10 + Build.PRODUCT.length()%10 + 
    
                Build.TAGS.length()%10 + Build.TYPE.length()%10 + 
    
                Build.USER.length()%10 ; //13  
    
        try {
            serial = android.os.Build.class.getField("SERIAL").get(null).toString();
           //API>=9   serial 
            return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
        } catch (Exception exception) {
            //serial       
            serial = "serial"; //        
        }
        //           15   
        return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
    

    결국 이런 아 이 디 를 얻 게 됩 니 다.
    ---------------------  원문:https://blog.csdn.net/nugongahou110/article/details/47003257

    좋은 웹페이지 즐겨찾기