手机号
权限
<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(或如国外手机号)。