如何使用android studio获取电话号码或sim卡信息?
如何使用android studio获取电话号码或sim卡信息?(SIM卡1或2) 我使用了以下代码:如何使用android studio获取电话号码或sim卡信息?,android,telephonymanager,Android,Telephonymanager,如何使用android studio获取电话号码或sim卡信息?(SIM卡1或2) 我使用了以下代码: TelephonyManager tMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); phone_number.setText(tMgr.getLine1Number()); 我还在AndroidManifest中添加了权限: <uses-permission android:name="andr
TelephonyManager tMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
phone_number.setText(tMgr.getLine1Number());
我还在AndroidManifest中添加了权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
没有可靠的方法从SIM卡获取电话号码。TelephonyManager从SIM卡中读取电话号码,但由电信运营商将此信息添加到SIM卡中 大多数电信运营商没有在SIM卡中添加这些信息,因此其可靠性不够 有一种方法可以使用Google Play服务获取电话号码,但它也不能保证100%返回电话号码。你可以这样做 在
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();
}
添加活动结果
@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();
编辑
@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();
}
}
更多
这一许可也是必要的
我希望这会有所帮助。我认为您需要在运行时请求此权限,因为根据文档(取决于您使用的android版本设备运行时)它的保护级别是危险的,它会返回null,因为它不可用,并且在大多数情况下情况相同,因此,如果您需要根据sim卡执行操作(除了调用),那么您应该使用
getSimSerialNumber()
@x0r如何在运行时创建权限您的意思是?@Sam.如何使用getSimSerialNumber()?TelephonyManager tm=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);字符串simID=tm.getSimSerialNumber()
抱歉,此代码与我使用的代码相同,但我想要的电话号码保持为空。此代码与我使用的代码相同,我想要的电话号码保持为空。请从头检查,我在开始时做了一些更改,并在我的设备上进行了检查,它返回正确的输出,据我所知,该号码由您的sim卡提供运算符。如果运算符不返回该信息,您将始终得到null。每个运算符都有不同的mono-poly。@dyantbI已为该代码调整了所有代码,并将其保持为null(mAppContext)我有一个错误?那么问题出在提供商身上?像facebook、阿里巴巴和其他在线商店这样的应用程序是如何处理的?@dyantb您可以用getApplicationContext()替换mAppContext
。很抱歉,您的代码没有在我身上运行,我也不明白,在emulator或real中运行时,请帮助我不要编译phone@dyantb您是否已更新应用程序级别的build.gradle?@dyantb只需清理并重新生成。请确保您具有internet连接以下载库。您将收到编译错误,因为库为not下载正确您的代码成功,但为什么每个都只显示一个电话号码?我的手机使用2张sim卡,我有4张不同的sim卡,可交换,但始终只显示其中一张sim卡,尽管未安装sim卡。(示例:1.provider A=3G,2.provider B=4G,3.provider C=4G,4.provider D=4G,始终显示为provider A)
String mPhoneNumber = mTelephonyMgr.getLine1Number();