কীভাবে ডিভাইসের আইএমইআই / ইএসএন প্রোগ্রামায়মে অ্যান্ড্রয়েডে পাবেন?


343

প্রতিটি ডিভাইস অনন্যভাবে সনাক্ত করতে আমি আইএমইআই (বা সিডিএমএ ডিভাইসের জন্য ইএসএন নম্বর) ব্যবহার করতে চাই। কীভাবে এই প্রোগ্রামটিমে অ্যাক্সেস করবেন?


দ্বৈত সিমের উভয় সিমের জন্য আইএমইআই পেতে ফোনগুলি জাভা প্রতিবিম্ব ব্যবহার করে। দেখুন এখানে ডেমো
বৈভব জনি

5
@ পিডপাইপার: আইএমইআই সিম-নির্দিষ্ট নয়। আপনি আইএমএসআই ভাবছেন।
ফিলিপ

@ ফিলিপ ধন্যবাদ সাথী। আমি আমার উত্তর আপডেট করেছি :)
বৈভব জনি

1
সবাই .. অ্যান্ড্রয়েড 6 এর কিছু পরিবর্তন আছে? আমরা কি এখনও কিছু উপায়ে IMEI অ্যাক্সেস করতে পারি?
থালাপ্রশান্ত

1
আপনাকে রানটাইমের সময় অনুমতি READ_PHONE_STATE এর জন্য অনুরোধ করতে হবে, তারপরেও আপনি আইএমইআই
ফ্লো

উত্তর:


387

আপনি কল করতে চান android.telephony.TelephonyManager.getDeviceId()

এটি ডিভাইসটিকে স্বতন্ত্রভাবে চিহ্নিত করে যে কোনও স্ট্রিংই ফিরে আসবে (জিএসএমের আইএমইআই, সিডিএমএর জন্য এমইআইডি)।

আপনার এগুলির জন্য নিম্নলিখিত অনুমতি প্রয়োজন হবে AndroidManifest.xml:

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

এই কাজ করার জন্য.

বলা হচ্ছে, এটি করার বিষয়ে সাবধানতা অবলম্বন করুন। আপনার অ্যাপ্লিকেশনটি কেন তাদের টেলিফোনি স্ট্যাকটি অ্যাক্সেস করছে তা কেবল ব্যবহারকারীরা আশ্চর্যই করবেন না, ব্যবহারকারী কোনও নতুন ডিভাইস পেলে ডেটা স্থানান্তর করাও মুশকিল।

আপডেট: নীচের মন্তব্যে উল্লিখিত হিসাবে, এটি ব্যবহারকারীদের অনুমোদনের নিরাপদ উপায় নয় এবং গোপনীয়তা সম্পর্কিত উদ্বেগ উত্থাপন করে। এটি সুপারিশ করা হয় না। পরিবর্তে, আপনি যদি কোনও ঘর্ষণবিহীন লগইন সিস্টেমটি প্রয়োগ করতে চান তবে Google+ লগইন এপিআই দেখুন ।

Android ব্যাকআপ এপিআই যদি আপনি শুধুমাত্র একটি লাইটওয়েট উপায় একটি ব্যবহারকারী তাদের ফোন রিসেট (অথবা একটি নতুন ডিভাইস ক্রয়) জন্য স্ট্রিং একটি বান্ডিল জিদ করতে চান পাওয়া যায়।


1
এর চেয়ে ভাল সমাধান আর কী হতে পারে যা ভবিষ্যতে ডেটা স্থানান্তর করতে তাদের সক্ষম করবে? গুগলের ইমেল ঠিকানা? যদি তা হয় তবে আমি কীভাবে এটি সিস্টেম থেকে টেনে আনতে পারি?
টম

3
এটি করার সবচেয়ে নির্ভরযোগ্য উপায় হ'ল প্রথমবার তারা যখন আপনার অ্যাপ্লিকেশন চালু করে তখনই তাদের একটি অ্যাকাউন্ট তৈরি করা। ব্যবহারকারীর ইমেল ঠিকানা পাওয়ার উপায় আছে (অ্যাকাউন্টম্যানেজারের ডক্সগুলি দেখুন), তবে কোনও দূষিত ব্যবহারকারী এই তথ্যটি জাল করেনি তা যাচাই করতে গুগল ডেটা এপিআইগুলি কীভাবে কাজ করে সে সম্পর্কে কিছুটা জ্ঞান প্রয়োজন - আমি এই তথ্যটি যতটা না বলতে পারি তার চেয়ে বেশি ছোট মন্তব্য বাক্স। ;)
ট্রেভর জনস

