Java 如何在Android中获取simCard号码

Java 如何在Android中获取simCard号码,java,android,Java,Android,在我的应用程序中,我希望从sim卡中获取电话号码,并向用户显示。 我写了下面的代码,但在emulator中显示sim卡号,但一些设备(如Samsung)不显示任何sim卡号。 清单代码: <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 如何从android中的所有设备获取sim卡号?在AndroidManifest.xml中添加权限 <uses-permission android:n

在我的应用程序中,我希望从sim卡中获取电话号码,并向用户显示。
我写了下面的代码,但在emulator中显示sim卡号,但一些设备(如Samsung)不显示任何sim卡号。

清单代码:

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

如何从android中的所有设备获取sim卡号?

在AndroidManifest.xml中添加权限

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

然后使用这个代码

import android.Manifest;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.widget.Toast;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    String TAG = "PhoneActivityTAG";
    Activity activity = MainActivity.this;
    String wantPermission = Manifest.permission.READ_PHONE_STATE;
    private static final int PERMISSION_REQUEST_CODE = 1;
    ArrayList<String> _mst=new ArrayList<>();

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

        if (!checkPermission(wantPermission)) {
            requestPermission(wantPermission);
        } else {

            Log.d(TAG, "Phone number: " + getPhone());
         _mst = getPhone();

            for (String op: _mst) {
               Log.i("Device Information", String.valueOf(op));
            }
        }
    }

    @TargetApi(Build.VERSION_CODES.O)
    private ArrayList<String> getPhone() {
        TelephonyManager phoneMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        if (ActivityCompat.checkSelfPermission(activity, wantPermission) != PackageManager.PERMISSION_GRANTED) {
            return null;
        }
        ArrayList<String> _lst =new ArrayList<>();
        _lst.add(String.valueOf(phoneMgr.getCallState()));
        _lst.add("IMEI NUMBER :-"+phoneMgr.getImei());
        _lst.add("MOBILE NUMBER :-"+phoneMgr.getLine1Number());
        _lst.add("SERIAL NUMBER :-"+phoneMgr.getSimSerialNumber());
        _lst.add("SIM OPERATOR NAME :-"+phoneMgr.getSimOperatorName());
        _lst.add("MEI NUMBER :-"+phoneMgr.getMeid());
        _lst.add("SIM STATE :-"+String.valueOf(phoneMgr.getSimState()));
        _lst.add("COUNTRY ISO :-"+phoneMgr.getSimCountryIso());
        return _lst;
    }

    private void requestPermission(String permission){
        if (ActivityCompat.shouldShowRequestPermissionRationale(activity, permission)){
            Toast.makeText(activity, "Phone state permission allows us to get phone number. Please allow it for additional functionality.", Toast.LENGTH_LONG).show();
        }
        ActivityCompat.requestPermissions(activity, new String[]{permission},PERMISSION_REQUEST_CODE);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        switch (requestCode) {
            case PERMISSION_REQUEST_CODE:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    Log.d(TAG, "Phone number: " + getPhone());
                } else {
                    Toast.makeText(activity,"Permission Denied. We can't get phone number.", Toast.LENGTH_LONG).show();
                }
                break;
        }
    }

    private boolean checkPermission(String permission){
        if (Build.VERSION.SDK_INT >= 23) {
            int result = ContextCompat.checkSelfPermission(activity, permission);
            if (result == PackageManager.PERMISSION_GRANTED){
                return true;
            } else {
                return false;
            }
        } else {
            return true;
        }
    }
}
public class MainActivity extends AppCompatActivity {
    String TAG = "PhoneActivityTAG";
    @SuppressLint("NewApi")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
             List<SubscriptionInfo> _sb = SubscriptionManager.from(getApplicationContext()).getActiveSubscriptionInfoList();
            for (int i = 1; i < _sb.size(); i++) {
                SubscriptionInfo info = _sb.get(i);
                Log.d(TAG, "Mobile_number " + info.getNumber());

            }
        }
    }
}
导入android.Manifest;
导入android.annotation.TargetApi;
导入android.app.Activity;
导入android.content.Context;
导入android.content.pm.PackageManager;
导入android.os.Build;
导入android.os.Bundle;
导入android.support.v4.app.ActivityCompat;
导入android.support.v4.content.ContextCompat;
导入android.support.v7.app.AppActivity;
导入android.telephony.TelephonyManager;
导入android.util.Log;
导入android.widget.Toast;
导入java.util.ArrayList;
公共类MainActivity扩展了AppCompatActivity{
String TAG=“PhoneActivityTAG”;
Activity=MainActivity.this;
字符串wantPermission=Manifest.permission.READ\u PHONE\u STATE;
私有静态最终int权限\请求\代码=1;
ArrayList _mst=新的ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
如果(!checkPermission(wantPermission)){
请求许可(wantPermission);
}否则{
Log.d(标签,“电话号码:+getPhone());
_mst=getPhone();
用于(字符串操作:_mst){
Log.i(“设备信息”,String.valueOf(op));
}
}
}
@TargetApi(Build.VERSION\u code.O)
私有ArrayList getPhone(){
TelephonyManager phoneMgr=(TelephonyManager)getSystemService(Context.TELEPHONY_服务);
if(ActivityCompat.checkSelfPermission(activity,wantppermission)!=PackageManager.PERMISSION\u已授予){
返回null;
}
ArrayList _lst=新的ArrayList();
_lst.add(String.valueOf(phoneMgr.getCallState());
_lst.add(“IMEI编号:-”+phoneMgr.getImei());
_lst.add(“手机号码:-”+phoneMgr.getLine1Number());
_lst.add(“序列号:-”+phoneMgr.getSimSerialNumber());
_lst.add(“SIM运营商名称:-”+phoneMgr.getSimOperatorName());
_lst.add(“MEI号码:-”+phoneMgr.getMeid());
_lst.add(“SIM状态:-”+String.valueOf(phoneMgr.getSimState());
_添加(“国家ISO:-”+phoneMgr.getSimCountryIso());
返回时间;
}
私有void requestPermission(字符串权限){
if(ActivityCompat.shouldShowRequestPermissionRegulation(活动,权限)){
Toast.makeText(活动,“电话状态权限允许我们获取电话号码。请允许它提供其他功能。”,Toast.LENGTH_LONG).show();
}
ActivityCompat.requestPermissions(活动,新字符串[]{permission},权限\请求\代码);
}
@凌驾
public void onRequestPermissionsResult(int-requestCode,字符串权限[],int[]grantResults){
开关(请求代码){
案例权限\请求\代码:
if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION\u已授予){
Log.d(标签,“电话号码:+getPhone());
}否则{
Toast.makeText(活动,“权限被拒绝。我们无法获取电话号码。”,Toast.LENGTH_LONG.show();
}
打破
}
}
私有布尔检查权限(字符串权限){
如果(Build.VERSION.SDK_INT>=23){
int result=ContextCompat.checkSelfPermission(活动,权限);
如果(结果==已授予PackageManager.PERMISSION){
返回true;
}否则{
返回false;
}
}否则{
返回true;
}
}
}

onCreate
方法中

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    List<SubscriptionInfo> _sb = SubscriptionManager.from(getApplicationContext()).getActiveSubscriptionInfoList();
    for (int i = 1; i < _sb.size(); i++) {
        SubscriptionInfo info = _sb.get(i);
        Log.d(TAG, "Mobile_number " + info.getNumber());

    }
}
if(Build.VERSION.SDK\u INT>=Build.VERSION\u CODES.M){
List _sb=SubscriptionManager.from(getApplicationContext()).getActiveSubscriptionInfoList();
对于(int i=1;i<_sb.size();i++){
订阅信息=_sb.get(i);
Log.d(标记“Mobile_number”+info.getNumber());
}
}
使用此代码

