Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

Android में यूनिक डिवाइस ID (IMEI) एक्सेस करना

⚠️ गोपनीयता और नीति चेतावनी

Android 10 (API 29) से: गैर-सिस्टम ऐप्स IMEI, सीरियल नंबर, या अन्य हार्डवेयर आइडेंटिफायर्स एक्सेस नहीं कर सकते। प्रयास करने पर SecurityException फेंका जाता है।

सर्वोत्तम अभ्यास: डिवाइस आइडेंटिफिकेशन के लिए अनरिसेटेबल पहचानकर्ता से बचें। इसके बजाय उपयोग करें:

  • Firebase Installation ID (FID) - ऐप इंस्टेंस पहचान के लिए
  • Advertising ID - विज्ञापन/एनालिटिक्स के लिए (उपयोगकर्ता रीसेट कर सकता है)
  • UUID (ऐप-स्कोप्ड) - पहली बार ऐप चलने पर जनरेट करें, SharedPreferences में स्टोर करें
  • Android ID (SSAID) - Settings.Secure.ANDROID_ID, ऐप-स्कोप्ड (Android 8.0+)

आधुनिक दृष्टिकोण: ऐप-स्कोप्ड UUID

import android.content.Context;
import android.content.SharedPreferences;
import java.util.UUID;

public class DeviceIdManager {
    private static final String PREFS_NAME = "device_id_prefs";
    private static final String KEY_DEVICE_ID = "device_uuid";
    private final SharedPreferences prefs;

    public DeviceIdManager(Context context) {
        prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
    }

    public String getDeviceId() {
        String deviceId = prefs.getString(KEY_DEVICE_ID, null);
        if (deviceId == null) {
            deviceId = UUID.randomUUID().toString();
            prefs.edit().putString(KEY_DEVICE_ID, deviceId).apply();
        }
        return deviceId;
    }

    public void resetDeviceId() {
        prefs.edit().remove(KEY_DEVICE_ID).apply();
    }
}

Android ID (SSAID) - API 26+

प्रति-ऐप, प्रति-उपयोगकर्ता यूनिक ID। ऐप अनइंस्टॉल पर रीसेट होता है।

import android.provider.Settings.Secure;

String androidId = Secure.getString(getContentResolver(), Secure.ANDROID_ID);
// उदाहरण: "a1b2c3d4e5f6g7h8"
// नोट: Android 8.0+ में प्रत्येक ऐप के लिए अलग होता है

Advertising ID (Google Play Services)

// build.gradle
implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1'

// उपयोग
import com.google.android.gms.ads.identifier.AdvertisingIdClient;
import com.google.android.gms.common.GooglePlayServicesNotAvailableException;
import com.google.android.gms.common.GooglePlayServicesRepairableException;
import java.io.IOException;

new Thread(() -> {
    try {
        AdvertisingIdClient.Info adInfo = AdvertisingIdClient.getAdvertisingIdInfo(context);
        String advertisingId = adInfo.getId();
        boolean isLimitAdTracking = adInfo.isLimitAdTrackingEnabled();
        // advertisingId उपयोग करें
    } catch (GooglePlayServicesNotAvailableException | 
             GooglePlayServicesRepairableException | IOException e) {
        e.printStackTrace();
    }
}).start();

Firebase Installation ID (FID)

// build.gradle
implementation 'com.google.firebase:firebase-installations:17.1.4'

// उपयोग
import com.google.firebase.installations.FirebaseInstallations;

FirebaseInstallations.getInstance().getId()
    .addOnSuccessListener(fid -> {
        // fid उपयोग करें - ऐप इंस्टेंस के लिए यूनिक
    })
    .addOnFailureListener(e -> {
        // एरर हैंडलिंग
    });

लीगेसी: IMEI एक्सेस (केवल Android 9 और नीचे, सिस्टम ऐप्स के लिए)

सामान्य ऐप्स के लिए काम नहीं करता Android 10+ पर।

// AndroidManifest.xml
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

// कोड (डिप्रिकेटेड/प्रतिबंधित)
import android.Manifest;
import android.content.pm.PackageManager;
import android.telephony.TelephonyManager;
import androidx.core.app.ActivityCompat;

public void requestImei() {
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) 
        != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, 
            new String[]{Manifest.permission.READ_PHONE_STATE}, 101);
        return;
    }
    
    TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
    // Android 10+ पर SecurityException फेंकेगा
    String imei = tm.getImei(); // API 26+
    // या पुराने API: tm.getDeviceId();
}

रनटाइम परमिशन हैंडलिंग

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == 101) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // परमिशन मिली, लेकिन Android 10+ पर फिर भी IMEI एक्सेस नहीं होगा
            requestImei();
        } else {
            // परमिशन अस्वीकृत
        }
    }
}

