我实际上是在尝试从我的Flutter应用发送短信,而无需用户进行交互。我知道我可以使用url_launcher启动SMS应用程序,但实际上我想发送没有用户交互的SMS或从我的flutter应用程序启动SMS。
请有人告诉我是否可行。
非常感谢,Mahi
实际上,以编程方式发送SMS时,您需要实现一个平台通道并用于SMSManager
发送SMS。
例:
Android部分:
首先向添加适当的权限AndroidManifest.xml
。
<uses-permission android:name="android.permission.SEND_SMS" />
然后在您的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
实现正确的权限调用代码。
2.在双SIM卡手机的情况下,该示例也未实现选择SIM卡。如果在双SIM卡手机上未为短信设置默认SIM卡,则可能不会发送短信。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句