1
প্রকৃতপক্ষে, এই বিষয়ে, আপনার কোনও গ্যারান্টি নেই যে ব্যবহারকারী তাদের আইএমইআই / এমইআইডি নকল করে না। সুরক্ষা যদি কোনও উদ্বেগের বিষয় থাকে তবে আপনার অবশ্যই অ্যাকাউন্টম্যানেজারে একটি ব্যবহারকারীর নাম / পাসওয়ার্ড, অথবা getAuthToken () পদ্ধতি ব্যবহার করতে হবে (এবং আবারও, আপনাকে মূলত এটি ইস্যু করা সার্ভারের সাথে এই টোকেনটি যাচাই করতে হবে)।
ট্রেভর জনস

2
আদি: ডিভাইস আইডি পাওয়ার কোড? উপরে উল্লিখিত এক পদ্ধতি + অনুমতি ছাড়া আর কিছুই নেই। এতে বলা হয়েছে, আপনার Google+ লগইন এপিআইয়ের সন্ধান করা উচিত, এটি ব্যবহারকারীদের প্রমাণীকরণের জন্য আজকাল প্রস্তাবিত পদ্ধতি: বিকাশকারী.অ্যান্ড্রয়েড.
ট্রেভর জনস

2
এটি কি অ্যান্ড্রয়েড 6 চালাচ্ছে? এবং আপনি এসডিকে 23 টার্গেট করছেন? তারপরে আপনাকে আইএমইআই
ফ্লো

284

ট্রেভর জনসের উত্তর ছাড়াও, আপনি এটি নীচে ব্যবহার করতে পারেন:

TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.getDeviceId();

এবং আপনার Manifest.xML ফাইলে আপনার নীচের অনুমতিটি যুক্ত করা উচিত:

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

এমুলেটরটিতে আপনি সম্ভবত "00000 ..." মান পাবেন। getDeviceId () ডিভাইস আইডি উপলভ্য না হলে NULL প্রদান করে।


1
এমুলেটরটি কোনও আইএমইআই নম্বর ফেরত পাওয়ার কোনও উপায় আছে কি?
মাইকশেম

@ মাইকশেম, এমুলেটরটির একটি অর্থপূর্ণ আইএমইআই স্ট্রিং নেই।
shizhen

ব্যবহার করার চেষ্টা করবেন না: <ব্যবহার-অনুমতি অ্যান্ড্রয়েড: নাম = "android.permission.READ_PHONE_STATE" /> এই অনুমতিটি অত্যন্ত সংবেদনশীল, আপনি গুগল প্লে টিম থেকে অ্যাপ প্রত্যাখ্যান করতে পারেন (২০১৮ সালের শেষের দিকে নতুন সুরক্ষা বিধি যুক্ত করা হয়েছে)। পরামর্শ হিসাবে ভাল বিজ্ঞাপন আইডি ব্যবহার করুন।
ডুনা

@ ট্যানার এটি ডুয়াল সিম ডিভাইসে কাজ করবে? (কেবলমাত্র প্রথম আইএমইআই পেতে হবে)
আর্নল্ড ব্রাউন

READ_PHONE_STATEঅনুমতি ব্যবহারের জন্য কি কোনও সুরক্ষা উদ্বেগ আছে ?
ভাইপার

62

আমি আইএমইআই পেতে সিকিউর ব্যবহার করতে নীচের কোডটি ব্যবহার করি।

/**
 * Returns the unique identifier for the device
 *
 * @return unique identifier for the device
 */
public String getDeviceIMEI() {
    String deviceUniqueIdentifier = null;
    TelephonyManager tm = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
    if (null != tm) {
        deviceUniqueIdentifier = tm.getDeviceId();
    }
    if (null == deviceUniqueIdentifier || 0 == deviceUniqueIdentifier.length()) {
        deviceUniqueIdentifier = Settings.Secure.getString(this.getContentResolver(), Settings.Secure.ANDROID_ID);
    }
    return deviceUniqueIdentifier;
}

17
TextUtils.isEmpty () -> যদি (সনাক্তকারী == নাল || সনাক্তকারী। দৈর্ঘ্য () == 0)
মিখাইল

2
হাই পিনহাসি, টেলিফোনি ম্যানেজারের দ্বারা ফিরে আসা ডিভাইস আইডিটি বাতিল বা খালি থাকলে আপনার কি কোনও সমস্যা আছে? তবে সিকিউর থেকে পড়া মানটি ND এন্ড্রয়েড_আইডি খালি ছিল না? ধন্যবাদ
বুদা

4
আমি যতদূর মনে করতে পারি এটি সিম কার্ডবিহীন ট্যাবলেটগুলির জন্য ছিল (তবে আমি 100% নিশ্চিত নই)।
আসফ পিনহ্যাসি

