如何在没有用户互动的情况下发送短信?

时间:2018-01-16 17:55:45

标签: dart flutter

我实际上是在没有用户的互动的情况下尝试从我的扑克应用程序发送短信。 我知道我可以使用url_launcher启动短信应用程序,但实际上我想在没有用户交互的情况下发送短信或从我的扑动应用程序启动短信。

有人可以告诉我这是否可行。

非常感谢, 鳅

2 个答案:

答案 0 :(得分:8)

实际上,要以编程方式发送短信,您需要实施平台频道并使用SMSManager发送短信。

示例:

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 incase的双卡手机。如果在双卡手机上没有为短信设置默认SIM卡,则可能不会发送短信。

答案 1 :(得分:1)

使用SMS library for flutter

链接:sms_maintained

注意:这是先前flutter的sms库的分支,该库不再维护,因此命名。这是当前处于活动状态并且正在工作。

相关问题