我实际上是在尝试从我的flutter应用程序发送短信,而无需用户进行交互。我知道我可以使用url_launcher启动SMS应用程序,但实际上我想发送一个没有用户交互的SMS或从我的flutter应用程序启动SMS。
请有人告诉我是否可行。
非常感谢,Mahi
实际上,要以编程方式发送SMS,您需要实现一个平台通道并用于SMSManager发送SMS。
SMSManager
例:
Android部分:
首先向添加适当的权限AndroidManifest.xml。
AndroidManifest.xml
<uses-permission android:name="android.permission.SEND_SMS" />
然后在您的MainActivity.java:
MainActivity.java
package com.yourcompany.example; import android.os.Bundle; import android.telephony.SmsManager; import android.util.Log; import io.flutter.app.FlutterActivity; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; import io.flutter.plugins.GeneratedPluginRegistrant; public class MainActivity extends FlutterActivity { private static final String CHANNEL = "sendSms"; private MethodChannel.Result callResult; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); GeneratedPluginRegistrant.registerWith(this); new MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler( new MethodChannel.MethodCallHandler() { @Override public void onMethodCall(MethodCall call, MethodChannel.Result result) { if(call.method.equals("send")){ String num = call.argument("phone"); String msg = call.argument("msg"); sendSMS(num,msg,result); }else{ result.notImplemented(); } } }); } private void sendSMS(String phoneNo, String msg,MethodChannel.Result result) { try { SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage(phoneNo, null, msg, null, null); result.success("SMS Sent"); } catch (Exception ex) { ex.printStackTrace(); result.error("Err","Sms Not Sent",""); } } }
飞镖代码:
import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter/services.dart'; void main() { runApp(new MaterialApp( title: "Rotation Demo", home: new SendSms(), )); } class SendSms extends StatefulWidget { @override _SendSmsState createState() => new _SendSmsState(); } class _SendSmsState extends State<SendSms> { static const platform = const MethodChannel('sendSms'); Future<Null> sendSms()async { print("SendSMS"); try { final String result = await platform.invokeMethod('send',<String,dynamic>{"phone":"+91XXXXXXXXXX","msg":"Hello! I'm sent programatically."}); //Replace a 'X' with 10 digit phone number print(result); } on PlatformException catch (e) { print(e.toString()); } } @override Widget build(BuildContext context) { return new Material( child: new Container( alignment: Alignment.center, child: new FlatButton(onPressed: () => sendSms(), child: const Text("Send SMS")), ), ); } }
希望这对您有所帮助!
** 注意:
1.示例代码未显示如何在版本6.0及更高版本的android设备上处理权限。如果用于6.0实现正确的权限调用代码。
6.0
2.在双卡双待手机的情况下,该示例也未实现选择SIM卡。如果在双SIM卡手机上未为短信设置默认SIM卡,则可能不会发送短信。