সুরক্ষিত.অ্যান্ড্রয়েড_আইডি যদি ডিভাইস ফর্ম্যাট হয় বা রোম ফ্যাক্টরি রিসেট হয়
শ্রীদত্ত কোঠারি

আমার Nexus7 (1stGen) nullটেলিফোনি ডিভাইসের জন্য ফিরে এসেছেআইডি ... যে কোনও ট্যাবলেট থেকে আইএমইআই পেতে কীভাবে জানেন?
সাকিবয়

38

অথবা আপনি অ্যান্ড্রয়েড.আর সরবরাহকারী.সেটিংস.সিসটেম থেকে ANDROID_ID সেটিংটি ব্যবহার করতে পারেন (এখানে বর্ণিত হিসাবে অ্যান্ড্রয়েড.প্রভিডার.সেটেটিংস.সিসটেম এন্ড্রয়েড_আইডি স্ট্রাজের.কম )।

এর সুবিধা রয়েছে যে এটির জন্য বিশেষ অনুমতি প্রয়োজন নেই তবে অন্য কোনও অ্যাপ্লিকেশনটির লেখার অ্যাক্সেস রয়েছে এবং এটি পরিবর্তন করে যদি এটি পরিবর্তন করতে পারে (যা দৃশ্যত অস্বাভাবিক তবে অসম্ভব নয়)।

কেবল এখানে রেফারেন্সের জন্য ব্লগের কোড:

import android.provider.Settings;
import android.provider.Settings.System;   

String androidID = System.getString(this.getContentResolver(),Secure.ANDROID_ID);

বাস্তবায়ন দ্রষ্টব্য : আইডিটি যদি সিস্টেম আর্কিটেকচারের জন্য সমালোচনা করে থাকে তবে আপনাকে সচেতন হওয়া দরকার যে অনুশীলনে খুব নিম্ন প্রান্তের অ্যান্ড্রয়েড ফোন এবং ট্যাবলেটগুলির মধ্যে একই অ্যান্ড্রয়েড_আইডি পুনরায় ব্যবহার করতে দেখা গেছে (9774d56d682e549c আমাদের লগগুলিতে দেখানো মান ছিল)


15
এই ধ্রুবক হ্রাস করা হয়। পরিবর্তে আপনার android.provider.Settings.Secure.ANDROID_ID ব্যবহার করা উচিত;
ম্যাকরলে

@ এমকর্লি যখন আমি নেক্সাস 7 ট্যাবলেট এবং নেক্সাস 4 এর জন্য android.provider.Settings.Secure.ANDROID_ID ব্যবহার করি তখন এটি একই মান '
অ্যান্ড্রয়েড_আইডি

3
@ মাওমিও আমার পক্ষে একই কাজ করেছিলেন, যতক্ষণ না আমি কোডটি ব্যবহার করি যা এখন উত্তর (ইশ) এর অংশ। String androidID = android.provider.Settings.System.getString(this.getContentResolver(), Secure.ANDROID_ID);
ম্যাথিয়াস

তবে কি কারখানার পুনরায় সেট করার পরে এটি কোনও নতুন ANDROID_ID এ পুনরায় সেট হবে না? আমার যদি অবিরাম অ্যান্ড্রয়েড_আইডি দরকার যা পুনরায় সেট থেকে বাঁচতে পারে।
ইগোরগানাপলস্কি

35

থেকে: http://mytechead.wordpress.com/2011/08/28/how-to-get-imei-number-of-android-device/ :

নিম্নলিখিত কোডটি অ্যান্ড্রয়েড ডিভাইসের আইএমইআই নম্বর পেতে সহায়তা করে:

TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
String device_id = tm.getDeviceId();

অ্যান্ড্রয়েড ম্যানিফেস্টে প্রয়োজনীয় অনুমতিগুলি:

android.permission.READ_PHONE_STATE

দ্রষ্টব্য: ট্যাবলেট বা ডিভাইসগুলির ক্ষেত্রে যা মোবাইল ফোন আইএমইআই হিসাবে কাজ করতে পারে না তা বাতিল হবে।


1
এটিই আসল কোড যা আমি আইএমইআই পেতে সন্ধান করছি
আনন্দ সাবজনী

2
দুর্ভাগ্যক্রমে, মার্শমেলো ফরোয়ার্ডের সাথে আপনাকে এখন রানটাইমে এই অনুমতি চাইতে হবে। এই অনুমতিটি আদর্শ নয়, কারণ এটি ব্যবহারকারীর অভিজ্ঞতা বিরক্ত করে এবং কিছু ব্যবহারকারীকে সন্দেহজনক করে তুলতে পারে।
ইগোরগানাপলস্কি

