Lập trình lấy số điện thoại của điện thoại Android


443

Làm cách nào để lập trình số điện thoại của thiết bị đang chạy ứng dụng Android của tôi?


điều này là không thể, trừ khi bạn tự nhập nó. Số điện thoại không được biết bởi điện thoại di động hoặc SIM, chỉ bằng mạng ....
tomsoft

3
@tomsoft Hãy nghĩ về điều đó ... Làm thế nào để các ứng dụng như Facebook tự động xác minh số điện thoại của bạn ..?
Eddie Hart

1
@tomsoft Không, hầu hết thời gian nó thậm chí không hỏi số điện thoại của bạn, hoặc nếu có thì hộp được điền sẵn.
Eddie Hart

1
@tomsoft Vâng, tôi đã đăng ký Facebook vào một ngày khác và nó không hỏi số của tôi khi nó nhắn tin cho tôi một mã. Thử nó. ;)
Eddie Hart

1
@EddieHart Làm điều đó cũng được, và tôi đã được hỏi số điện thoại của tôi. Vì vậy, điều này xác nhận rằng nói chung, điều này không thể truy cập và một số nhà khai thác có thể thêm thông tin này khi thiết lập nhưng đây không phải là một tính năng tiêu chuẩn của GMS
tomsoft

Câu trả lời:


484

Mã số:

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

Giấy phép cần thiết:

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

Hãy cẩn thận:

Theo các bình luận được đánh giá cao, có một vài lưu ý cần chú ý. Điều này có thể trả lại nullhoặc ""thậm chí "???????", và nó có thể trả về một số điện thoại cũ không còn hiệu lực. Nếu bạn muốn một cái gì đó nhận dạng duy nhất thiết bị, bạn nên sử dụng getDeviceId()thay thế.


150
Thật ra, không quá hoàn hảo. Lần trước tôi đã thử phương pháp này, nó đã báo cáo số điện thoại mà điện thoại của tôi ban đầu có, trước khi số điện thoại di động cũ của tôi được chuyển sang nó. Có lẽ nó vẫn còn, vì ứng dụng Cài đặt vẫn hiển thị số không còn tồn tại đó. Ngoài ra, có những báo cáo rằng một số SIM khiến phương thức này quay trở lại null. Điều đó đang được nói, tôi không biết một câu trả lời tốt hơn.
CommonsWare

4
Đánh dấu là đúng. Nếu ý định sử dụng thứ gì đó nhận dạng duy nhất điện thoại tôi sẽ sử dụng getDeviceId () sẽ trả lại IMEA cho GSM.
Alex Volovoy

15
(Tôi nghĩ bạn có nghĩa là IMEI ...?)
ChaimKut

23
Chà, tôi đã thử nghiệm nó trên Nexus One với HĐH Android 2.2 và nó trả về null
Omar Rehman

43
Các nhà phát triển có thể nghĩ rằng đó là câu trả lời hoàn hảo bằng cách xem xét số phiếu. Một lưu ý nên được thêm vào để cảnh báo nhà phát triển rằng phương pháp này sẽ không cung cấp số điện thoại luôn.
Habeeb Perwad

151

Không có giải pháp đảm bảo cho vấn đề này vì số điện thoại không được lưu trữ trên tất cả các thẻ SIM hoặc được phát từ mạng đến điện thoại. Điều này đặc biệt đúng ở một số quốc gia yêu cầu xác minh địa chỉ thực, với việc gán số chỉ xảy ra sau đó. Việc gán số điện thoại xảy ra trên mạng - và có thể thay đổi mà không cần thay đổi thẻ SIM hoặc thiết bị (ví dụ: đây là cách hỗ trợ chuyển cổng).

Tôi biết đó là nỗi đau, nhưng rất có thể giải pháp tốt nhất chỉ là yêu cầu người dùng nhập số điện thoại của họ một lần và lưu trữ nó.


18
Để xác minh số đã lấy, bạn có thể gửi sms (chứa mã) đến số đó và kiểm soát phản hồi bằng cách đưa người nghe vào "android.provider.Telephony.SMS_RECEIVED". bằng cách đó bạn có thể chắc chắn rằng con số đó là chính xác và đang hoạt động
Hossein Shahdoost

