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 ответа
Удалить
onPause
метод в первую очередь. Так как после включения услуги автоматического получения SMS-сообщений время ожидания составляет 5 минут. Если метод срабатывает через 5 минут, функция широковещательной рассылки успешно включена.Удалить этот метод
Через пять минут проверьте, не
onReceive
метод запускается. Если да, то трансляция нормальная.Формат SMS-сообщения должен соответствовать следующему примеру. Если формат SMS-сообщения неправильный, трансляция не запускается, даже если мобильный телефон получает SMS-сообщение. Трансляция прекращается через 5 минут.
prefix_flag short message verification code is XXXXXX hash_value
- Регистрация трансляции не может быть зарегистрирована в
manifest
, только может быть динамически зарегистрирован вactivity
.
Я обновил ядро HMS в приложениях и перезапустил устройство, и оно волшебным образом работает.