ব্যবহার করার চেষ্টা করবেন না: <ব্যবহার-অনুমতি অ্যান্ড্রয়েড: নাম = "android.permission.READ_PHONE_STATE" /> এই অনুমতিটি অত্যন্ত সংবেদনশীল, আপনি গুগল প্লে টিম থেকে অ্যাপ প্রত্যাখ্যান করতে পারেন (2018 এর শেষের দিকে নতুন সুরক্ষা বিধি যুক্ত করা হয়েছে)। পরামর্শ হিসাবে ভাল আইএমইআই পরিবর্তে বিজ্ঞাপন আইডি ব্যবহার করুন
ডুনা

অ্যান্ড্রয়েড 10 এর সমাধান কী?
আমিন পিনজারি

23

পেতে আইএমইআই (ইন্টারন্যাশনাল মোবাইল ইকুইপমেন্ট আইডেন্টিফায়ার)

public String getIMEI(Activity activity) {
    TelephonyManager telephonyManager = (TelephonyManager) activity
            .getSystemService(Context.TELEPHONY_SERVICE);
    return telephonyManager.getDeviceId();
}

ডিভাইস অনন্য আইডি পেতে

public String getDeviceUniqueID(Activity activity){
    String device_unique_id = Secure.getString(activity.getContentResolver(),
            Secure.ANDROID_ID);
    return device_unique_id;
}

2
ডিভাইস_উনিক_আইডি বিকল্পটি দেখানো সত্যিই সহায়ক
জো গ্যালিন্ড

20

অ্যান্ড্রয়েড 6.0+ এর জন্য গেমটি পরিবর্তিত হয়েছে তাই আমি আপনাকে এটি ব্যবহার করার পরামর্শ দিই;

যাওয়ার সর্বোত্তম উপায়টি রানটাইম চলাকালীন অন্যথায় আপনি অনুমতি ত্রুটি পান।

   /**
 * A loading screen after AppIntroActivity.
 */
public class LoadingActivity extends BaseActivity {
private static final int MY_PERMISSIONS_REQUEST_READ_PHONE_STATE = 0;
private TextView loading_tv2;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_loading);

    //trigger 'loadIMEI'
    loadIMEI();
    /** Fading Transition Effect */
    overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
}

/**
 * Called when the 'loadIMEI' function is triggered.
 */
public void loadIMEI() {
    // Check if the READ_PHONE_STATE permission is already available.
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE)
            != PackageManager.PERMISSION_GRANTED) {
        // READ_PHONE_STATE permission has not been granted.
        requestReadPhoneStatePermission();
    } else {
        // READ_PHONE_STATE permission is already been granted.
        doPermissionGrantedStuffs();
    }
}



/**
 * Requests the READ_PHONE_STATE permission.
 * If the permission has been denied previously, a dialog will prompt the user to grant the
 * permission, otherwise it is requested directly.
 */
private void requestReadPhoneStatePermission() {
    if (ActivityCompat.shouldShowRequestPermissionRationale(this,
            Manifest.permission.READ_PHONE_STATE)) {
        // Provide an additional rationale to the user if the permission was not granted
        // and the user would benefit from additional context for the use of the permission.
        // For example if the user has previously denied the permission.
        new AlertDialog.Builder(LoadingActivity.this)
                .setTitle("Permission Request")
                .setMessage(getString(R.string.permission_read_phone_state_rationale))
                .setCancelable(false)
                .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        //re-request
                        ActivityCompat.requestPermissions(LoadingActivity.this,
                                new String[]{Manifest.permission.READ_PHONE_STATE},
                                MY_PERMISSIONS_REQUEST_READ_PHONE_STATE);
                    }
                })
                .setIcon(R.drawable.onlinlinew_warning_sign)
                .show();
    } else {
        // READ_PHONE_STATE permission has not been granted yet. Request it directly.
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE},
                MY_PERMISSIONS_REQUEST_READ_PHONE_STATE);
    }
}

/**
 * Callback received when a permissions request has been completed.
 */
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                       @NonNull int[] grantResults) {

    if (requestCode == MY_PERMISSIONS_REQUEST_READ_PHONE_STATE) {
        // Received permission result for READ_PHONE_STATE permission.est.");
        // Check if the only required permission has been granted
        if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // READ_PHONE_STATE permission has been granted, proceed with displaying IMEI Number
            //alertAlert(getString(R.string.permision_available_read_phone_state));
            doPermissionGrantedStuffs();
        } else {
            alertAlert(getString(R.string.permissions_not_granted_read_phone_state));
          }
    }
}