1
Giải pháp sáng tạo, nhưng bạn có thể muốn cho người dùng biết rằng bạn đang làm điều đó chỉ trong trường hợp họ bị tính phí cho việc đó.
Norman H

3
bất kỳ nhà cung cấp mà chi phí cho việc nhận tin nhắn văn bản đơn giản ?!
ThiefMaster

9
Phải, chắc chắn rồi. Trước khi tôi thêm tin nhắn vào kế hoạch của mình, tôi đã bị tính phí 0,30 đô la cho mỗi tin nhắn văn bản nhận được. Rogers ở Canada.
John Kroetch

44

Cập nhật: Câu trả lời này không còn nữa vì Whatsapp đã ngừng tiết lộ số điện thoại dưới dạng tên tài khoản, vui lòng bỏ qua câu trả lời này.

Thực sự có một giải pháp thay thế mà bạn có thể muốn xem xét, nếu bạn không thể có được nó thông qua dịch vụ điện thoại.

Kể từ hôm nay, bạn có thể dựa vào một ứng dụng lớn khác Whatsapp, sử dụng AccountManager. Hàng triệu thiết bị đã cài đặt ứng dụng này và nếu bạn không thể nhận được số điện thoại qua TelephonyManager, bạn có thể cung cấp cho ứng dụng này một shot.

Quyền:

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

Mã số:

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);
}

Kiểm tra actypetài khoản WhatsApp

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

Tất nhiên bạn có thể không nhận được nó nếu người dùng không cài đặt WhatsApp, nhưng dù sao cũng đáng để thử. Và hãy nhớ bạn nên luôn luôn yêu cầu người dùng xác nhận.


1
Tôi chỉ thấy điều này ngày hôm nay khi tôi đang loay hoay với các tài khoản. Thật tệ khi con số bị phơi bày như thế. Tất nhiên, bạn cần có quyền GET_ACCOUNTS và tại thời điểm đó, người dùng có thể không quan tâm ứng dụng có quyền gì.
jargetz

9
Giải pháp này đã hết hạn, Whatsapp không lưu số điện thoại trên tên acount nữa, bạn có biết whatsapp lưu số điện thoại sau khi cập nhật mới không?
Cohelad 17/03/2016

@Cohelad cảm ơn vì đã cập nhật cho tôi, tôi sẽ kiểm tra sau và gạch bỏ câu trả lời này sau khi xác nhận, trong khi đó tôi không biết họ lưu số ở đâu
Chor Wai Chun

3
Nhưng Viber TIẾP TỤC số lượng! com.viber.voip.account
xnagyg

32

Như đã đăng trong câu trả lời trước đó của tôi

Sử dụng mã dưới đây:

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

Trong AndroidManifest.xml, cung cấp quyền sau:

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

Nhưng hãy nhớ rằng, mã này không phải lúc nào cũng hoạt động, vì số điện thoại di động phụ thuộc vào Thẻ SIM và nhà điều hành mạng / Nhà cung cấp điện thoại di động.

Ngoài ra, hãy thử kiểm tra trong Điện thoại -> Cài đặt -> Giới thiệu -> Nhận dạng điện thoại , Nếu bạn có thể xem Số ở đó, xác suất nhận được số điện thoại từ mã trên cao hơn. Nếu bạn không thể xem số điện thoại trong cài đặt, thì bạn sẽ không thể nhận được thông qua mã này!

Giải pháp đề xuất:

  1. Lấy số điện thoại của người dùng làm đầu vào thủ công từ người dùng.
  2. Gửi mã đến số điện thoại di động của người dùng qua SMS.
  3. Yêu cầu người dùng nhập mã để xác nhận số điện thoại.
  4. Lưu số trong chia sẻ.

Thực hiện 4 bước trên như một hoạt động một lần trong lần khởi chạy đầu tiên của ứng dụng. Sau này, bất cứ khi nào cần số điện thoại, hãy sử dụng giá trị có sẵn trong tùy chọn chia sẻ.


