Secara terprogram memperoleh nomor telepon dari ponsel Android

443

Bagaimana saya bisa mendapatkan nomor telepon perangkat yang menjalankan aplikasi Android saya secara terprogram?

jkap
sumber
ini tidak mungkin, kecuali jika Anda memasukkannya sendiri. Nomor telepon tidak diketahui oleh ponsel atau SIM, hanya oleh jaringan ....
tomsoft
3
@tomsoft Pikirkan tentang itu ... Bagaimana aplikasi seperti Facebook secara otomatis memverifikasi nomor telepon Anda ..?
Eddie Hart
1
@tomsoft Tidak, sebagian besar waktu bahkan tidak menanyakan nomor telepon Anda, atau jika ya maka kotaknya sudah diisi sebelumnya.
Eddie Hart
1
@tomsoft Ya, saya mendaftar ke Facebook beberapa hari yang lalu, dan tidak menanyakan nomor saya ketika mengirimi saya kode. Cobalah. ;)
Eddie Hart
1
@ EddieHart Lakukan juga, dan saya sudah ditanyai nomor telepon saya. Jadi ini mengkonfirmasi bahwa secara umum, ini tidak dapat diakses dan beberapa operator mungkin menambahkan info ini pada pengaturan tetapi ini bukan fitur standar GMS
tomsoft

Jawaban:

484

Kode:

TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
String mPhoneNumber = tMgr.getLine1Number();

Izin yang Dibutuhkan:

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

Peringatan:

Menurut komentar yang sangat terangkat, ada beberapa peringatan yang harus diperhatikan. Ini dapat mengembalikan nullatau ""bahkan "???????", dan dapat mengembalikan nomor telepon basi yang tidak lagi berlaku. Jika Anda menginginkan sesuatu yang secara unik mengidentifikasi perangkat, Anda harus menggunakannya getDeviceId().

Alex Volovoy
sumber
150
Sebenarnya tidak begitu sempurna. Terakhir kali saya mencoba metode ini, ia melaporkan nomor telepon yang awalnya dimiliki ponsel saya, sebelum nomor ponsel lama saya dipindahkan ke sana. Mungkin masih, karena aplikasi Pengaturan masih menunjukkan nomor yang mati itu. Juga, ada laporan bahwa beberapa SIM menyebabkan metode ini kembali null. Meski begitu, saya tidak mengetahui jawaban yang lebih baik.
CommonsWare
4
Mark benar. Jika niat untuk menggunakan sesuatu yang secara unik mengidentifikasi ponsel saya akan menggunakan getDeviceId () yang akan mengembalikan IMEA untuk GSM.
Alex Volovoy
15
(Saya pikir maksud Anda IMEI ...?)
ChaimKut
23
Yah, saya mengujinya pada Nexus One dengan Android OS 2.2 dan mengembalikan nol
Omar Rehman
43
Pengembang mungkin berpikir itu adalah jawaban sempurna dengan mempertimbangkan penghitungan suara. Catatan harus ditambahkan untuk memperingatkan pengembang bahwa metode ini tidak akan selalu memberikan nomor telepon.
Habeeb Perwad
151

Tidak ada solusi yang dijamin untuk masalah ini karena nomor telepon tidak secara fisik disimpan di semua kartu SIM, atau disiarkan dari jaringan ke telepon. Ini terutama benar di beberapa negara yang memerlukan verifikasi alamat fisik, dengan penugasan nomor hanya terjadi sesudahnya. Penetapan nomor telepon terjadi di jaringan - dan dapat diubah tanpa mengubah kartu SIM atau perangkat (mis. Ini adalah cara porting didukung).

Saya tahu ini menyakitkan, tetapi kemungkinan besar solusi terbaik adalah meminta pengguna untuk memasukkan nomor teleponnya satu kali dan menyimpannya.