private void alertAlert(String msg) {
    new AlertDialog.Builder(LoadingActivity.this)
            .setTitle("Permission Request")
            .setMessage(msg)
            .setCancelable(false)
            .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    // do somthing here
                }
            })
            .setIcon(R.drawable.onlinlinew_warning_sign)
            .show();
}


public void doPermissionGrantedStuffs() {
    //Have an  object of TelephonyManager
    TelephonyManager tm =(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
    //Get IMEI Number of Phone  //////////////// for this example i only need the IMEI
    String IMEINumber=tm.getDeviceId();

    /************************************************
     * **********************************************
     * This is just an icing on the cake
     * the following are other children of TELEPHONY_SERVICE
     *
     //Get Subscriber ID
     String subscriberID=tm.getDeviceId();

     //Get SIM Serial Number
     String SIMSerialNumber=tm.getSimSerialNumber();

     //Get Network Country ISO Code
     String networkCountryISO=tm.getNetworkCountryIso();

     //Get SIM Country ISO Code
     String SIMCountryISO=tm.getSimCountryIso();

     //Get the device software version
     String softwareVersion=tm.getDeviceSoftwareVersion()

     //Get the Voice mail number
     String voiceMailNumber=tm.getVoiceMailNumber();


     //Get the Phone Type CDMA/GSM/NONE
     int phoneType=tm.getPhoneType();

     switch (phoneType)
     {
     case (TelephonyManager.PHONE_TYPE_CDMA):
     // your code
     break;
     case (TelephonyManager.PHONE_TYPE_GSM)
     // your code
     break;
     case (TelephonyManager.PHONE_TYPE_NONE):
     // your code
     break;
     }

     //Find whether the Phone is in Roaming, returns true if in roaming
     boolean isRoaming=tm.isNetworkRoaming();
     if(isRoaming)
     phoneDetails+="\nIs In Roaming : "+"YES";
     else
     phoneDetails+="\nIs In Roaming : "+"NO";


     //Get the SIM state
     int SIMState=tm.getSimState();
     switch(SIMState)
     {
     case TelephonyManager.SIM_STATE_ABSENT :
     // your code
     break;
     case TelephonyManager.SIM_STATE_NETWORK_LOCKED :
     // your code
     break;
     case TelephonyManager.SIM_STATE_PIN_REQUIRED :
     // your code
     break;
     case TelephonyManager.SIM_STATE_PUK_REQUIRED :
     // your code
     break;
     case TelephonyManager.SIM_STATE_READY :
     // your code
     break;
     case TelephonyManager.SIM_STATE_UNKNOWN :
     // your code
     break;

     }
     */
    // Now read the desired content to a textview.
    loading_tv2 = (TextView) findViewById(R.id.loading_tv2);
    loading_tv2.setText(IMEINumber);
}
}

আশা করি এটি আপনাকে বা কাউকে সহায়তা করবে।


16

নতুন আপডেট:

অ্যান্ড্রয়েড সংস্করণ And এবং এর উপরে, ডাব্লুএলএএন ম্যাক ঠিকানা অবহেলা করা হয়েছে, ট্রেভর জনসের উত্তর অনুসরণ করুন

হালনাগাদ:

ডিভাইসগুলির অনন্যরূপে সনাক্তকরণের জন্য, আপনি Secure.ANDROID_ID ব্যবহার করতে পারেন ।

পুরানো উত্তর:

আইএমইআইআই অনন্য ডিভাইস আইডি হিসাবে ব্যবহার করার অসুবিধা:

  • আইএমইআই ডিভাইসের সিমকার্ড স্লটের উপর নির্ভরশীল, তাই সিমকার্ড ব্যবহার না করে এমন ডিভাইসগুলির জন্য আইএমইআই পাওয়া সম্ভব নয়। ডুয়াল সিম ডিভাইসে, আমরা একই ডিভাইসের জন্য 2 টি আলাদা আইএমইআই পাই কারণ এতে সিমকার্ডের জন্য 2 টি স্লট রয়েছে।

আপনি ডাব্লুএলএএন ম্যাক অ্যাড্রেস স্ট্রিংটি ব্যবহার করতে পারেন (মার্শমেলো এবং মার্শমেলো + এর জন্য প্রস্তাবিত নয় যেমন ডাব্লুএলএএন ম্যাক ঠিকানা মার্শমেলো ফরোয়ার্ডে অবচয় করা হয়েছে। সুতরাং আপনি একটি বোগাস মান পাবেন)