import android.Manifest;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.widget.Toast;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    String TAG = "PhoneActivityTAG";
    Activity activity = MainActivity.this;
    String wantPermission = Manifest.permission.READ_PHONE_STATE;
    private static final int PERMISSION_REQUEST_CODE = 1;
    ArrayList<String> _mst=new ArrayList<>();

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

        if (!checkPermission(wantPermission)) {
            requestPermission(wantPermission);
        } else {

            Log.d(TAG, "Phone number: " + getPhone());
         _mst = getPhone();

            for (String op: _mst) {
               Log.i("Device Information", String.valueOf(op));
            }
        }
    }

    @TargetApi(Build.VERSION_CODES.O)
    private ArrayList<String> getPhone() {
        TelephonyManager phoneMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        if (ActivityCompat.checkSelfPermission(activity, wantPermission) != PackageManager.PERMISSION_GRANTED) {
            return null;
        }
        ArrayList<String> _lst =new ArrayList<>();
        _lst.add(String.valueOf(phoneMgr.getCallState()));
        _lst.add("IMEI NUMBER :-"+phoneMgr.getImei());
        _lst.add("MOBILE NUMBER :-"+phoneMgr.getLine1Number());
        _lst.add("SERIAL NUMBER :-"+phoneMgr.getSimSerialNumber());
        _lst.add("SIM OPERATOR NAME :-"+phoneMgr.getSimOperatorName());
        _lst.add("MEI NUMBER :-"+phoneMgr.getMeid());
        _lst.add("SIM STATE :-"+String.valueOf(phoneMgr.getSimState()));
        _lst.add("COUNTRY ISO :-"+phoneMgr.getSimCountryIso());
        return _lst;
    }

    private void requestPermission(String permission){
        if (ActivityCompat.shouldShowRequestPermissionRationale(activity, permission)){
            Toast.makeText(activity, "Phone state permission allows us to get phone number. Please allow it for additional functionality.", Toast.LENGTH_LONG).show();
        }
        ActivityCompat.requestPermissions(activity, new String[]{permission},PERMISSION_REQUEST_CODE);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        switch (requestCode) {
            case PERMISSION_REQUEST_CODE:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    Log.d(TAG, "Phone number: " + getPhone());
                } else {
                    Toast.makeText(activity,"Permission Denied. We can't get phone number.", Toast.LENGTH_LONG).show();
                }
                break;
        }
    }

    private boolean checkPermission(String permission){
        if (Build.VERSION.SDK_INT >= 23) {
            int result = ContextCompat.checkSelfPermission(activity, permission);
            if (result == PackageManager.PERMISSION_GRANTED){
                return true;
            } else {
                return false;
            }
        } else {
            return true;
        }
    }
}
public class MainActivity extends AppCompatActivity {
    String TAG = "PhoneActivityTAG";
    @SuppressLint("NewApi")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
             List<SubscriptionInfo> _sb = SubscriptionManager.from(getApplicationContext()).getActiveSubscriptionInfoList();
            for (int i = 1; i < _sb.size(); i++) {
                SubscriptionInfo info = _sb.get(i);
                Log.d(TAG, "Mobile_number " + info.getNumber());

            }
        }
    }
}
public类MainActivity扩展了AppCompatActivity{
String TAG=“PhoneActivityTAG”;
@SuppressLint(“新API”)
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.M){
List _sb=SubscriptionManager.from(getApplicationContext()).getActiveSubscriptionInfoList();
对于(int i=1;i<_sb.size();i++){
订阅信息=_sb.get(i);
Log.d(标记“Mobile_number”+info.getNumber());
}
}
}
}

