我正在尝试使用 google smsRetrieverAPI(文档 here)自动捕获 OTP,它从提供的消息文本中捕获 OTP,消息以 [#] 开头并以应用程序哈希字符串结尾,例如 NMjIX4ZCb0u
尽管发送了正确格式的消息模板,但清单中注册的广播接收器永远不会使用消息调用 onReceive,该消息可进一步用于使用任何 OTP 正则表达式获取 OTP。
我的代码如下
Android 清单
<receiver
android:name=".receiver.AutoReadSMSReceiver"
android:exported="true">
<intent-filter>
<action android:name="com.google.android.gms.auth.api.phone.SMS_RETRIEVED" />
</intent-filter>
</receiver>
LoginFragment.kt
smsRetrieverClient?.startSmsRetriever()
AutoReadSMSReceiver
public class AutoReadSMSReceiver extends BroadcastReceiver {
@Override
public void onReceive(@NonNull Context context, @Nullable Intent intent) {
String message = null;
Log.d("AutoReadSms", "onReceive: intent "+intent);
if (null != intent && null != intent.getExtras() && SmsRetriever.SMS_RETRIEVED_ACTION.equals(intent.getAction())) {
Bundle extras = intent.getExtras();
Status status = (Status) extras.get(SmsRetriever.EXTRA_STATUS);
if (null != status) {
Toast.makeText(context,"status code "+status.getStatusCode(), Toast.LENGTH_SHORT).show();
switch (status.getStatusCode()) {
case CommonStatusCodes.SUCCESS:
message = (String) extras.get(SmsRetriever.EXTRA_SMS_MESSAGE);
break;
case CommonStatusCodes.TIMEOUT:
break;
}
}
}
Intent smsintent = new Intent();
smsintent.setAction(OTPHandlerFragment.AUTO_READ_SMS_COMMAND);
smsintent.putExtra(OTPHandlerFragment.MESSAGE, message);
context.sendBroadcast(smsintent);
}
}
试过上面的东西但没有用。