如何使用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"/>
希望对您有所帮助。
如何获取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"/>
希望对您有所帮助。