安卓收短信多卡问题,判断

安卓短信问题,比如多个卡的手机,怎么判断收到短信的接收的号码那

参考:https://blog.csdn.net/weixin_39540020/article/details/117312251

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7535914
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:微信小程序iOS兼容问题,苹果手机白屏,页面不加载,安卓手机正常
  • 除此之外, 这篇博客: 如何快速开发一个健康助手,实时守护用户健康中的 开发准备 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    注册帐号及申请帐号服务:因Health Kit服务需要用到帐号服务的能力,需先申请华为帐号服务后才能申请Health Kit服务。
    1. 申请Health Kit服务:申请产品所需的数据读写权限。在开发服务中找到并申请Health Kit服务。勾选产品需要申请的数据权限,这里我们需要申请的身高、体重属于非受限数据,提交申请后会快速审核通过,心率、血压、血糖、血氧饱和度属于受限数据,需要经过人工审核。

    1. 集成HMS Core SDK:在开发应用前,需要将Health Kit扩展服务能力的SDK集成到开发环境中。

    使用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”等待同步完成。

    1. 配置混淆脚本:编译APK前需要配置混淆配置文件,避免混淆HMS Core SDK导致功能异常。

    在应用级根目录下打开混淆配置文件“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.**{*;}
    1. 导入证书指纹、修改包名、配置JDK编译版本: 根据“创建应用的Keystore文件”指南,生成Keystore文件并导入到应用中,导入后,打开应用级的“build.gradle”文件,可以看到导入的结果。

    修改应用包名,应用包名应与“申请帐号服务”中填写的包名保持一致。 打开App下应用级根目录的“build.gradle”文件,在“android”中新增compileOptions配置,配置格式如下:

    compileOptions {
        sourceCompatibility = '1.8'
        targetCompatibility = '1.8'
    }
  • 您还可以看一下 刘海建老师的微信小程序开发基础及案例精讲课程中的 获取手机系统信息小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    对于问题如何在多卡安卓手机中判断接收的短信号码,我可以给出以下解决方案:

    1. 获取手机卡槽信息

    在Android系统中可以通过TelephonyManager类获取相应的SIM卡信息,其中包括获取SIM卡的数量、IMSI号码、运营商信息等。

    TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
    int simCount = tm.getSimCount(); // 获取SIM卡数量
    
    1. 接收短信

    在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();
                    }
                }
            }
        }
    }
    
    1. 判断接收短信的卡槽

    在获取短信的发送号码后,可以通过运营商信息来判断短信是从哪个卡槽接收的。例如中国移动的号码前缀为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接收
            }
        }
    }
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^