पहचानकर्ता तुलना

पहचानकर्तास्कोपरीसेटेबलAndroid 10+ एक्सेसउपयोग केस
IMEI/Serialडिवाइसनहीं❌ ब्लॉक्डनहीं उपयोग करें
Android ID (SSAID)ऐप + उपयोगकर्ताऐप अनइंस्टॉल पर✅ (ऐप-स्कोप्ड)सरल पहचान
Advertising IDउपयोगकर्ता (प्रोफाइल)हाँ (सेटिंग्स में)✅ (GMS जरूरी)विज्ञापन/एनालिटिक्स
Firebase Install IDऐप इंस्टेंसऐप डेटा क्लियर पर✅बैकएंड पहचान
कस्टम UUIDऐप इंस्टेंसऐप डेटा क्लियर पर✅सामान्य उद्देश्य

सिफारिश

  1. बैकएंड पहचान: Firebase Installation ID या कस्टम UUID
  2. एनालिटिक्स/विज्ञापन: Advertising ID (उपयोगकर्ता सहमति के साथ)
  3. सरल स्थानीय पहचान: Android ID (SSAID)
  4. कभी नहीं: IMEI, सीरियल नंबर, MAC एड्रेस (प्रतिबंधित/गोपनीयता उल्लंघन)

नमूना: संयुक्त पहचानकर्ता प्रदाता

public class IdentifierProvider {
    private final Context context;
    private final DeviceIdManager uuidManager;

    public IdentifierProvider(Context context) {
        this.context = context;
        this.uuidManager = new DeviceIdManager(context);
    }

    public String getPrimaryId() {
        return uuidManager.getDeviceId(); // ऐप-स्कोप्ड UUID
    }

    public String getAndroidId() {
        return Secure.getString(context.getContentResolver(), Secure.ANDROID_ID);
    }

    public void getAdvertisingId(OnAdIdListener listener) {
        new Thread(() -> {
            try {
                AdvertisingIdClient.Info info = AdvertisingIdClient.getAdvertisingIdInfo(context);
                listener.onAdIdReceived(info.getId(), info.isLimitAdTrackingEnabled());
            } catch (Exception e) {
                listener.onAdIdError(e);
            }
        }).start();
    }

    public interface OnAdIdListener {
        void onAdIdReceived(String adId, boolean limitAdTracking);
        void onAdIdError(Exception e);
    }
}
  1. Android डिवाइस से iCloud कैसे एक्सेस करें Android डिवाइस से iCloud कैसे एक्सेस करें

    Apple जैसी कंपनियां अपनी सेवाओं को अपने स्वयं के उपकरणों पर लॉक करके आपको अपने उत्पादों में बांधती हैं। इसका मतलब है कि अपने Android और iOS उपकरणों के बीच सेवाओं को साझा करना आसान नहीं है, लेकिन असंभव भी नहीं है। आपके Apple iCloud सेवाओं को अपने Android डिवाइस पर एक्सेस करने में मदद करने के लिए कुछ

  1. एंड्रॉइड सेटिंग्स मास्टर करें: सेटिंग्स मेनू एक्सेस करने की चरण-दर-चरण गाइड एंड्रॉइड सेटिंग्स मास्टर करें: सेटिंग्स मेनू एक्सेस करने की चरण-दर-चरण गाइड

    जब भी आप एक नया एंड्रॉइड स्मार्टफोन खरीदते हैं, तो उसकी आदत डालने में कुछ समय लगता है। एंड्रॉइड ऑपरेटिंग सिस्टम वर्षों में काफी बदल गया है। अगर आप एक बड़ा वर्जन लीप लगा रहे हैं, जैसे एंड्रॉइड मार्शमैलो से एंड्रॉइड पाई या एंड्रॉइड 10 पर, तो आप शुरुआत में थोड़ा भ्रमित महसूस कर सकते हैं। नेविगेशन विकल्

  1. अपने Android डिवाइस को सुरक्षित रूप से रूट करें – PC की आवश्यकता नहीं अपने Android डिवाइस को सुरक्षित रूप से रूट करें – PC की आवश्यकता नहीं

    Android डिवाइस को रूट करना शुरुआती और शौकीनों के लिए एक डराने वाला काम हो सकता है। इसमें शामिल जोखिमों के कारण, लोग अक्सर अपने Android स्मार्टफोन को रूट करने से हिचकिचाते हैं। शुरुआत के लिए, रूट करने के बाद आप किसी भी वारंटी दावे को खो देंगे, और अगर प्रक्रिया में कुछ गलत होता है, तो आपका फ़ोन स्थाय