获取两个sim卡详细信息

 if (SubscriptionManager.from(this).getActiveSubscriptionInfoCount() > 0) {
                ArrayList<String> _lst = new ArrayList<>();
                for (int i = 0; i < SubscriptionManager.from(this).getActiveSubscriptionInfoList().size(); i++) {
                    _lst.add("\n".concat(String.valueOf(phoneMgr.createForSubscriptionId(i).getCallState())));
                    _lst.add("\nIMEI NUMBER : " + phoneMgr.createForSubscriptionId(i).getImei());
                    _lst.add("\nMOBILE NUMBER : ".concat(phoneMgr.createForSubscriptionId(i).getLine1Number()));
                    _lst.add("\nSERIAL NUMBER : ".concat(phoneMgr.createForSubscriptionId(i).getSimSerialNumber()));
                    _lst.add("\nSIM OPERATOR NAME : " + phoneMgr.createForSubscriptionId(i).getSimOperatorName());
                    _lst.add("\nMEI NUMBER : " + phoneMgr.createForSubscriptionId(i).getMeid());
                    _lst.add("\nSIM STATE : ".concat(String.valueOf(phoneMgr.createForSubscriptionId(i).getSimState())));
                    _lst.add("\nCOUNTRY ISO : " + phoneMgr.createForSubscriptionId(i).getSimCountryIso());
                }
                return _lst;
            }
if(SubscriptionManager.from(this).getActiveSubscriptionInfoCount()>0){
ArrayList _lst=新的ArrayList();
对于(int i=0;i