首页 > 解决方案 > 如何在颤动中读取传入的短信

问题描述

我想阅读短信并获取验证码并自动进行身份验证。

我找到了这个并尝试了它的示例代码。它似乎不起作用。我还有其他方法可以做到这一点吗?或者也许我用错了。这是代码:

  String _verificationCode;
  SmsReceiver _smsReceiver;

  @override
  void initState() {
    super.initState();
    if (Platform.isAndroid) WebView.platform = SurfaceAndroidWebView();
    _smsReceiver = SmsReceiver(onSmsReceived);
  }

  void onSmsReceived(String message) =>
      setState(() => _verificationCode = message.split(" ").elementAt(2));

  void _startListening() => _smsReceiver.startListening();
.
.
.
} else if (url.toLowerCase().contains('verify')) {
                if (_verificationCode == null) {
                  _startListening();
                } 

这与文档中的代码几乎相同。

标签: flutter

解决方案


我在使用颤振包时也遇到了同样的问题,用于收听传入的消息,但对我没有任何帮助。

因此,我在 android 中创建了一个 BroadCastReceiver,并在自定义平台特定代码的帮助下将其与颤振连接起来。

广播接收器

   public class MyMsgReceiver extends BroadcastReceiver {

   @Override
   public void onReceive(Context context, Intent intent) {
      if(SMS_RECEIVED_ACTION.equals
       ("android.provider.Telephony.SMS_RECEIVED")){
         for (SmsMessage smsMessage : Telephony.Sms.Intents.getMessagesFromIntent(intent))
           {
               msg = smsMessage.getMessageBody();
               user = smsMessage.getDisplayOriginatingAddress();
            }
          }
        }
     };

将此接收器添加到清单文件(app/src/main/AndroidManifest.xml)

 <receiver
        android:name=".MyMsgReceiver"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
        </intent-filter>
 </receiver>

添加权限到 app/src/debug/AndroidManifest.xml

<uses-permission android:name="android.permission.RECEIVE_SMS"/>

希望这个方法对某人有帮助!!!


推荐阅读