Johan
sumber
18
Untuk memverifikasi nomor yang diambil, Anda dapat mengirim sms (berisi kode) ke nomor tersebut dan mengontrol respons dengan meletakkan pendengar di "android.provider.Telephony.SMS_RECEIVED". dengan begitu Anda dapat memastikan bahwa nomornya benar dan berfungsi
Hossein Shahdoost
1
Solusi kreatif, tetapi Anda mungkin ingin memberi tahu pengguna bahwa Anda melakukannya untuk berjaga-jaga seandainya mereka dikenakan biaya untuk itu.
Norman H
3
Apakah ada setiap operator yang biaya untuk menerima pesan teks sederhana ?!
ThiefMaster
9
Ya, tentu saja. Sebelum saya menambahkan SMS ke paket saya, saya ditagih $ 0,30 per pesan teks yang diterima. Rogers di Kanada.
John Kroetch
44

Pembaruan: Jawaban ini tidak lagi tersedia karena Whatsapp telah berhenti mengekspos nomor telepon sebagai nama akun, silakan abaikan jawaban ini.

Sebenarnya ada solusi alternatif yang mungkin ingin Anda pertimbangkan, jika Anda tidak bisa mendapatkannya melalui layanan telepon.

Mulai hari ini, Anda dapat mengandalkan aplikasi besar Whatsapp lainnya, menggunakan AccountManager. Jutaan perangkat memasang aplikasi ini dan jika Anda tidak dapat memperoleh nomor teleponnyaTelephonyManager , Anda dapat mencobanya.

Izin:

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

Kode:

AccountManager am = AccountManager.get(this);
Account[] accounts = am.getAccounts();

for (Account ac : accounts) {
    String acname = ac.name;
    String actype = ac.type;
    // Take your time to look at all available accounts
    System.out.println("Accounts : " + acname + ", " + actype);
}

Periksa actypeakun WhatsApp

if(actype.equals("com.whatsapp")){
    String phoneNumber = ac.name;
}

Tentu saja Anda mungkin tidak mendapatkannya jika pengguna tidak menginstal WhatsApp, tetapi patut untuk dicoba. Dan ingat Anda harus selalu meminta konfirmasi kepada pengguna.

Chor Wai Chun
sumber
1
Saya baru melihat ini hari ini ketika saya sedang bermain-main dengan akun. Sangat buruk bahwa nomornya terbuka seperti itu. Tentu saja, Anda memerlukan izin GET_ACCOUNTS dan pada saat itu pengguna mungkin tidak peduli izin apa yang dimiliki aplikasi.
jargetz
9
Solusi ini kedaluwarsa, Whatsapp tidak menyimpan nomor telepon pada nama akun lagi, apakah Anda tahu di mana whatsapp menyimpan nomor telepon setelah pembaruan baru?
Cohelad
@Cohelad terima kasih telah memperbarui saya, saya akan memeriksanya nanti dan mencoret jawaban ini setelah konfirmasi, sementara itu saya tidak tahu di mana mereka menyimpan nomor tersebut
Chor Wai Chun
3
Tapi Viber TAMPILKAN nomornya! com.viber.voip.account
xnagyg
32

Seperti yang diposting di blog saya jawaban sebelumnya

Gunakan kode di bawah ini:

TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
String mPhoneNumber = tMgr.getLine1Number();

Di AndroidManifest.xml, berikan izin berikut:

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

Tapi ingat, kode ini tidak selalu berfungsi, karena nomor Ponsel tergantung pada Kartu SIM dan operator Jaringan / operator ponsel.

Juga, coba periksa di Telepon -> Pengaturan -> Tentang -> Identitas Telepon , Jika Anda dapat melihat Nomor di sana, kemungkinan mendapatkan nomor telepon dari kode di atas lebih tinggi. Jika Anda tidak dapat melihat nomor telepon di pengaturan, maka Anda tidak akan bisa mendapatkan kode ini!

