如何使用android studio获取phone号码或sim卡信息?

How to get phone number or sim card information use android studio?

如何获取phone号码或SIM卡信息使用androidstudio? (SIM 卡 1 或 2)

我用过这个代码:

TelephonyManager tMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
phone_number.setText(tMgr.getLine1Number());

而且我还在 AndroidManifest 中添加了权限:

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

但是我申请的所有gadgets都无法获取phone号或者总是生成空值

这是我使用的build.gradle:

dependencies {
   implementation fileTree(dir: 'libs', include: ['*.jar'])
   //noinspection GradleCompatible
   implementation 'com.android.support:appcompat-v7:27.1.1'
   implementation 'com.android.support.constraint:constraint-layout:1.1.0'
   //noinspection GradleCompatible
   implementation 'com.google.android.gms:play-services-maps:15.0.1'
   implementation 'com.google.android.gms:play-services-location:15.0.1'
   testImplementation 'junit:junit:4.12'
   androidTestImplementation 'com.android.support.test:runner:1.0.2'
   androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

   //noinspection UseOfBundledGooglePlayServices
   implementation 'com.google.android.gms:play-services:12.0.1'
   implementation 'com.google.android.gms:play-services-auth:15.0.1'
}

没有可靠的方法从 SIM 卡中获取 phone 号码。 TelephonyManager 从 SIM 卡中读取 phone 号码,但由电信运营商将此信息添加到 SIM 卡中。

大多数电信运营商都没有在 SIM 卡中添加此信息,因此不够可靠。

有一种方法可以使用 Google-Play-Service 获取 phone 号码,但它也不能保证 100% return phone 数字。您可以按如下方式进行。

build.gradle中添加以下依赖:

dependencies {
    ...
    compile 'com.google.android.gms:play-services:11.6.0'
    compile 'com.google.android.gms:play-services-auth:11.6.0'
}

MainActivity.java中创建两个常量:

private static final int PHONE_NUMBER_HINT = 100;
private final int PERMISSION_REQ_CODE = 200;

在您的按钮的 onclick 中添加以下内容:

final HintRequest hintRequest =
  new HintRequest.Builder().setPhoneNumberIdentifierSupported(true).build();

try {
  final GoogleApiClient googleApiClient =
    new GoogleApiClient.Builder(MainActivity.this).addApi(Auth.CREDENTIALS_API).build();

  final PendingIntent pendingIntent =
    Auth.CredentialsApi.getHintPickerIntent(googleApiClient, hintRequest);

  startIntentSenderForResult(
    pendingIntent.getIntentSender(),
    PHONE_NUMBER_HINT,
    null,
    0,
    0,
    0
  );
} catch (Exception e) {
    e.printStackTrace();
}

添加onActivityResult

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == PHONE_NUMBER_HINT && resultCode == RESULT_OK) {
        Credential credential = data.getParcelableExtra(Credential.EXTRA_KEY);
        final String phoneNumber = credential.getId();
    }
}

您可以使用以下几种方法:

mTelephonyMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);

String countryiso=mTelephonyMgr.getSimCountryIso();

String simOperator=mTelephonyMgr.getSimOperator();

String  simOperatorName=mTelephonyMgr.getSimOperatorName();

String  simSerialNo=mTelephonyMgr.getSimSerialNumber();

int     simState=mTelephonyMgr.getSimState();

String  subscriberID=mTelephonyMgr.getSubscriberId();

编辑

  String mPhoneNumber = mTelephonyMgr.getLine1Number();

更多,visit here.

此权限也是必需的。

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

希望对您有所帮助。