Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách lấy số điện thoại mặc định trên Android

Lấy số điện thoại (Phone Number) trong Android

Hướng dẫn lấy số điện thoại của thiết bị (MSISDN) qua TelephonyManager.getLine1Number(). Lưu ý: Giá trị này phụ thuộc vào nhà mạng và SIM, thường trả về null hoặc rỗng.

Bước 1: Tạo dự án mới

Android Studio → File → New Project.

Bước 2: Giao diện (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/text"
        android:textSize="30sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

Bước 3: Code logic (java/MainActivity.java)

package com.example.myapplication;

import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.telephony.TelephonyManager;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private static final int PERMISSION_REQUEST_CODE = 100;
    TextView textView;
    TelephonyManager telephonyManager;

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

        textView = findViewById(R.id.text);
        telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

        if (!hasPhonePermissions()) {
            requestPhonePermissions();
        } else {
            showPhoneNumber();
        }
    }

    private boolean hasPhonePermissions() {
        return ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED;
    }

    private void requestPhonePermissions() {
        ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.READ_PHONE_STATE},
                PERMISSION_REQUEST_CODE);
    }

    private void showPhoneNumber() {
        String phoneNumber = telephonyManager.getLine1Number();
        textView.setText("Số điện thoại: " + (phoneNumber != null ? phoneNumber : "Không xác định"));
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == PERMISSION_REQUEST_CODE) {
            if (hasPhonePermissions()) {
                showPhoneNumber();
            } else {
                textView.setText("Cần cấp quyền READ_PHONE_STATE");
            }
        }
    }
}

Bước 4: AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.example.myapplication">

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

    <application ...>
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

⚠️ Thực tế về getLine1Number()

  • Thường trả về null hoặc chuỗi rỗng.
  • Số điện thoại không được lưu trên SIM trong nhiều quốc gia (kể cả VN).
  • Nhà mạng không bắt buộc ghi MSISDN lên SIM.
  • Không tin cậy để xác thực người dùng.

Giải pháp thay thế

  1. OTP SMS: Gửi mã xác thực đến số user nhập.
  2. Google Sign-In / Firebase Auth: Lấy số điện thoại từ tài khoản Google.
  3. Hint Request (Play Services): PhoneNumberHintRequest gợi ý số SIM.

Chạy ứng dụng

Cấp quyền → TextView hiển thị số điện thoại (thường là "Không xác định").

Cách lấy số điện thoại mặc định trên Android