Solusi yang disarankan:

  1. Dapatkan nomor telepon pengguna sebagai input manual dari pengguna.
  2. Kirim kode ke nomor ponsel pengguna melalui SMS.
  3. Minta pengguna untuk memasukkan kode untuk mengonfirmasi nomor telepon.
  4. Simpan nomor dalam preferensi bersama.

Lakukan 4 langkah di atas sebagai aktivitas satu kali selama peluncuran pertama aplikasi. Kemudian, kapan pun nomor telepon diperlukan, gunakan nilai yang tersedia dalam preferensi bersama.

Nishanthi Grashia
sumber
Jawaban ini mencakup semua faktor, harus yang diterima =)
Slava Fomin II
Bagaimana saya bisa mendapatkan kedua nomor ponsel jika ada dual sim yang tersedia di ponsel. dengan kode di atas. Untuk sim tunggal berfungsi dengan baik
Amrit Chakradhari
26

Jadi begitulah cara Anda meminta nomor telepon melalui Play Services API tanpa izin dan peretasan. Sumber dan Contoh lengkap .

Di build.gradle Anda (versi 10.2.x dan lebih tinggi diperlukan):

compile "com.google.android.gms:play-services-auth:$gms_version"

Dalam aktivitas Anda (kode disederhanakan):

@Override
protected void onCreate(Bundle savedInstanceState) {
    // ...
    googleApiClient = new GoogleApiClient.Builder(this)
            .addApi(Auth.CREDENTIALS_API)
            .build();
    requestPhoneNumber(result -> {
        phoneET.setText(result);
    });
}

public void requestPhoneNumber(SimpleCallback<String> callback) {
    phoneNumberCallback = callback;
    HintRequest hintRequest = new HintRequest.Builder()
            .setPhoneNumberIdentifierSupported(true)
            .build();

    PendingIntent intent = Auth.CredentialsApi.getHintPickerIntent(googleApiClient, hintRequest);
    try {
        startIntentSenderForResult(intent.getIntentSender(), PHONE_NUMBER_RC, null, 0, 0, 0);
    } catch (IntentSender.SendIntentException e) {
        Logs.e(TAG, "Could not start hint picker Intent", e);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == PHONE_NUMBER_RC) {
        if (resultCode == RESULT_OK) {
            Credential cred = data.getParcelableExtra(Credential.EXTRA_KEY);
            if (phoneNumberCallback != null){
                phoneNumberCallback.onSuccess(cred.getId());
            }
        }
        phoneNumberCallback = null;
    }
}

Ini akan menghasilkan dialog seperti ini:

masukkan deskripsi gambar di sini

Dmide
sumber
2
Permintaan Petunjuk menunjukkan nomor telepon dari akun email yang terhubung dengan telepon, itu akan menampilkan drop-down bahkan jika tidak ada sim di perangkat.
Ari
bagaimana cara dialog menampilkan banyak angka sementara hanya ada satu SIM? Bagi saya, ini menunjukkan 5 angka. : / :)
cgr
bagaimana kita dapat memilih nomor telepon pertama secara otomatis di android?
Noorul
13
private String getMyPhoneNumber(){
    TelephonyManager mTelephonyMgr;
    mTelephonyMgr = (TelephonyManager)
        getSystemService(Context.TELEPHONY_SERVICE); 
    return mTelephonyMgr.getLine1Number();
}

private String getMy10DigitPhoneNumber(){
    String s = getMyPhoneNumber();
    return s != null && s.length() > 2 ? s.substring(2) : null;
}

Kode diambil dari http://www.androidsnippets.com/get-my-phone-number

Emil Hajric
sumber
@JaredBurrows karena "s.substring (2)".
Cookie Monster
1
itu tidak bekerja untuk saya. Saya mendapatkan nilai NULL (kartu SIM matahari terbit, Swiss)
e-nature
tautan Anda rusak.
Ümañg ßürmån
11