Câu trả lời này bao gồm tất cả các yếu tố, nó phải là câu được chấp nhận =)
Slava Fomin II

Làm thế nào tôi có thể nhận được cả hai số điện thoại di động nếu có sẵn hai sim trên điện thoại. với mã trên. Đối với sim đơn, nó hoạt động tốt
Amrit Chakradhari

26

Vì vậy, đó là cách bạn yêu cầu số điện thoại thông qua API Dịch vụ Play mà không có sự cho phép và hack. Nguồnví dụ đầy đủ .

Trong bản build.gradle của bạn (phiên bản 10.2.x trở lên bắt buộc):

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

Trong hoạt động của bạn (mã được đơn giản hóa):

@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;
    }
}

Điều này sẽ tạo ra một hộp thoại như thế này:

nhập mô tả hình ảnh ở đây


2
Gợi ý yêu cầu hiển thị số điện thoại từ tài khoản email được kết nối với điện thoại, nó sẽ hiển thị thả xuống ngay cả khi không có sim trong thiết bị.
Ari

Làm thế nào để hộp thoại hiển thị nhiều số trong khi chỉ có một SIM? Đối với tôi, nó hiển thị 5 số. : / :)
cgr

Làm thế nào chúng ta có thể chọn số điện thoại đầu tiên tự động trong 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;
}

Mã được lấy từ http://www.androidsnippets.com/get-my-phone-number


@JaredBurrows vì "s.sub chuỗi (2)".
Cookie Monster

1
nó không làm việc cho tôi Tôi nhận được giá trị NULL (thẻ SIM mặt trời mọc, Thụy Sĩ)
bản chất điện tử

liên kết của bạn bị hỏng.
Ümañg ßürmån

11

Có một api Android mới cho phép người dùng chọn số điện thoại của họ mà không cần sự cho phép. Hãy xem tại: 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);
} 

Điều này đòi hỏi Firebase
Vlad

@Vlad Không, không. Điều này chỉ yêu cầu Dịch vụ Google Play đi kèm với hầu hết các thiết bị. Trích dẫn từ blogpost: 'Trước khi bạn bắt đầu, bạn cần xây dựng và kiểm tra đây là thiết bị có số điện thoại có thể nhận SMS và chạy các dịch vụ Google Play 10.2.x trở lên.'
Wirling

9

Chỉ muốn thêm một chút ở đây để giải thích ở trên trong các câu trả lời ở trên. Mà sẽ tiết kiệm thời gian cho người khác là tốt.

Trong trường hợp của tôi, phương thức này không trả về bất kỳ số điện thoại di động nào, một chuỗi trống đã được trả về. Đó là do trường hợp tôi đã chuyển số của mình trên sim mới. Vì vậy, nếu tôi đi vào Cài đặt> Giới thiệu về Điện thoại> Trạng thái> Số điện thoại của tôi, nó sẽ hiển thị cho tôi "Không xác định".


Của tôi cũng vậy, tình trạng này là gì? Chuyển vùng? Hoặc có thể thẻ simcard không có số được lưu trong đó.
Alexandre Marcondes

8

Đôi khi, bên dưới mã trả về nullhoặc chuỗi trống.

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

Với sự cho phép dưới đây

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

Có một cách khác bạn sẽ có thể nhận được số điện thoại của mình, tôi đã không kiểm tra điều này trên nhiều thiết bị nhưng mã trên không hoạt động mọi lúc.

Hãy thử mã dưới đây:

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();
}

Bạn sẽ cần thêm hai quyền này.

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

Hy vọng điều này sẽ giúp, Cảm ơn!


Tôi có thể hỏi: trong đoạn mã thứ hai là số ô không?
iOSAndroidWindowsMobileAppsDev

1
Giá trị của String s1sẽ là số điện thoại.
activesince93

Mã này không làm việc cho tôi. (Đoạn mã cuối cùng của bạn). Trả về chuỗi rỗng.
Kristy Welsh