আমরা ডাব্লুএলএএন ম্যাক ঠিকানা ব্যবহার করে অ্যান্ড্রয়েড ফোনগুলির জন্য স্বতন্ত্র আইডি পেতে পারি। ম্যাক ঠিকানা সমস্ত ডিভাইসের জন্য অনন্য এবং এটি সমস্ত ধরণের ডিভাইসের জন্য কাজ করে।

ডিভাইস আইডি হিসাবে ডাব্লুএলএএন ম্যাক ঠিকানা ব্যবহারের সুবিধা:

  • এটি সমস্ত ধরণের ডিভাইস (স্মার্ট ফোন এবং ট্যাবলেট) এর জন্য অনন্য শনাক্তকারী।

  • অ্যাপ্লিকেশনটি পুনরায় ইনস্টল করা থাকলে এটি অনন্য থেকে যায়

ডিভাইস আইডি হিসাবে ডাব্লুএলএএন ম্যাক ঠিকানা ব্যবহারের অসুবিধা:

  • মার্শমেলো এবং উপরের থেকে আপনাকে একটি বোগাস মান দিন।

  • ডিভাইসে যদি ওয়াইফাই হার্ডওয়্যার না থাকে তবে আপনি নাল ম্যাক ঠিকানা পান তবে সাধারণত দেখা যায় যে অ্যান্ড্রয়েড ডিভাইসগুলির বেশিরভাগই ওয়াইফাই হার্ডওয়্যার রয়েছে এবং বাজারে খুব কমই এমন ডিভাইস নেই যা ওয়াইফাই হার্ডওয়্যারবিহীন রয়েছে।

উত্স : technetexperts.com


7
"আইএমইআই সিমকার্ডের উপর নির্ভরশীল" ... এটি মিথ্যা। আপনি আইএমএসআই-কে আইএমএসআই নম্বর দিয়ে বিভ্রান্ত করছেন বলে মনে হচ্ছে
মেরলেভেড

2
একটি আন্তর্জাতিক মোবাইল স্টেশন সরঞ্জাম পরিচয় বা সংক্ষেপে IMEI হ'ল একটি জিএসএম নেটওয়ার্কে চলমান মোবাইল ফোনগুলি সনাক্ত করে। আমি ব্যক্তিগতভাবে এটি চেষ্টা করেছি এবং যদি জিএসএম ফোনে কোনও ওয়্যারলেস ক্যারিয়ার না থাকে তবে প্রোগ্রামটিগতভাবে তা আমাকে বাতিল করে দেয়। स्मार्टমোবাইলফোনসলিউশনস
জামিল

3
ঠিক বলেছেন, আমি মনোযোগ দিয়ে পড়িনি। আইএমইআই সিম কার্ডের সাথে নয়, সিম কার্ড ট্রান্সসিভারের সাথে সম্পর্কিত। আমার খারাপ!
মেরলভেদে

2
ডাব্লুএলএএন ম্যাক ঠিকানা মার্শমেলো ফরোয়ার্ডে অবচয় করা হয়েছে। সুতরাং আপনি একটি বোগাস মান পাবেন!
ইগোরগানাপলস্কি

1
অ্যান্ড্রয়েড 6 আপনার কোড সহ সঠিক ওয়াইফাই ম্যাক ঠিকানা ফিরে না। এটি লক্ষ্য করুন।
zszen

15

যেমন এপিআই 26 getDeviceId()তে অবমূল্যায়ন করা হয়েছে তাই আপনি API 26 এবং পূর্ববর্তী সংস্করণগুলি পূরণ করতে নিম্নলিখিত কোডগুলি ব্যবহার করতে পারেন

TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
String imei="";
if (android.os.Build.VERSION.SDK_INT >= 26) {
  imei=telephonyManager.getImei();
}
else
{
  imei=telephonyManager.getDeviceId();
}

READ_PHONE_STATEউপরের কোডটি ব্যবহার করার জন্য অনুমতি অনুরোধগুলি যুক্ত করতে ভুলবেন না ।

আপডেট: অ্যান্ড্রয়েড 10 থেকে এটি আইএমইআইয়ের মতো পুনরায় সেটযোগ্য হার্ডওয়্যার সনাক্তকারীদের পেতে ব্যবহারকারী অ্যাপ্লিকেশনগুলির পক্ষে সীমাবদ্ধ restricted


মন ভাগ করে নেওয়ার জন্য আমি 'getImei () "পদ্ধতির রেফারেন্সটি কোথায় পাব?
সাম বাইট

2
অবশ্যই ব্যবহার করুন developer.android.com/reference/android/telephony/... getImei () রেফারেন্সের জন্য
মুহাম্মদ হামজা শহীদ

অ্যান্ড্রয়েড 10 এর সমাধান কী?
আমিন পিনজারি

