Huawei автоматическое чтение смс

Хочу реализовать в Huawei автоматическое чтение смс. Я сослался на этот https://developer.huawei.com/consumer/en/doc/development/HMSCore-Guides-V5/readsmsmanager-0000001050050861-V5 и настроил все по мере необходимости. Но трансляция не работает. Вот код.

Манифест сервисное декларирование

      <receiver
    android:name=".util.SMSBroadCastReceiver"
    android:exported="true">
    <intent-filter>
        <action android:name="com.huawei.hms.support.sms.common.ReadSmsConstant.READ_SMS_BROADCAST_ACTION" />
    </intent-filter>
</receiver>

Класс трансляции

      public class SMSBroadCastReceiver extends BroadcastReceiver {

    private static final String TAG = "SMSBroadCastReceiver";
    private OTPReceiveListener otpReceiver = null;

    public void initOTPListener(OTPReceiveListener receiver) {
        this.otpReceiver = receiver;
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle bundle = intent.getExtras();
        if (bundle != null && ReadSmsConstant.READ_SMS_BROADCAST_ACTION.equals(intent.getAction())) {
            Status status = bundle.getParcelable(ReadSmsConstant.EXTRA_STATUS);
            if (status.getStatusCode() == CommonStatusCodes.TIMEOUT) {
                // The service has timed out and no SMS message that meets the requirements is read. The service process ends.
                Log.i(TAG, "onReceive: TIMEOUT ");
                this.otpReceiver.onOTPTimeOut();
            } else if (status.getStatusCode() == CommonStatusCodes.SUCCESS) {
                if (bundle.containsKey(ReadSmsConstant.EXTRA_SMS_MESSAGE)) {
                    // An SMS message that meets the requirement is read. The service process ends.
                    Log.i(TAG, "onReceive: received " + bundle.getString(ReadSmsConstant.EXTRA_SMS_MESSAGE));
                    this.otpReceiver.onOTPReceived(bundle.getString(ReadSmsConstant.EXTRA_SMS_MESSAGE));
                }
            }
        }
    }

    public void startSmsRetriever(Context context) {
        Task<Void> task = ReadSmsManager.start(context);
        task.addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(Task<Void> task) {
                if (task.isSuccessful()) {
                    // The service is enabled successfully. Perform other operations as needed.
//                    doSomethingWhenTaskSuccess();
                    Log.i(TAG, "startSmsRetriever: isSuccessful");
                }else{
                    //task false
                    Log.i(TAG, "startSmsRetriever: failed");
                }
            }
        });
    }

    public interface OTPReceiveListener {

        void onOTPReceived(String otp);

        void onOTPTimeOut();
    }
}

Коды классов активности

      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        smsBroadcast = new SMSBroadCastReceiver();
        smsBroadcast.initOTPListener(this);
        smsBroadcast.startSmsRetriever(this);
    }


    @Override
    public void onResume() {
        super.onResume();
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(ReadSmsConstant.READ_SMS_BROADCAST_ACTION);
        registerReceiver(smsBroadcast, intentFilter);
    }

    @Override
    public void onPause() {
        unregisterReceiver(smsBroadcast);
        super.onPause();
    }
    

Я также сгенерировал требуемый хэш-код и отправил смс.

Вот startSmsRetriever:isSuccessful. Но трансляция onReceive не вызывается. Пожалуйста помоги мне с этим

2 ответа

  1. Удалить onPauseметод в первую очередь. Так как после включения услуги автоматического получения SMS-сообщений время ожидания составляет 5 минут. Если метод срабатывает через 5 минут, функция широковещательной рассылки успешно включена.

    Удалить этот метод

    Через пять минут проверьте, не onReceiveметод запускается. Если да, то трансляция нормальная.

  2. Формат SMS-сообщения должен соответствовать следующему примеру. Если формат SMS-сообщения неправильный, трансляция не запускается, даже если мобильный телефон получает SMS-сообщение. Трансляция прекращается через 5 минут.

      prefix_flag short message verification code is XXXXXX hash_value

  1. Регистрация трансляции не может быть зарегистрирована в manifest , только может быть динамически зарегистрирован в activity.

Я обновил ядро ​​HMS в приложениях и перезапустил устройство, и оно волшебным образом работает.

Другие вопросы по тегам