Ada api Android baru yang memungkinkan pengguna untuk memilih nomor telepon mereka tanpa perlu izin. Lihatlah: https://android-developers.googleblog.com/2017/10/effective-phone-number-verification.html

// Construct a request for phone numbers and show the picker
private void requestHint() {
    HintRequest hintRequest = new HintRequest.Builder()
       .setPhoneNumberIdentifierSupported(true)
       .build();

    PendingIntent intent = Auth.CredentialsApi.getHintPickerIntent(
        apiClient, hintRequest);
    startIntentSenderForResult(intent.getIntentSender(),
        RESOLVE_HINT, null, 0, 0, 0);
} 
Wirling
sumber
Ini membutuhkan Firebase
Vlad
@ Vlad Tidak, tidak. Ini hanya memerlukan Layanan Google Play yang datang dengan sebagian besar perangkat. Kutipan dari blogpost: 'Sebelum Anda mulai, Anda harus membuat dan menguji ini adalah perangkat dengan nomor telepon yang dapat menerima SMS dan menjalankan layanan Google Play 10.2.x dan lebih tinggi.'
Wirling
9

Hanya ingin menambahkan sedikit di sini untuk penjelasan di atas dalam jawaban di atas. Yang akan menghemat waktu untuk orang lain juga.

Dalam kasus saya, metode ini tidak mengembalikan nomor ponsel apa pun, string kosong dikembalikan. Itu karena kasus saya telah porting nomor saya di sim baru. Jadi jika saya masuk ke Pengaturan> Tentang Telepon> Status> Nomor Telepon Saya ini menunjukkan kepada saya "Tidak Diketahui".

user_CC
sumber
Milik saya juga, apa kondisi ini? Jelajah? Atau mungkin simcard tidak memiliki nomor yang tersimpan di dalamnya.
Alexandre Marcondes
8

Terkadang, kode di bawah ini mengembalikan nullatau string kosong.

TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
String mPhoneNumber = tMgr.getLine1Number();

Dengan izin di bawah ini

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

Ada cara lain Anda akan bisa mendapatkan nomor telepon Anda, saya belum menguji ini pada beberapa perangkat tetapi kode di atas tidak berfungsi setiap saat.

Coba kode di bawah ini:

String main_data[] = {"data1", "is_primary", "data3", "data2", "data1", "is_primary", "photo_uri", "mimetype"};
Object object = getContentResolver().query(Uri.withAppendedPath(android.provider.ContactsContract.Profile.CONTENT_URI, "data"),
        main_data, "mimetype=?",
        new String[]{"vnd.android.cursor.item/phone_v2"},
        "is_primary DESC");
if (object != null) {
    do {
        if (!((Cursor) (object)).moveToNext())
            break;
        // This is the phoneNumber
        String s1 = ((Cursor) (object)).getString(4);
    } while (true);
    ((Cursor) (object)).close();
}

Anda perlu menambahkan dua izin ini.

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

Semoga ini bisa membantu, Terima kasih!

activesince93
sumber
Bisakah saya bertanya: di cuplikan kedua yang merupakan nomor sel?
iOSAndroidWindowsMobileAppsDev
1
Nilai String s1akan menjadi nomor telepon.
activesince93
Kode ini tidak berfungsi untuk saya. (Cuplikan kode terakhir Anda). Mengembalikan string kosong.
Kristy Welsh
Tolong jelaskan jawaban Anda. Di mana nomor disimpan dan bagaimana ini mengandung nomor? Bergantung pada apa?
not2qubit
3
@ not2qubit Saya pikir ini sedang mengakses kontak mandiri di aplikasi Kontak
Samplasion
4

Ini adalah jawaban yang lebih sederhana:

public String getMyPhoneNumber()
{
    return ((TelephonyManager) getSystemService(TELEPHONY_SERVICE))
            .getLine1Number();
}
EP Lewis
sumber
3

