手机号

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zsp_android_com/article/details/85263066

权限

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

获取

package util;

import android.Manifest;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.telephony.TelephonyManager;

import value.Magic;

/**
 * Created on 2018/12/26.
 *
 * @author 郑少鹏
 * @desc TelephonyUtils
 */
public class TelephonyUtils {
    /**
     * 手机号
     *
     * @param context 上下文
     * @return 手机号
     */
    @SuppressLint("HardwareIds")
    public static String phoneNumber(Context context) {
        String phoneNumber = null;
        TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
            // TODO: Consider calling
            //    ActivityCompat#requestPermissions
            // here to request the missing permissions, and then overriding
            //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
            //                                          int[] grantResults)
            // to handle the case where the user grants the permission. See the documentation
            // for ActivityCompat#requestPermissions for more details.
            if (telephonyManager != null) {
                phoneNumber = telephonyManager.getLine1Number();
            }
        }
        if (phoneNumber != null) {
            if (phoneNumber.length() >= Magic.INT_FOURTEEN) {
                return phoneNumber.substring(3, 14);
            } else {
                return phoneNumber;
            }
        } else {
            return "";
        }
    }
}

不足

移动运营商没写手机号数据到SIM卡致并非所有手机号都可获(仅部分)。SIM卡唯一编号(供网络与设备识别)即IMSI号,手机信号也可通该号(并非手机号)于网络传输。SIM卡丢后补卡不换号,而是手机号对应IMSI号于移动运营商中被改成新SIM卡IMSI号。

解决

给10001发短信(发501查询套餐情况即可),10001反馈中含手机号。发短信后监听获此短信后分解字符串即获手机号。

注意

部分SIM卡获手机号码不带+86(或如国外手机号)。

猜你喜欢

转载自blog.csdn.net/zsp_android_com/article/details/85263066