1
অ্যান্ড্রয়েড 10 দুর্ভাগ্যবশত নিরাপত্তা কারণে আমিন এটা এখন তৃতীয় পক্ষের জন্য সীমিত থাকবে অ্যান্ড্রয়েড 10 দর্শন গোপনীয়তা পরিবর্তন আরো তথ্যের জন্য আইএমইআই মত হার্ডওয়্যারের শনাক্তকারী পেতে অ্যাপ developer.android.com/about/versions/10/privacy
মুহাম্মদ হামজা শহীদ

অ্যান্ড্রয়েড ওরিওতে কাজ করে।
সতীশ শেঠি

10

টেলিফোনি ম্যানেজারের পদ্ধতিটি ডিভাইসআইডি () অনন্য ডিভাইস আইডি প্রদান করে, উদাহরণস্বরূপ, জিএসএমের জন্য আইএমইআই এবং সিডিএমএ ফোনগুলির জন্য এমইআইডি বা ইএসএন। ডিভাইস আইডি উপলব্ধ না হলে নাল ফেরান Return

জাভা কোড

package com.AndroidTelephonyManager;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.widget.TextView;

public class AndroidTelephonyManager extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    TextView textDeviceID = (TextView)findViewById(R.id.deviceid);

    //retrieve a reference to an instance of TelephonyManager
    TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);

    textDeviceID.setText(getDeviceID(telephonyManager));

}

String getDeviceID(TelephonyManager phonyManager){

 String id = phonyManager.getDeviceId();
 if (id == null){
  id = "not available";
 }

 int phoneType = phonyManager.getPhoneType();
 switch(phoneType){
 case TelephonyManager.PHONE_TYPE_NONE:
  return "NONE: " + id;

 case TelephonyManager.PHONE_TYPE_GSM:
  return "GSM: IMEI=" + id;

 case TelephonyManager.PHONE_TYPE_CDMA:
  return "CDMA: MEID/ESN=" + id;

 /*
  *  for API Level 11 or above
  *  case TelephonyManager.PHONE_TYPE_SIP:
  *   return "SIP";
  */

 default:
  return "UNKNOWN: ID=" + id;
 }

}
}

এক্সএমএল

<linearlayout android:layout_height="fill_parent" android:layout_width="fill_parent" android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android">
<textview android:layout_height="wrap_content" android:layout_width="fill_parent" android:text="@string/hello">
<textview android:id="@+id/deviceid" android:layout_height="wrap_content" android:layout_width="fill_parent">
</textview></textview></linearlayout> 

ম্যানিফেস্ট ফাইলে অনুমতি প্রয়োজন READ_PHONE_STATE ired


4

আপনি এই TelephonyManager ব্যবহার করতে পারেন TELEPHONY_SERVICE পেতে ফাংশন অনন্য ডিভাইস ID , প্রয়োজন অনুমতি: READ_PHONE_STATE

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

উদাহরণস্বরূপ, জিএসএমের জন্য আইএমইআই এবং সিডিএমএ ফোনগুলির জন্য এমইআইডি বা ইএসএন

/**
 * Gets the device unique id called IMEI. Sometimes, this returns 00000000000000000 for the
 * rooted devices.
 **/
public static String getDeviceImei(Context ctx) {
    TelephonyManager telephonyManager = (TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE);
    return telephonyManager.getDeviceId();
}

নাল ফিরে যদি ডিভাইস ID উপলব্ধ নয়


এবং কেন ডিভাইস আইডি নাল? কারণ মূলযুক্ত ডিভাইস।
বিশাল সোজিত্রা

অ্যান্ড্রয়েড 10 এর সমাধান কী?
আমিন পিনজারি


3

এটি চেষ্টা করুন (সর্বদা প্রথম আইএমইআই পেতে হবে)

TelephonyManager mTelephony = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        if (ActivityCompat.checkSelfPermission(LoginActivity.this,Manifest.permission.READ_PHONE_STATE)!= PackageManager.PERMISSION_GRANTED) {

         return;
}

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                if (mTelephony.getPhoneCount() == 2) {
                    IME = mTelephony.getImei(0);
                }else{
                    IME = mTelephony.getImei();
                }
            }else{
                if (mTelephony.getPhoneCount() == 2) {
                    IME = mTelephony.getDeviceId(0);
                } else {
                    IME = mTelephony.getDeviceId();
                }
            }
        } else {
            IME = mTelephony.getDeviceId();
        }

অ্যান্ড্রয়েড 10 এর সমাধান কী? developer.android.com/about/versions/10/privacy
আমিন পিনজারি

2

নীচের কোডটি আপনাকে আইএমইআই নম্বর দেয়:

TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
System.out.println("IMEI::" + telephonyManager.getDeviceId());

1

11 স্তরের বা ততোধিক স্তরের জন্য:

case TelephonyManager.PHONE_TYPE_SIP: 
return "SIP";

TelephonyManager tm= (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
textDeviceID.setText(getDeviceID(tm));

1

হ্যান্ডলিং অনুমোদনের সাথে ডিভাইসআইডি (আইএমইআই) পাওয়ার জন্য কোটলিন কোড এবং সমস্ত অ্যান্ড্রয়েড সংস্করণের জন্য তুলনামূলকতা পরীক্ষা করুন:

 val  telephonyManager = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE)
        == PackageManager.PERMISSION_GRANTED) {
        // Permission is  granted
        val imei : String? = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)  telephonyManager.imei
        // older OS  versions
        else  telephonyManager.deviceId

        imei?.let {
            Log.i("Log", "DeviceId=$it" )
        }

    } else {  // Permission is not granted

    }

এই অনুমতিটি AndroidManLive.xML এ যুক্ত করুন:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/> <!-- IMEI-->

1

আপনার আপনার অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএলে নিম্নলিখিত অনুমতি দরকার হবে:

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

পেতে আইএমইআই (ইন্টারন্যাশনাল মোবাইল ইকুইপমেন্ট আইডেন্টিফায়ার) এবং যদি এটা এপিআই স্তর 26 ঊর্ধ্বে তারপর আমরা পেতে telephonyManager.getImei()নাল যাতে জন্য, আমরা ব্যবহার ANDROID_ID একটি অনন্য শনাক্তকারী হিসেবে।

 public static String getIMEINumber(@NonNull final Context context)
            throws SecurityException, NullPointerException {
        TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        String imei;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            assert tm != null;
            imei = tm.getImei();
            //this change is for Android 10 as per security concern it will not provide the imei number.
            if (imei == null) {
                imei = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
            }
        } else {
            assert tm != null;
            if (tm.getDeviceId() != null && !tm.getDeviceId().equals("000000000000000")) {
                imei = tm.getDeviceId();
            } else {
                imei = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
            }
        }

        return imei;
    }

0

কোটলিন সংস্করণ সন্ধানকারীদের জন্য, আপনি এই জাতীয় কিছু ব্যবহার করতে পারেন;

private fun telephonyService() {
    val telephonyManager = getSystemService(TELEPHONY_SERVICE) as TelephonyManager
    val imei = if (android.os.Build.VERSION.SDK_INT >= 26) {
        Timber.i("Phone >= 26 IMEI")
        telephonyManager.imei
    } else {
        Timber.i("Phone IMEI < 26")
        telephonyManager.deviceId
    }

    Timber.i("Phone IMEI $imei")
}

দ্রষ্টব্য: আপনাকে অবশ্যই জড়িয়ে রাখতে হবে telephonyService() উপরে পরীক্ষা চেকসেলফারমেশন বা আপনি যে কোনও পদ্ধতি ব্যবহার করেন তা ব্যবহারের অনুমতি চেক দিয়ে আবৃত করতে হবে।

ম্যানিফেস্ট ফাইলটিতেও এই অনুমতিটি যুক্ত করুন;

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

0

নীচে কোড ব্যবহার করুন:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        String[] permissions = {Manifest.permission.READ_PHONE_STATE};
        if (ActivityCompat.checkSelfPermission(this,
                Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(permissions, READ_PHONE_STATE);
        }
    } else {
        try {
            TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
                return;
            }
            String imei = telephonyManager.getDeviceId();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

এবং নিম্নলিখিত কোডটিতে রিকোয়েস্টপেরিশনসাল্ট পদ্ধতিতে কল করুন:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode) {
        case READ_PHONE_STATE:
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED)
                try {
                    TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
                    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
                        return;
                    }
                    String imei = telephonyManager.getDeviceId();

                } catch (Exception e) {
                    e.printStackTrace();
                }
    }
}

আপনার অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএলে নিম্নলিখিত অনুমতি যুক্ত করুন:

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

0

অ্যান্ড্রয়েড 10 এর জন্য নিম্নলিখিত কোডগুলি আমার পক্ষে কাজ করছে।

val uid: String = Settings.Secure.getString(ctx.applicationContext.contentResolver, Settings.Secure.ANDROID_ID)
if (ContextCompat.checkSelfPermission(ctx, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
            imei = when {
                Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q -> {
                    uid
                }
                Build.VERSION.SDK_INT >= Build.VERSION_CODES.O -> {
                    telephonyManager.imei
                }
                else -> {
                    telephonyManager.deviceId
                }
            }
        }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.