前言:
各位同学大家好有段时间没有给大家更新博客 具体多久我不记得了 今天有朋友问我 获取手机好的问题 所以就自己搜集了下然后整理出来 希望能帮助到各位同学和同行 我们不废话正式开始。
效果图:
image.png
具体实现:
package com.example.myapplication;
import android.Manifest;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.pm.PackageManager;
import android.telephony.TelephonyManager;
import androidx.core.app.ActivityCompat;
/**
* Created by WangJinyong on 2018/3/31.
* 获取SIM卡信息和手机号码
*/
public class PhoneInfoUtils {
private static String TAG = "PhoneInfoUtils";
private TelephonyManager telephonyManager;
//移动运营商编号
private String NetworkOperator;
private Context context;
public PhoneInfoUtils(Context context) {
this.context = context;
telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
}
//获取sim卡iccid
public String getIccid() {
String iccid = "N/A";
iccid = telephonyManager.getSimSerialNumber();
return iccid;
}
//获取电话号码
@SuppressLint("MissingPermission")
public String getNativePhoneNumber(Context context) {
String nativePhoneNumber = "N/A";
nativePhoneNumber = telephonyManager.getLine1Number();
return nativePhoneNumber;
}
//获取手机服务商信息
public String getProvidersName() {
String providersName = "N/A";
NetworkOperator = telephonyManager.getNetworkOperator();
//IMSI号前面3位460是国家,紧接着后面2位00 02是中国移动,01是中国联通,03是中国电信。
// Flog.d(TAG,"NetworkOperator=" + NetworkOperator);
if (NetworkOperator.equals("46000") || NetworkOperator.equals("46002")) {
providersName = "中国移动";//中国移动
} else if (NetworkOperator.equals("46001")) {
providersName = "中国联通";//中国联通
} else if (NetworkOperator.equals("46003")) {
providersName = "中国电信";//中国电信
}
return providersName;
}
@SuppressLint("MissingPermission")
public String getPhoneInfo(Context context) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
StringBuffer sb = new StringBuffer();
sb.append("\nLine1Number = " + tm.getLine1Number());
sb.append("\nNetworkOperator = " + tm.getNetworkOperator());//移动运营商编号
sb.append("\nNetworkOperatorName = " + tm.getNetworkOperatorName());//移动运营商名称
sb.append("\nSimCountryIso = " + tm.getSimCountryIso());
sb.append("\nSimOperator = " + tm.getSimOperator());
sb.append("\nSimOperatorName = " + tm.getSimOperatorName());
return sb.toString();
}
}
具体调用
/**
* 请求运行时权限
*/
private void requestPermissionAndShotView() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int hasWritePermission = checkSelfPermission(Manifest.permission.READ_SMS);
List<String> permissions = new ArrayList<String>();
if (hasWritePermission != PackageManager.PERMISSION_GRANTED) {
permissions.add(Manifest.permission.READ_SMS);
} else {
phone=phoneInfoUtils.getNativePhoneNumber(context);
providersName=phoneInfoUtils.getProvidersName();
phoneInfo=phoneInfoUtils.getPhoneInfo(context);
}
if (!permissions.isEmpty()) {
ActivityCompat.requestPermissions((Activity) context, new String[] {Manifest.permission.READ_SMS},1);
}
}else {
phone=phoneInfoUtils.getNativePhoneNumber(context);
providersName=phoneInfoUtils.getProvidersName();
phoneInfo=phoneInfoUtils.getPhoneInfo(context);
}
phonenumber.setText(phone);
iccidtext.setText(iccid);
providersnametext.setText(providersName);
getphoneinfotext.setText(phoneInfo);
}
因为这些操作都是需要危险权限 所有需要动态获取
所有需要的权限清单文件配置
<!--adjust 要的权限-->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE"
tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE"
tools:ignore="ProtectedPermissions" />
完整mainactivity 代码
package com.example.myapplication;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.webkit.WebView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "-----MainActivity-----";
private WebView contentWebView = null;
private Context context=MainActivity.this;
private TextView phonenumber,iccidtext,providersnametext,getphoneinfotext;
private PhoneInfoUtils phoneInfoUtils;
private String phone ,iccid,providersName,phoneInfo;
@SuppressLint("MissingInflatedId")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
phoneInfoUtils=new PhoneInfoUtils(context);
phonenumber=findViewById(R.id.phonetext);
iccidtext=findViewById(R.id.iccidtext);
providersnametext=findViewById(R.id.providersnametext);
getphoneinfotext=findViewById(R.id.getphoneinfotext);
findViewById(R.id.getphone_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
requestPermissionAndShotView();
}
});
}
/**
* 请求运行时权限
*/
private void requestPermissionAndShotView() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int hasWritePermission = checkSelfPermission(Manifest.permission.READ_SMS);
List<String> permissions = new ArrayList<String>();
if (hasWritePermission != PackageManager.PERMISSION_GRANTED) {
permissions.add(Manifest.permission.READ_SMS);
} else {
phone=phoneInfoUtils.getNativePhoneNumber(context);
providersName=phoneInfoUtils.getProvidersName();
phoneInfo=phoneInfoUtils.getPhoneInfo(context);
}
if (!permissions.isEmpty()) {
ActivityCompat.requestPermissions((Activity) context, new String[] {Manifest.permission.READ_SMS},1);
}
}else {
phone=phoneInfoUtils.getNativePhoneNumber(context);
providersName=phoneInfoUtils.getProvidersName();
phoneInfo=phoneInfoUtils.getPhoneInfo(context);
}
phonenumber.setText(phone);
iccidtext.setText(iccid);
providersnametext.setText(providersName);
getphoneinfotext.setText(phoneInfo);
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG,"onResume");
}
@Override
public void onStop() {
super.onStop();
}
@Override
protected void onPause() {
super.onPause();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
最后总结:
我这边只是整理下前人的代码加上一些动态权限申请的 希望能帮助到大家学习和工作 获取手机号这个我们只能获取到主卡的要是双卡双待的手机只能获取到主卡的哈 希望大家注意哈 最后希望我都文章能帮助到各位网友的工作和学习 如果你觉得文章还不错麻烦给我三连 关注点赞和转发 谢谢