Twilio的宗旨是为通信提供动力,并以任何语言方便快捷地进行通信。
在Twilio和Java的帮助下,你不用拿起你的移动设备就可以向别人快速传递信息。使用Java也给你提供了创建图形用户界面(GUI)的有趣机会,以更有趣和互动的方式补充用户发送短信的经验。
在这篇文章中,你将实现一个小的按钮GUI,一旦按钮被点击,就会向你的移动电话设备发送一条短信。
配置
我们首先要创建一个目录来存储我们项目的文件。在你喜欢的终端里面,输入:
$ mkdir java_sms_button
$ cd java_sms_button
在这篇文章中,我们将下载独立的Twilio Java辅助库。在这里下载一个预先建立的jar文件。在本文发表时,最新版本的jar文件是twilio-8.18.0-with-dependencies.jar。 向下滚动下载该文件并保存到你的java_sms_button项目目录。
购买一个Twilio电话号码
如果你还没有这样做,购买一个Twilio号码来发送短信。
要这样做,请登录Twilio控制台,选择电话号码,然后点击红色加号,购买一个Twilio号码。注意,如果你使用的是免费账户,你将使用你的试用信用来购买。
在购买号码界面,你可以选择你的国家,并在功能栏中勾选短信。如果你想申请你所在地区的号码,你可以在号码栏中输入你的区号。

