2010-08-11 5 views
2

Existe-t-il un identifiant unique sur Android Mobile? Si c'est alors combien de chiffres a-t-il? Comment puis-je y accéder via mon programme ??Identifiant unique de l'appareil

Merci Deepak

+1

Il est également difficile de comprendre quel est le but de l'ID, quelle est votre utilisation pour cela. Une telle information aiderait à vous donner une réponse. Et ... oui, vous devriez passer vos questions et marquer les bonnes réponses: http://stackoverflow.com/users/406494/deepak – Juri

+0

RYAN: Comment accepter une réponse ?? S'il te plaît, dis-moi le chemin. – Deepak

Répondre

5

Il y a plusieurs problèmes qui se produisent lors de l'utilisation IMEI, IMSI ... qui sont décrits ici:

http://android-developers.blogspot.pt/2011/03/identifying-app-installations.html

L'approche recommandée est d'utiliser:

http://developer.android.com/reference/android/provider/Settings.Secure.html#ANDROID_ID

String unique_id = android.provider.Settings.Secure.getString(getContentResolver(), android.provider.Settings.Secure.ANDROID_ID); 
+0

Etes-vous sûr (e) que IMEI dépend de la carte SIM? Parce que je pense, IMEI est utilisé par les téléphones mobiles GSM. Pour les téléphones mobiles CDMA, cet identifiant unique dépend des téléphones portables. S'il vous plaît effacer mon doute. – Deepak

+0

Je suis corrigé. Je confondais IMEI avec IMSI. IMEI dépend du téléphone lui-même. Personnellement, je préfère l'ANDROID_ID car il s'agit d'une chaîne hexadécimale de 64 bits. Pour les opérations de sécurité et de gestion de licences, il est plus facile d'effectuer des opérations au niveau des bits afin que vous n'ayez pas de chaîne de texte brut dans votre code compilé. –

+0

Aaron: Nous pouvons effectuer des modifications dans ANDROID_ID en effectuant une réinitialisation d'usine. Yat-il un moyen de gérer Factory RESET ?? – Deepak

4
+0

Juste une note: J'ai découvert que l'IMEI/IMSI peut contenir des lettres et peut être plus long que 15 ... juste au cas où vous le stockez dans la base de données avec la longueur de colonne prédéfinie ... Il semble que l'android peut être installé sur les appareils qui stockent un identifiant de périphérique unique d'une manière/d'un format différents ... – WarrenFaith

3

Pour obtenir des instructions détaillées sur la façon d'obtenir un identifiant unique pour chaque appareil Android application est installé à partir, consultez cette Développeurs Android officielle affichage Blog:

http://android-developers.blogspot.com/2011/03/identifying-app-installations.html

Il semble que la meilleure façon est pour vous générer un soi-même lors de l'installation et ensuite le lire lorsque l'application est relancée.

Personnellement, je trouve cela acceptable mais pas idéal. Aucun identifiant fourni par Android ne fonctionne dans tous les cas, car la plupart dépendent des états radio du téléphone (activation/désactivation du Wi-Fi, activation/désactivation du téléphone portable, activation/désactivation du Bluetooth). Les autres paramètres tels que Settings.Secure.ANDROID_ID doivent être implémentés par le fabricant et ne sont pas garantis être uniques. Voici un exemple d'écriture de données dans un fichier INSTALLATION qui serait stocké avec d'autres données sauvegardées localement par l'application.

public class Installation { 
    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(); 
    } 
} 
Questions connexes