Bagaimana cara mendapatkan IMEI / ESN perangkat secara terprogram di android?
343
Untuk mengidentifikasi setiap perangkat secara unik, saya ingin menggunakan IMEI (atau nomor ESN untuk perangkat CDMA). Bagaimana cara mengakses ini secara terprogram?
Karena itu, berhati-hatilah dalam melakukan ini. Pengguna tidak hanya akan bertanya-tanya mengapa aplikasi Anda mengakses tumpukan telepon mereka, mungkin akan sulit untuk memigrasikan data jika pengguna mendapatkan perangkat baru.
Pembaruan: Seperti disebutkan dalam komentar di bawah, ini bukan cara aman untuk mengotentikasi pengguna, dan meningkatkan masalah privasi. Tidak disarankan. Sebagai gantinya, lihat API Login Google+ jika Anda ingin menerapkan sistem login tanpa gesekan.
The API Backup Android juga tersedia jika Anda hanya ingin cara ringan untuk bertahan bundel string ketika pengguna me-reset telepon mereka (atau membeli perangkat baru).
Apa yang akan menjadi solusi yang lebih baik yang memungkinkan mereka untuk memigrasikan data di masa depan? Alamat email Google? Jika demikian, bagaimana saya bisa mengeluarkannya dari sistem?
Tom
3
Cara paling andal untuk melakukan ini adalah meminta mereka membuat akun saat pertama kali meluncurkan aplikasi Anda. Ada beberapa cara untuk mendapatkan alamat email pengguna (lihat dokumen di AccountManager), tetapi memverifikasi bahwa pengguna jahat tidak memalsukan informasi ini memerlukan sedikit pengetahuan tentang cara kerja API Data Google - lebih dari yang bisa saya taruh di ini kotak komentar kecil. ;)
Trevor Johns
1
Sebenarnya, dalam hal ini, Anda tidak memiliki jaminan bahwa pengguna juga tidak memalsukan IMEI / MEID mereka. Jika keamanan menjadi masalah, Anda benar-benar perlu menggunakan nama pengguna / kata sandi, atau metode getAuthToken () di AccountManager (dan sekali lagi, Anda harus memverifikasi token ini dengan server yang awalnya mengeluarkannya).
Trevor Johns
2
Adi: Kode untuk mendapatkan ID perangkat? Tidak ada yang lebih dari satu metode + izin yang saya sebutkan di atas. Yang mengatakan, Anda harus melihat ke dalam API Login Google+, itulah pendekatan yang disarankan untuk mengotentikasi pengguna hari ini: developer.android.com/google/play-services/auth.html
Trevor Johns
2
Apakah ini menjalankan Android 6? Dan apakah Anda menargetkan SDK 23? Maka Anda perlu meminta READ_PHONE_STATE saat runtime sebelum menanyakan IMEI
Flo We
284
Selain jawaban Trevor Johns, Anda dapat menggunakan ini sebagai berikut:
Apakah ada cara untuk mendapatkan emulator untuk mengembalikan nomor IMEI?
MikeSchem
@MikeSchem, emulator tidak memiliki string IMEI yang berarti.
shizhen
Coba jangan gunakan: <menggunakan-izin android: name = "android.permission.READ_PHONE_STATE" /> izin ini sangat sensitif, Anda bisa mendapatkan App Rejected dari Google Play Team (aturan keamanan baru ditambahkan pada akhir tahun2018). Sebagai saran lebih baik gunakan ID Iklan.
Duna
@Taner Akankah itu berfungsi pada perangkat Dual sim? (Perlu mendapatkan IMEI Pertama saja)
Arnold Brown
Apakah ada masalah keamanan untuk menggunakan READ_PHONE_STATEizin?
viper
62
Saya menggunakan kode berikut untuk mendapatkan IMEI atau menggunakan Secure.ANDROID_ID sebagai alternatif, ketika perangkat tidak memiliki kemampuan telepon:
/**
* Returns the unique identifier for the device
*
* @return unique identifier for the device
*/publicString 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;}
Hai Pinhassi, Apakah Anda memiliki kasus ketika ID perangkat yang dikembalikan oleh manajer telepon nol atau kosong, tetapi nilainya dibaca dari Secure.ANDROID_ID tidak kosong? Terima kasih
Budda
4
Sejauh yang saya ingat itu untuk tablet tanpa kartu SIM (tapi saya tidak yakin 100%).
Asaf Pinhassi
Secure.ANDROID_ID berubah jika Perangkat diformat atau rom disetel ulang oleh pabrik
shridutt kothari
Nexus7 (1stGen) saya kembali nulluntuk perangkat teleponId ... Adakah yang tahu cara mendapatkan IMEI dari tablet?
Sakiboy
38
Atau Anda dapat menggunakan pengaturan ANDROID_ID dari Android.Provider.Settings.System (seperti dijelaskan di sini strazerre.com ).
Ini memiliki keuntungan karena tidak memerlukan izin khusus tetapi dapat berubah jika aplikasi lain memiliki akses tulis dan mengubahnya (yang tampaknya tidak biasa tetapi bukan tidak mungkin).
Hanya untuk referensi di sini adalah kode dari blog:
Catatan implementasi : jika ID sangat penting untuk arsitektur sistem Anda perlu menyadari bahwa dalam praktiknya beberapa ponsel & tablet Android sangat rendah telah ditemukan menggunakan kembali ANDROID_ID yang sama (9774d56d682e549c adalah nilai yang muncul di log kami)
Konstanta ini sudah usang. Anda malah perlu menggunakan android.provider.Settings.Secure.ANDROID_ID;
mcorley
@mcorley ketika saya menggunakan android.provider.Settings.Secure.ANDROID_ID untuk tablet nexus 7 dan nexus 4 mengembalikan nilai yang sama 'android_id'
vuhung3990
3
@meowmeo melakukan hal yang sama untuk saya, sampai saya menggunakan kode yang sekarang menjadi bagian dari jawaban (ish). String androidID = android.provider.Settings.System.getString(this.getContentResolver(), Secure.ANDROID_ID);
Matthias
Tapi bukankah ini akan disetel ulang ke ANDROID_ID baru setelah reset pabrik? Bagaimana jika saya membutuhkan ANDROID_ID persisten yang dapat selamat dari reset.
ini adalah kode aktual yang saya temukan untuk mendapatkan IMEI
Anand Savjani
2
Sayangnya, dengan Marshmallow maju Anda sekarang harus meminta izin ini saat runtime. Izin ini tidak ideal, karena mengganggu pengalaman pengguna, dan dapat membuat beberapa pengguna curiga.
IgorGanapolsky
Coba jangan gunakan: <menggunakan-izin android: name = "android.permission.READ_PHONE_STATE" /> izin ini sangat sensitif, Anda bisa mendapatkan App Rejected dari Google Play Team (aturan keamanan baru ditambahkan pada akhir 2018). Sebagai saran, lebih baik gunakan ID Periklanan sebagai gantinya IMEI
Duna
apa solusi untuk android 10?
Amin Pinjari
23
untuk mendapatkan IMEI (pengidentifikasi peralatan seluler internasional)
Menampilkan alternatif device_unique_id sangat membantu
JoeGalind
20
Untuk Android 6.0+ permainan telah berubah jadi saya sarankan Anda menggunakan ini;
Cara terbaik untuk pergi adalah selama runtime kalau tidak Anda mendapatkan kesalahan izin.
/**
* A loading screen after AppIntroActivity.
*/publicclassLoadingActivityextendsBaseActivity{privatestaticfinalint MY_PERMISSIONS_REQUEST_READ_PHONE_STATE =0;privateTextView loading_tv2;@Overrideprotectedvoid 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.
*/publicvoid 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.
*/privatevoid 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.newAlertDialog.Builder(LoadingActivity.this).setTitle("Permission Request").setMessage(getString(R.string.permission_read_phone_state_rationale)).setCancelable(false).setPositiveButton(android.R.string.yes,newDialogInterface.OnClickListener(){publicvoid onClick(DialogInterface dialog,int which){//re-requestActivityCompat.requestPermissions(LoadingActivity.this,newString[]{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,newString[]{Manifest.permission.READ_PHONE_STATE},
MY_PERMISSIONS_REQUEST_READ_PHONE_STATE);}}/**
* Callback received when a permissions request has been completed.
*/@Overridepublicvoid onRequestPermissionsResult(int requestCode,@NonNullString[] permissions,@NonNullint[] 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 grantedif(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));}}}privatevoid alertAlert(String msg){newAlertDialog.Builder(LoadingActivity.this).setTitle("Permission Request").setMessage(msg).setCancelable(false).setPositiveButton(android.R.string.yes,newDialogInterface.OnClickListener(){publicvoid onClick(DialogInterface dialog,int which){// do somthing here}}).setIcon(R.drawable.onlinlinew_warning_sign).show();}publicvoid doPermissionGrantedStuffs(){//Have an object of TelephonyManagerTelephonyManager tm =(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);//Get IMEI Number of Phone //////////////// for this example i only need the IMEIStringIMEINumber=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);}}
Untuk Android Versi 6 Dan Di Atas, Alamat MAC WLAN telah ditinggalkan, ikuti jawaban Trevor Johns
Memperbarui:
Untuk Identifikasi unik perangkat, Anda dapat Menggunakan Secure.ANDROID_ID .
Jawaban lama:
Kerugian menggunakan IMEI sebagai Device ID Unik:
IMEI tergantung pada slot Simcard perangkat, sehingga IMEI tidak mungkin untuk perangkat yang tidak menggunakan Simcard. Dalam perangkat dual sim, kami mendapatkan 2 IMEI berbeda untuk perangkat yang sama karena memiliki 2 slot untuk kartu sim.
Anda dapat menggunakan string Alamat MAC WLAN (Tidak Disarankan Untuk Marshmallow dan Marshmallow + karena Alamat MAC WLAN sudah tidak digunakan lagi di Marshmallow. Jadi Anda akan mendapatkan nilai palsu)
Kita bisa mendapatkan ID Unik untuk ponsel android menggunakan alamat MAC WLAN juga. Alamat MAC unik untuk semua perangkat dan berfungsi untuk semua jenis perangkat.
Keuntungan menggunakan alamat MAC WLAN sebagai Device ID:
Ini adalah pengidentifikasi unik untuk semua jenis perangkat (ponsel pintar dan tablet).
Tetap unik jika aplikasi diinstal ulang
Kerugian menggunakan alamat MAC WLAN sebagai Device ID:
Berikan Anda Nilai Besar dari Marshmallow dan di atasnya.
Jika perangkat tidak memiliki perangkat wifi, maka Anda mendapatkan alamat MAC nol, tetapi secara umum terlihat bahwa sebagian besar perangkat Android memiliki perangkat wifi dan hampir tidak ada perangkat di pasar tanpa perangkat wifi.
"IMEI tergantung pada Simcard" ... Ini salah. Anda tampaknya membingungkan IMEI dengan nomor IMSI
Merlevede
2
Identitas Peralatan Mobile Station Internasional atau IMEI adalah nomor yang mengidentifikasi ponsel yang berjalan pada jaringan GSM. Saya secara pribadi telah mencobanya dan itu memberi saya nol secara terprogram jika tidak ada operator nirkabel di Telepon GSM. smartmobilephonesolutions.com/content/…
Jamil
3
Anda benar, saya tidak membaca dengan cermat. IMEI dikaitkan dengan transceiver kartu SIM, bukan ke kartu SIM. Salahku!
Merlevede
2
Alamat MAC WLAN telah ditinggalkan pada Marshmallow maju. Jadi, Anda akan mendapatkan nilai palsu!
IgorGanapolsky
1
android 6 jangan mengembalikan Alamat MAC WIFI yang benar dengan kode Anda. Perhatikan itu.
zszen
15
Seperti dalam API 26 getDeviceId()disusutkan sehingga Anda dapat menggunakan kode berikut untuk memenuhi API 26 dan versi sebelumnya
Jangan lupa untuk menambahkan permintaan izin untuk READ_PHONE_STATEmenggunakan kode di atas.
PEMBARUAN: Dari Android 10, ini dibatasi untuk aplikasi pengguna untuk mendapatkan pengidentifikasi perangkat keras yang tidak dapat direset seperti IMEI.
Sayangnya Amin di Android 10 karena alasan keamanan sekarang dibatasi untuk aplikasi pihak ketiga untuk mendapatkan pengidentifikasi Perangkat Keras seperti IMEI untuk info lebih lanjut tentang perubahan privasi di Android 10 kunjungi developer.android.com/about/versions/10/privacy
Muhammad Hamza Shahid
Bekerja di Android Oreo.
Satish Shetty
10
Metode getDeviceId () dari TelephonyManager mengembalikan ID perangkat unik, misalnya, IMEI untuk GSM dan MEID atau ESN untuk telepon CDMA. Kembalikan nol jika ID perangkat tidak tersedia.
Kode Java
package com.AndroidTelephonyManager;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.telephony.TelephonyManager;import android.widget.TextView;publicclassAndroidTelephonyManagerextendsActivity{/** Called when the activity is first created. */@Overridepublicvoid onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);
setContentView(R.layout.main);TextView textDeviceID =(TextView)findViewById(R.id.deviceid);//retrieve a reference to an instance of TelephonyManagerTelephonyManager 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){caseTelephonyManager.PHONE_TYPE_NONE:return"NONE: "+ id;caseTelephonyManager.PHONE_TYPE_GSM:return"GSM: IMEI="+ id;caseTelephonyManager.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;}}}
Contoh, IMEI untuk GSM dan MEID atau ESN untuk telepon CDMA .
/**
* Gets the device unique id called IMEI. Sometimes, this returns 00000000000000000 for the
* rooted devices.
**/publicstaticString getDeviceImei(Context ctx){TelephonyManager telephonyManager =(TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE);return telephonyManager.getDeviceId();}
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();}
Kode Kotlin untuk mendapatkan DeviceId (IMEI) dengan izin penanganan & pemeriksaan komparatif untuk semua versi android:
val telephonyManager = getSystemService(Context.TELEPHONY_SERVICE)asTelephonyManagerif(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 versionselse telephonyManager.deviceId
imei?.let{Log.i("Log","DeviceId=$it")}}else{// Permission is not granted}
Untuk mendapatkan IMEI (pengenal peralatan seluler internasional) dan jika itu di atas API level 26 maka kami mendapatkan telephonyManager.getImei()sebagai null sehingga untuk itu, kami menggunakan ANDROID_ID sebagai Pengidentifikasi Unik.
publicstaticString getIMEINumber(@NonNullfinalContext context)throwsSecurityException,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;}
Bagi mereka yang mencari versi Kotlin, Anda dapat menggunakan sesuatu seperti ini;
private fun telephonyService(){
val telephonyManager = getSystemService(TELEPHONY_SERVICE)asTelephonyManager
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")}
CATATAN: Anda harus membungkus di telephonyService()atas dengan pemeriksaan izin menggunakan checkSelfPermission atau metode apa pun yang Anda gunakan.
Jawaban:
Anda ingin menelepon
android.telephony.TelephonyManager.getDeviceId()
.Ini akan mengembalikan string apa pun yang secara unik mengidentifikasi perangkat (IMEI pada GSM, MEID untuk CDMA).
Anda memerlukan izin berikut di
AndroidManifest.xml
:<uses-permission android:name="android.permission.READ_PHONE_STATE" />
untuk melakukan ini.
Karena itu, berhati-hatilah dalam melakukan ini. Pengguna tidak hanya akan bertanya-tanya mengapa aplikasi Anda mengakses tumpukan telepon mereka, mungkin akan sulit untuk memigrasikan data jika pengguna mendapatkan perangkat baru.
Pembaruan: Seperti disebutkan dalam komentar di bawah, ini bukan cara aman untuk mengotentikasi pengguna, dan meningkatkan masalah privasi. Tidak disarankan. Sebagai gantinya, lihat API Login Google+ jika Anda ingin menerapkan sistem login tanpa gesekan.
The API Backup Android juga tersedia jika Anda hanya ingin cara ringan untuk bertahan bundel string ketika pengguna me-reset telepon mereka (atau membeli perangkat baru).
sumber
Selain jawaban Trevor Johns, Anda dapat menggunakan ini sebagai berikut:
Dan Anda harus menambahkan izin berikut ke file Manifest.xml Anda:
Dalam emulator, Anda mungkin akan mendapatkan nilai "00000 ...". getDeviceId () mengembalikan NULL jika ID perangkat tidak tersedia.
sumber
READ_PHONE_STATE
izin?Saya menggunakan kode berikut untuk mendapatkan IMEI atau menggunakan Secure.ANDROID_ID sebagai alternatif, ketika perangkat tidak memiliki kemampuan telepon:
sumber
null
untuk perangkat teleponId ... Adakah yang tahu cara mendapatkan IMEI dari tablet?Atau Anda dapat menggunakan pengaturan ANDROID_ID dari Android.Provider.Settings.System (seperti dijelaskan di sini strazerre.com ).
Ini memiliki keuntungan karena tidak memerlukan izin khusus tetapi dapat berubah jika aplikasi lain memiliki akses tulis dan mengubahnya (yang tampaknya tidak biasa tetapi bukan tidak mungkin).
Hanya untuk referensi di sini adalah kode dari blog:
Catatan implementasi : jika ID sangat penting untuk arsitektur sistem Anda perlu menyadari bahwa dalam praktiknya beberapa ponsel & tablet Android sangat rendah telah ditemukan menggunakan kembali ANDROID_ID yang sama (9774d56d682e549c adalah nilai yang muncul di log kami)
sumber
String androidID = android.provider.Settings.System.getString(this.getContentResolver(), Secure.ANDROID_ID);
Dari: http://mytechead.wordpress.com/2011/08/28/how-to-get-imei-number-of-android-device/ :
Kode berikut membantu dalam mendapatkan nomor IMEI perangkat android:
Izin yang diperlukan dalam Android Manifest:
CATATAN: Dalam hal tablet atau perangkat yang tidak dapat bertindak sebagai IMEI Ponsel akan menjadi nol.
sumber
untuk mendapatkan IMEI (pengidentifikasi peralatan seluler internasional)
untuk mendapatkan id unik perangkat
sumber
Untuk Android 6.0+ permainan telah berubah jadi saya sarankan Anda menggunakan ini;
Cara terbaik untuk pergi adalah selama runtime kalau tidak Anda mendapatkan kesalahan izin.
Semoga ini bisa membantu Anda atau seseorang.
sumber
Pembaruan Baru:
Untuk Android Versi 6 Dan Di Atas, Alamat MAC WLAN telah ditinggalkan, ikuti jawaban Trevor Johns
Memperbarui:
Untuk Identifikasi unik perangkat, Anda dapat Menggunakan Secure.ANDROID_ID .
Jawaban lama:
Kerugian menggunakan IMEI sebagai Device ID Unik:
Anda dapat menggunakan string Alamat MAC WLAN (Tidak Disarankan Untuk Marshmallow dan Marshmallow + karena Alamat MAC WLAN sudah tidak digunakan lagi di Marshmallow. Jadi Anda akan mendapatkan nilai palsu)
Kita bisa mendapatkan ID Unik untuk ponsel android menggunakan alamat MAC WLAN juga. Alamat MAC unik untuk semua perangkat dan berfungsi untuk semua jenis perangkat.
Keuntungan menggunakan alamat MAC WLAN sebagai Device ID:
Ini adalah pengidentifikasi unik untuk semua jenis perangkat (ponsel pintar dan tablet).
Tetap unik jika aplikasi diinstal ulang
Kerugian menggunakan alamat MAC WLAN sebagai Device ID:
Berikan Anda Nilai Besar dari Marshmallow dan di atasnya.
Jika perangkat tidak memiliki perangkat wifi, maka Anda mendapatkan alamat MAC nol, tetapi secara umum terlihat bahwa sebagian besar perangkat Android memiliki perangkat wifi dan hampir tidak ada perangkat di pasar tanpa perangkat wifi.
SUMBER: technetexperts.com
sumber
Seperti dalam API 26
getDeviceId()
disusutkan sehingga Anda dapat menggunakan kode berikut untuk memenuhi API 26 dan versi sebelumnyaJangan lupa untuk menambahkan permintaan izin untuk
READ_PHONE_STATE
menggunakan kode di atas.PEMBARUAN: Dari Android 10, ini dibatasi untuk aplikasi pengguna untuk mendapatkan pengidentifikasi perangkat keras yang tidak dapat direset seperti IMEI.
sumber
Metode getDeviceId () dari TelephonyManager mengembalikan ID perangkat unik, misalnya, IMEI untuk GSM dan MEID atau ESN untuk telepon CDMA. Kembalikan nol jika ID perangkat tidak tersedia.
Kode Java
XML
Diperlukan Izin READ_PHONE_STATE dalam file manifes.
sumber
Anda dapat menggunakan fungsi TELEPHONY_SERVICE TelephonyManager ini untuk mendapatkan ID perangkat yang unik , Membutuhkan Izin: READ_PHONE_STATE
Contoh, IMEI untuk GSM dan MEID atau ESN untuk telepon CDMA .
Kembalikan nol jika ID perangkat tidak tersedia .
sumber
Metode
getDeviceId()
ini sudah usang. Ada metode baru untuk inigetImei(int)
Periksa di sini
sumber
Coba ini (selalu perlu IMEI dulu)
sumber
Gunakan kode di bawah ini memberi Anda nomor IMEI:
sumber
untuk API Level 11 atau lebih tinggi:
sumber
Kode Kotlin untuk mendapatkan DeviceId (IMEI) dengan izin penanganan & pemeriksaan komparatif untuk semua versi android:
Tambahkan juga izin ini ke AndroidManifest.xml:
sumber
Anda memerlukan izin berikut di AndroidManifest.xml Anda:
Untuk mendapatkan IMEI (pengenal peralatan seluler internasional) dan jika itu di atas API level 26 maka kami mendapatkan
telephonyManager.getImei()
sebagai null sehingga untuk itu, kami menggunakan ANDROID_ID sebagai Pengidentifikasi Unik.sumber
Bagi mereka yang mencari versi Kotlin, Anda dapat menggunakan sesuatu seperti ini;
CATATAN: Anda harus membungkus di
telephonyService()
atas dengan pemeriksaan izin menggunakan checkSelfPermission atau metode apa pun yang Anda gunakan.Juga tambahkan izin ini dalam file manifes;
sumber
gunakan kode di bawah ini:
Dan panggil metodeRequestPermissionsResult kode berikut:
Tambahkan izin berikut di AndroidManifest.xml Anda:
sumber
Untuk Android 10 Kode berikut berfungsi untuk saya.
sumber