点击搜索按钮,看看有哪些号码可用,然后点击 "购买",从结果中选择你喜欢的号码。在你确认你的购买后,点击关闭按钮。
创建一个按钮GUI
我们的目标是在GUI中建立一个可点击的按钮,这样用户就可以点击向一个手机号码发送短信。
在你的项目目录中建立一个名为SMSButton.java 的新文件,并粘贴以下代码来导入必要的包来处理事件:
import javax.swing.*;
import java.awt.event.*;
class SMSEventClicker implements ActionListener {
JFrame frame=new JFrame();
JButton button=new JButton("Click Me");
SMSEventClicker() {
createButtonGUI();
buttonProperties();
}
}
javax.swing包是AWT 包的新版本,它允许你开发GUI应用程序。该包对于利用为该项目创建按钮的组件是必要的。尽管没有直接使用AWT 包,但javax.swing 包需要java.awt.event包来处理来自按钮组件的事件。
一个名为SMSEventClicker 的类被创建,它实现了一个ActionListener 。还定义了该类的构造函数,以便在用户点击SMS按钮事件时可以使用GUI和按钮属性对象。
在编译这段代码之前,必须编写createButtonGUI() 和buttonProperties() 的函数。在类的构造函数下复制并粘贴以下代码:
public void createButtonGUI(){
frame.setTitle("Send an SMS");
frame.getContentPane().setLayout(null);
frame.setVisible(true);
frame.setBounds(400,400,400,400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
这个函数利用了javax.swing 包中的JFrame类,以创建GUI窗口容器,该容器将弹出并容纳可点击的按钮。内容窗格的元素包括标题、可视性和确定宽度和高度的边界。通过使用setDefaultCloseOperation ,在用户关闭窗口后停止应用程序,结束该功能。
复制并粘贴以下代码,在按钮GUI函数的正下方定义buttonProperties 函数:
public void buttonProperties(){
button.setBounds(150,150,150,150);
frame.add(button);
button.addActionListener(this);
}
同样地,再次调用框架类来创建一个有边界的按钮。然而,这里重要的是,必须给这个按钮以具体的指示,让它做什么。我们的目标是让用户点击按钮,发射一条短信到一个电话号码。
覆盖按钮的点击动作
正如前面在SMSEventClicker 类定义中看到的,ActionListener 接口被实现了。这允许开发者确定当用户点击按钮时发生的动作,对ActionEvent 。
当用户点击组件时,一个叫做actionPerformed() 的方法被调用,因此,这个方法需要被重写,这样就可以实现新的指令来代替。
继续,通过复制和粘贴现有代码下的代码来覆盖该方法:
@Override
public void actionPerformed(ActionEvent e) {
Message message = Message
.creator(new PhoneNumber("+<YOUR_PHONE_NUMBER>"), // to
new PhoneNumber("+<YOUR_TWILIO_NUMBER>"), // from
"Ahoy ahoy!")
.create();
System.out.println(message.getSid());
}
用你的实际数字替换<YOUR_PHONE_NUMBER> 和<YOUR_TWILIO_NUMBER> ,使用E.164的格式。
覆盖的方法点燃了Twilio REST API,以便从你的Twilio手机号码向你的个人电话号码发送短信。这是通过创建一个新的Message 资源的message 实例而实现的。消息发送后,消息的SID会打印在终端上供参考。
保存该文件。请随意添加这些功能,并随心所欲地改变GUI窗口容器的外观和按钮属性。
用Java和Twilio发送短信
为了完成代码并向一个电话号码发送短信,你必须用你的Twilio账户凭证配置环境,并在代码中引用它。
你可以在Twilio控制台找到你的账户凭证。

如果你使用的是macOS或Linux,运行下面的命令,将你的账户凭证导出到twilio.env文件中。如果你决定提交这个项目目录,确保你不会意外地将你的凭证提交到公共仓库:
echo "export TWILIO_ACCOUNT_SID='ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'" > twilio.env
echo "export TWILIO_AUTH_TOKEN='<YOUR_AUTH_TOKEN>'" >> twilio.env
source ./twilio.env
echo "twilio.env" >> .gitignore
对于Windows开发者来说,你必须把export 替换为set ,如下图所示:
set TWILIO_ACCOUNT_SID=ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
set TWILIO_AUTH_TOKEN='<YOUR_AUTH_TOKEN>'
为了方便起见,你也可以随意创建一个*.env和.gitignore*文件。
回到SMSButton.java文件,通过创建一个反映文件名的新的公共类来检索环境变量。复制下面的类定义并粘贴在SMSEventClicker 类的定义下面:
public class SMSButton {
public static final String ACCOUNT_SID = System.getenv("TWILIO_ACCOUNT_SID");
public static final String AUTH_TOKEN = System.getenv("TWILIO_AUTH_TOKEN");
public static void main(String[] args) {
Twilio.init(ACCOUNT_SID, AUTH_TOKEN);
new SMSEventClicker();
}
}
这个类对于检索系统环境变量和启动Twilio客户端是必要的,Twilio客户端将利用这些变量,以便成功发送短信。
为了结束这个类的定义,我们创建了一个SMSEventClicker 的对象。一旦代码被编译,JVM将开始执行Java程序,本文前面定义的所有GUI和按钮的定义将被调用。
完整的代码在我的GitHub资源库中,供你参考。
编译并运行Java程序
保存你的文件,并在终端键入这个命令来编译SMSButton 类:
javac -cp "twilio-8.8.0-jar-with-dependencies.jar" SMSButton.java
如果你使用的是macOS或Linux,使用以下命令:
java -cp ".:twilio-8.8.0-jar-with-dependencies.jar" SMSButton
对于Windows开发者,使用下面的命令来激活你桌面上的GUI:
java -cp ".;twilio-8.8.0-jar-with-dependencies.jar" SMSButton
请注意,这两条命令的唯一区别是,Windows的命令使用分号代替。
稍等片刻,你会看到一个屏幕出现,标题是 "发送短信"。去吧,点击这个按钮

点击按钮后,检查你的手机是否有短信。

用Java发送短信的下一步是什么?
恭喜你写了一个简短的Java程序,一旦用户点击了屏幕上的按钮,就会发送短信!你还可以做更多的事情。
利用Twilio和Java的许多包,你可以做的事情还有很多。也许你可以想出如何在Java中通过点击按钮来回复传入的短信。