Hãy giải thích câu trả lời của bạn. Số được lưu ở đâu và làm thế nào để chứa số này? Phụ thuộc vào cái gì?
not2qubit

3
@ not2qubit Tôi nghĩ rằng nó đang truy cập vào liên hệ tự trong ứng dụng Danh bạ
Samplination

4

Đây là một câu trả lời đơn giản hơn:

public String getMyPhoneNumber()
{
    return ((TelephonyManager) getSystemService(TELEPHONY_SERVICE))
            .getLine1Number();
}

3

Trước hết, việc người dùng nhận được số điện thoại di động là trái với chính sách Đạo đức, trước đó có thể nhưng hiện tại theo nghiên cứu của tôi, không có giải pháp vững chắc nào cho việc này, bằng cách sử dụng một số mã, có thể nhận được số điện thoại di động nhưng không có gì đảm bảo nó sẽ hoạt động Chỉ trong một vài thiết bị. Sau nhiều nghiên cứu tôi chỉ tìm thấy ba giải pháp nhưng chúng không hoạt động trong tất cả các thiết bị.

Có những lý do sau đây tại sao chúng ta không nhận được.

1.Android thiết bị và Thẻ Sim mới không lưu số điện thoại di động nếu số điện thoại di động không có sẵn trong thiết bị và trong sim thì làm sao có thể lấy số, nếu bất kỳ thẻ sim cũ nào có số di động thì sử dụng trình quản lý Telephony, chúng tôi có thể lấy số khác khôn ngoan nó sẽ trả lại

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

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

Lưu ý: - Tôi đã thử nghiệm giải pháp này trong các thiết bị sau Moto x, Samsung Tab 4, Samsung S4, Nexus 5 và Redmi 2 nhưng nó không hoạt động mỗi khi nó trả về chuỗi trống nên kết luận là vô dụng

  1. Phương pháp này chỉ hoạt động trong Redmi 2 Prime, nhưng đối với điều này cần thêm quyền đọc liên hệ trong tệp kê khai.

Lưu ý: - Đây cũng không phải là giải pháp được bảo đảm và hiệu quả, tôi đã thử nghiệm giải pháp này trên nhiều thiết bị nhưng nó chỉ hoạt động trong Redmi 2 Prime là thiết bị hai sim, nó cho tôi hai số di động đầu tiên là đúng nhưng số thứ hai thì không thuộc về sim thứ hai của tôi, nó thuộc về một số thẻ sim cũ mà tôi không sử dụng.

 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. Trong nghiên cứu của tôi, tôi đã tìm thấy trước đó có thể lấy số điện thoại bằng tài khoản WhatsApp nhưng giờ đây phiên bản Whatsapp mới không lưu trữ số di động của người dùng.

Kết luận : - Android không có bất kỳ giải pháp bảo đảm nào để có được số điện thoại di động của người dùng theo chương trình.

Gợi ý : - 1. Nếu bạn muốn xác minh số điện thoại di động của người dùng thì hãy yêu cầu người dùng cung cấp số điện thoại của mình, sử dụng otp bạn có thể xác minh số đó.

  1. Nếu bạn muốn xác định thiết bị của người dùng, vì điều này bạn có thể dễ dàng nhận được số IMEI của thiết bị.

2

TelephonyManagerkhông phải là giải pháp phù hợp, vì trong một số trường hợp, số này không được lưu trong SIM. Tôi khuyên bạn nên sử dụng tùy chọn chia sẻ để lưu số điện thoại của người dùng lần đầu tiên mở ứng dụng và số này sẽ được sử dụng bất cứ khi nào bạn cần.


1
Nhưng phương pháp này dễ bị lỗi. Người dùng có thể nhập sai số.
Zohra Khan

3
vâng, vì mục đích này, tôi đã sử dụng một tin nhắn văn bản, Khi người dùng nhập một số, do đó, từ SmsManager, chính thông báo ứng dụng và thông qua đó, chúng tôi có thể sử dụng smsReciever để lấy số gốc
Naveed Ahmad