Pertama-tama mendapatkan nomor ponsel pengguna adalah bertentangan dengan kebijakan Etis, sebelumnya itu mungkin tetapi sekarang sesuai penelitian saya tidak ada solusi yang solid untuk ini, Dengan menggunakan beberapa kode dimungkinkan untuk mendapatkan nomor ponsel tetapi tidak ada jaminan mungkin itu akan berfungsi hanya di beberapa perangkat. Setelah banyak penelitian saya menemukan hanya tiga solusi tetapi mereka tidak berfungsi di semua perangkat.

Ada alasan berikut mengapa kita tidak mendapatkannya.

1. Perangkat Android dan Kartu SIM baru tidak menyimpan nomor ponsel jika nomor ponsel tidak tersedia di perangkat dan dalam SIM lalu bagaimana mungkin untuk mendapatkan nomor, jika ada kartu SIM lama yang memiliki nomor ponsel maka menggunakan Telephony manager kita bisa mendapatkan nomor lainnya bijaksana itu akan mengembalikan "null" atau "" atau "??????"

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

 TelephonyManager tel= (TelephonyManager)this.getSystemService(Context.
            TELEPHONY_SERVICE);
    String PhoneNumber =  tel.getLine1Number();

Catatan: - Saya telah menguji solusi ini di perangkat berikut Moto x, Samsung Tab 4, Samsung S4, Nexus 5 dan Redmi 2 prime tetapi tidak berfungsi setiap kali mengembalikan string kosong sehingga kesimpulannya tidak ada gunanya

  1. Metode ini hanya berfungsi di Redmi 2 prime, tetapi untuk ini perlu menambahkan izin kontak baca dalam manifes.

Catatan: - Ini juga bukan solusi yang dijamin dan efisien, saya telah menguji solusi ini di banyak perangkat tetapi hanya bekerja di Redmi 2 prime yang merupakan perangkat dual sim. Ini memberi saya dua nomor ponsel yang pertama sudah benar, tetapi yang kedua tidak milik sim kedua saya itu milik beberapa kartu sim lama saya yang tidak saya gunakan.

 String main_data[] = {"data1", "is_primary", "data3", "data2", "data1",
            "is_primary", "photo_uri", "mimetype"};
    Object object = getContentResolver().
            query(Uri.withAppendedPath(android.provider.ContactsContract.Profile.CONTENT_URI, "data"),
            main_data, "mimetype=?",
            new String[]{"vnd.android.cursor.item/phone_v2"},
            "is_primary DESC");
    String s1="";
    if (object != null) {
        do {
            if (!((Cursor) (object)).moveToNext())
                break;
            // This is the phoneNumber
             s1 =s1+"---"+ ((Cursor) (object)).getString(4);
        } while (true);
        ((Cursor) (object)).close();
    }
  1. Dalam penelitian saya, saya telah menemukan sebelumnya mungkin untuk mendapatkan nomor ponsel menggunakan akun WhatsApp tetapi sekarang versi Whatsapp baru tidak menyimpan nomor ponsel pengguna.

Kesimpulan : - Android tidak memiliki solusi yang dijamin untuk mendapatkan nomor ponsel pengguna secara terprogram.

Saran : - 1. Jika Anda ingin memverifikasi nomor ponsel pengguna kemudian meminta kepada pengguna untuk memberikan nomornya, menggunakan otp Anda dapat memverifikasi itu.

  1. Jika Anda ingin mengidentifikasi perangkat pengguna, untuk ini Anda dapat dengan mudah mendapatkan nomor IMEI perangkat.
ramkrishna kushwaha
sumber
2

TelephonyManagerbukan solusi yang tepat, karena dalam beberapa kasus angkanya tidak disimpan di SIM. Saya sarankan Anda menggunakan preferensi bersama untuk menyimpan nomor telepon pengguna untuk pertama kalinya aplikasi dibuka dan nomor itu akan digunakan kapan pun Anda butuhkan.

