安卓短信问题,比如多个卡的手机,怎么判断收到短信的接收的号码那
参考:https://blog.csdn.net/weixin_39540020/article/details/117312251
不知道你这个问题是否已经解决, 如果还没有解决的话:使用Android Studio打开项目工程,找到并打开项目工程根路径下的build.gradle文件。在“allprojects > repositories”和“buildscript > repositories”里面增加SDK的maven仓地址。
maven {url 'https://developer.huawei.com/repo/'}
打开app下应用级的build.gradle文件,在“dependencies”中添加如下编译依赖。
implementation 'com.huawei.hms:health:{version}'
重新打开修改完的build.gradle文件,右上方出现Sync Now链接。点击“Sync Now”等待同步完成。
在应用级根目录下打开混淆配置文件“proguard-rules.pro”,加入排除HMS Core SDK的混淆配置脚本。
-ignorewarnings
-keepattributes *Annotation*
-keepattributes Exceptions
-keepattributes InnerClasses
-keepattributes Signature
-keepattributes SourceFile,LineNumberTable
-keep class com.huawei.hianalytics.**{*;}
-keep class com.huawei.updatesdk.**{*;}
-keep class com.huawei.hms.**{*;}
修改应用包名,应用包名应与“申请帐号服务”中填写的包名保持一致。 打开App下应用级根目录的“build.gradle”文件,在“android”中新增compileOptions配置,配置格式如下:
compileOptions {
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
}
对于问题如何在多卡安卓手机中判断接收的短信号码,我可以给出以下解决方案:
在Android系统中可以通过TelephonyManager类获取相应的SIM卡信息,其中包括获取SIM卡的数量、IMSI号码、运营商信息等。
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
int simCount = tm.getSimCount(); // 获取SIM卡数量
在Android系统中可以通过BroadcastReceiver接收短信,需要动态注册广播。通过接收到的Intent可以获取到短信的内容、发送号码、接收时间等信息。
public class SMSReceiver extends BroadcastReceiver {
public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(SMS_RECEIVED_ACTION)) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get("pdus");
if (pdus != null && pdus.length > 0) {
SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
}
// 获取短信内容、发送号码,可以根据此判断接收短信的卡槽
String smsBody = messages[0].getDisplayMessageBody();
String smsNumber = messages[0].getOriginatingAddress();
}
}
}
}
}
在获取短信的发送号码后,可以通过运营商信息来判断短信是从哪个卡槽接收的。例如中国移动的号码前缀为138、139、137等,中国联通的号码前缀为130、131、132等,中国电信的号码前缀为133、149、153等。
String simOperator = tm.getSimOperator(); // 获取SIM卡运营商ID
if (!TextUtils.isEmpty(simOperator)) {
if (simOperator.equals("46000") || simOperator.equals("46002")) {
// 中国移动
if (smsNumber.startsWith("138") || smsNumber.startsWith("139") || smsNumber.startsWith("137")) {
// 短信从卡槽1接收
} else {
// 短信从卡槽2接收
}
} else if (simOperator.equals("46001")) {
// 中国联通
if (smsNumber.startsWith("130") || smsNumber.startsWith("131") || smsNumber.startsWith("132")) {
// 短信从卡槽1接收
} else {
// 短信从卡槽2接收
}
} else if (simOperator.equals("46003")) {
// 中国电信
if (smsNumber.startsWith("133") || smsNumber.startsWith("149") || smsNumber.startsWith("153")) {
// 短信从卡槽1接收
} else {
// 短信从卡槽2接收
}
}
}