1
Tôi có thêm một câu hỏi nữa .. với phương pháp này sẽ có một khoản phí SMS do người dùng đưa ra (Nếu đó không phải là số điện thoại miễn phí) .. Có phương pháp nào khác mà tôi có thể nhận được điện thoại mà không có người dùng không?
Zohra Khan

Có tất nhiên sẽ có một số khoản phí trên SMS đó nếu số đó không phải là số miễn phí.
Naveed Ahmad

Không, tôi nghĩ rằng không có phương pháp nào như vậy nếu không có TelephonyManager cho đến bây giờ. và tôi chỉ ra vấn đề của Điện thoại quản lý trong câu trả lời của tôi.
Naveed Ahmad

2

Đây là sự kết hợp của các giải pháp tôi đã tìm thấy (dự án mẫu ở đây , nếu bạn cũng muốn kiểm tra tự động điền):

rõ ràng

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

xây dựng. nâng cấp

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

ChínhActivity.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 ""
        }
    }
}

Xin vui lòng xem các ý kiến ​​về câu trả lời này stackoverflow.com/a/48210130/5457916 , trước khi thực hiện phương pháp này
humble_wolf

Liên kết bạn cung cấp chỉ là một phần của những gì tôi đã làm ở đây. Ở đây lần đầu tiên tôi đã cố gắng tự động điền nó. Và có dự phòng cho điều này.
nhà phát triển Android

Tôi biết thưa ông, câu trả lời của bạn rất hay và không sai theo bất kỳ nghĩa nào, tôi chỉ muốn người đọc nhận thức được các điều kiện đi kèm theo cách này, ví dụ như điều này có thể đưa ra con số liên quan đến tài khoản google của bạn, v.v.
humble_wolf

Tôi vẫn thích những gì tôi đã viết. Xin lỗi
nhà phát triển Android

1

Một chút đóng góp. Trong trường hợp của tôi, mã đã đưa ra một ngoại lệ lỗi. Tôi cần đặt một chú thích rằng mã sẽ được chạy và khắc phục vấn đề đó. Ở đây tôi để mã này.

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

0

Mặc dù có thể có nhiều tài khoản thư thoại, nhưng khi gọi từ số của chính bạn, nhà mạng sẽ chuyển bạn đến hộp thư thoại. Vì vậy, TelephonyManager.getVoiceMailNumber()hoặc TelephonyManager.getCompleteVoiceMailNumber(), tùy thuộc vào hương vị bạn cần.

Hi vọng điêu nay co ich.


5
không có chức năng "getCompleteVoiceMailNumber", cộng với getVoiceMailNumber () trả về một số khác với số thực của điện thoại.
nhà phát triển Android

Đây là một mẹo chỉ hoạt động với một vài Nhà khai thác di động trên thế giới. Nhưng về mặt kỹ thuật có thể là cách giải quyết.
Technik

0

Thêm phụ thuộc này: implementation 'com.google.android.gms:play-services-auth:18.0.0'

Để lấy danh sách số điện thoại, hãy sử dụng:

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
)

Sau khi nhấn vào hộp thoại dịch vụ chơi:

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)
        }
    }
}

-6

Trong khi làm việc trên một ứng dụng bảo mật cần lấy số điện thoại của ai đó, bao giờ điện thoại của tôi có thể vào tay họ, tôi phải làm điều này; 1. nhận Boot đã hoàn thành và sau đó thử nhận Line1_Number từ telonyManager để trả về kết quả chuỗi. 2. so sánh kết quả Chuỗi với số điện thoại của riêng tôi và nếu chúng không khớp hoặc chuỗi trả về null thì 3. bí mật gửi SMS chứa kết quả chuỗi cộng với một dấu hiệu đặc biệt đến số văn phòng của tôi. 4. nếu gửi tin nhắn thất bại, hãy bắt đầu một dịch vụ và tiếp tục thử sau mỗi giờ cho đến khi tin nhắn SMS đang chờ xử lý trở lại thành công. Với các bước này, tôi có thể nhận được số người sử dụng điện thoại bị mất của mình. nó không quan trọng nếu người đó bị buộc tội.


Tại sao downvote?
humble_wolf
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.