Naveed Ahmad
sumber
1
Tetapi metode ini rawan kesalahan. Pengguna dapat memasukkan nomor yang salah.
Zohra Khan
3
ya jadi untuk tujuan ini saya menggunakan Pesan teks, Ketika Pengguna memasukkan nomor, jadi dari SmsManager pesan aplikasi itu sendiri, dan melalui ini kita dapat menggunakan smsReciever untuk Mendapatkan nomor aslinya
Naveed Ahmad
1
Saya punya satu pertanyaan lagi .. dengan metode ini akan ada biaya SMS yang diberikan oleh pengguna (Jika bukan nomor bebas pulsa) .. Apakah ada metode lain yang bisa saya dapatkan no telepon dari pengguna?
Zohra Khan
Ya tentu saja akan ada biaya pada SMS itu jika nomor tersebut bukan nomor bebas pulsa.
Naveed Ahmad
Tidak, saya pikir tidak ada metode seperti itu tanpa TelephonyManager sampai sekarang. dan saya menunjukkan masalah PhoneManager dalam jawaban saya.
Naveed Ahmad
2

Berikut adalah kombinasi dari solusi yang saya temukan (contoh proyek di sini , jika Anda ingin juga memeriksa isi-otomatis):

nyata

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

build.gradle

    implementation "com.google.android.gms:play-services-auth:17.0.0"

MainActivity.kt

class MainActivity : AppCompatActivity() {
    private lateinit var googleApiClient: GoogleApiClient

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        tryGetCurrentUserPhoneNumber(this)
        googleApiClient = GoogleApiClient.Builder(this).addApi(Auth.CREDENTIALS_API).build()
        if (phoneNumber.isEmpty()) {
            val hintRequest = HintRequest.Builder().setPhoneNumberIdentifierSupported(true).build()
            val intent = Auth.CredentialsApi.getHintPickerIntent(googleApiClient, hintRequest)
            try {
                startIntentSenderForResult(intent.intentSender, REQUEST_PHONE_NUMBER, null, 0, 0, 0);
            } catch (e: IntentSender.SendIntentException) {
                Toast.makeText(this, "failed to show phone picker", Toast.LENGTH_SHORT).show()
            }
        } else
            onGotPhoneNumberToSendTo()

    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == REQUEST_PHONE_NUMBER) {
            if (resultCode == Activity.RESULT_OK) {
                val cred: Credential? = data?.getParcelableExtra(Credential.EXTRA_KEY)
                phoneNumber = cred?.id ?: ""
                if (phoneNumber.isEmpty())
                    Toast.makeText(this, "failed to get phone number", Toast.LENGTH_SHORT).show()
                else
                    onGotPhoneNumberToSendTo()
            }
        }
    }

    private fun onGotPhoneNumberToSendTo() {
        Toast.makeText(this, "got number:$phoneNumber", Toast.LENGTH_SHORT).show()
    }


    companion object {
        private const val REQUEST_PHONE_NUMBER = 1
        private var phoneNumber = ""

        @SuppressLint("MissingPermission", "HardwareIds")
        private fun tryGetCurrentUserPhoneNumber(context: Context): String {
            if (phoneNumber.isNotEmpty())
                return phoneNumber
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                val subscriptionManager = context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE) as SubscriptionManager
                try {
                    subscriptionManager.activeSubscriptionInfoList?.forEach {
                        val number: String? = it.number
                        if (!number.isNullOrBlank()) {
                            phoneNumber = number
                            return number
                        }
                    }
                } catch (ignored: Exception) {
                }
            }
            try {
                val telephonyManager = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
                val number = telephonyManager.line1Number ?: ""
                if (!number.isBlank()) {
                    phoneNumber = number
                    return number
                }
            } catch (e: Exception) {
            }
            return ""
        }
    }
}
pengembang android
sumber
silakan lihat komentar pada jawaban ini stackoverflow.com/a/48210130/5457916 , sebelum menerapkan metode ini
humble_wolf
Tautan yang Anda berikan hanya sebagian dari apa yang saya lakukan di sini. Di sini saya pertama kali mencoba untuk mengisinya sendiri secara otomatis. Dan mundur untuk ini.
pengembang android
Saya tahu Pak, jawaban Anda bagus dan tidak salah dalam arti apa pun, saya hanya ingin pembaca mengetahui kondisi yang menyertai cara ini, mis. Ini dapat mengisi jumlah yang terkait dengan akun google Anda, dll, yang disebutkan dalam komentar di sana.
humble_wolf
Saya masih lebih suka apa yang saya tulis. Maaf
pengembang android
1

Sedikit kontribusi. Dalam kasus saya, kode meluncurkan pengecualian kesalahan. Saya perlu membuat anotasi agar kode dapat dijalankan dan memperbaiki masalah itu. Di sini saya membiarkan kode ini.

public static String getLineNumberPhone(Context scenario) {
    TelephonyManager tMgr = (TelephonyManager) scenario.getSystemService(Context.TELEPHONY_SERVICE);
    @SuppressLint("MissingPermission") String mPhoneNumber = tMgr.getLine1Number();
    return mPhoneNumber;
}
Ariel Alejandro Wagner
sumber
0

Meskipun dimungkinkan untuk memiliki beberapa akun voicemail, saat menelepon dari nomor Anda sendiri, operator mengarahkan Anda ke voicemail. Jadi, TelephonyManager.getVoiceMailNumber()atauTelephonyManager.getCompleteVoiceMailNumber() , tergantung pada rasa yang Anda butuhkan.

Semoga ini membantu.

Jim
sumber
5
tidak ada fungsi "getCompleteVoiceMailNumber", ditambah getVoiceMailNumber () mengembalikan nomor yang berbeda dari nomor telepon sebenarnya.
pengembang android
Ini adalah trik yang hanya berfungsi dengan beberapa Operator Seluler di dunia. Tetapi secara teknis bisa diselesaikan.
technik
0

Tambahkan ketergantungan ini: implementation 'com.google.android.gms:play-services-auth:18.0.0'

Untuk mengambil daftar nomor telepon, gunakan ini:

val hintRequest = HintRequest.Builder()
    .setPhoneNumberIdentifierSupported(true)
    .build()

val intent = Credentials.getClient(context).getHintPickerIntent(hintRequest)

startIntentSenderForResult(
    intent.intentSender,
    PHONE_NUMBER_FETCH_REQUEST_CODE,
    null,
    0,
    0,
    0,
    null
)

Setelah mengetuk dialog layanan putar:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent? { 
    super.onActivityResult(requestCode, resultCode, data)

    if (requestCode == PHONE_NUMBER_FETCH_REQUEST_CODE) {
        data?.getParcelableExtra<Credential>(Credential.EXTRA_KEY)?.id?.let { 
            useFetchedPhoneNumber(it)
        }
    }
}
Reyaz Ahmad
sumber
-6

ketika bekerja pada aplikasi keamanan yang diperlukan untuk mendapatkan nomor telepon siapa yang pernah ponsel saya dapat miliki, saya harus melakukan ini; 1. terima Boot selesai dan kemudian coba dapatkan Line1_Number dari telephonyManager yang mengembalikan hasil string. 2. membandingkan hasil String dengan nomor telepon saya sendiri dan jika mereka tidak cocok atau string mengembalikan nol maka, 3. diam-diam mengirim SMS yang berisi hasil string ditambah tanda khusus ke nomor kantor saya. 4. jika pengiriman pesan gagal, mulai layanan dan terus mencoba setelah setiap jam sampai niat tertunda SMS terkirim berhasil kembali. Dengan langkah ini saya bisa mendapatkan nomor orang yang menggunakan ponsel saya yang hilang. tidak masalah jika orang tersebut ditagih.

sinar
sumber
mengapa downvotes?
humble_wolf