项目名称SMS
打开项目,打开布局文件夹,打开默认的软件界面
首先完成软件界面,把其中的所有文字信息都添加到Strings文件夹当中,在xml文件中完成布局。
由于短信输入框比手机号输入框要高,所以在XML中通minLines属性将短信输入框的高度设置成至少应该有三行。
当给button做监听的时候,新建一个内部类,这个内部类可以社会自成final类型的,应为这个类不需要被继承。
首先,在监听的类中定义两个String类型的数据,一个用来获取发送短信的号码,另一个用来获取发送的短信内容。
我们都知道短信内容的发送会有一个字数的限制,当短信内容超过70个汉字的时候系统就会自动对短信内容进行拆分。
获取了发动短信的号码和发送短信的内容以后,这时候就要发送短信了,发送短信需要用到一个类就是短信管理者,既SMSManager,这时候我们就需要初始化一个短信管理者这样一个对象,让后通过短信管理者设置发送短信,它一共有五个参数,第一个是短信号码,第二个是短信中心号码,这时候我们可以设置成null,既使用系统中的短信中心号码,第三个参数是短信内容的设置,在设置短信内容之前应该对短信的字数加以设置。第四个参数是发送的状态,第五个参数是对方是否收到短信的状态。第四个和第五个参数的状态都是需要移动的网络返回电信号来确定,所以它们采用了异步的方式。而且这两者需要返回参数,所以需要用到广播接收者,由于还没有学到,而且,我们也不需要获取到结果,所以我们在这两个地方传入null。
由于系统已经提供了短信的拆分功能,所以直接调用就可以了,既smsmanager.divideMessage(content)。其中SMSmanager是短信管理者,调用它的拆分短信的方法,传入的是需要发送的短信内容。这个方法调用后返回的参数是ArrayList类型的参数。
对于这个短信的发送,我们采用加强for循环(既迭代for循环)来实现(String text :texts)。
对于短信的发送成功后,我们给用户一个反馈,安卓对于用户的反馈信息分为三种:
三种通知的形式:一个是土司通知,一个是状态栏通知,还有一个是对话框通知。状态栏通知就是安卓2.2上面的那个谷歌搜索那种的。
三种通知的的应用场景不同,状态栏通知一般用在服务和广播接收者里面。对话框通知一般运用在对话框通知或者土司通知。由于对话框通知比较生硬,所以一般如果不是很重要的信息就不会使用对话框方式来发送,土司方式的发送则是比较柔和的同时也是比较常用的。
要发送短信必须AndroidManifest一个发送短信的权限。
对于发送短信的测试,会发现,超过70个字符短信内容就会被自动拆分。
短信可以发送,但是模拟器上不支持中文,会出现乱码问题,但是在真机上不会出现这种情况。
至于系统已经有了发送短信的系统应用为什么,还要开发发送短信的软件,这同上一篇文章中说的一样,是为了在某一个应用中提供一个按钮给软件中的比如百合网等网站提供发送短信的内容。
public class MainActivity extends Activity{
private EditText numEdit,contentEdit;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mainactivity);
numEdit = (EditText) findViewById(R.id.numEdit);
contentEdit = (EditText) findViewById(R.id.contentEdit);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new ButtonListener());
}
private class ButtonListener implements OnClickListener{
@Override
public void onClick(View v) {
String number = numEdit.getText().toString();
String context = contentEdit.getText().toString();
SmsManager smsManager = SmsManager.getDefault();
//拆分短信
ArrayList<String> texts = smsManager.divideMessage(context);
for (String text: texts) {
smsManager.sendTextMessage(number, null, text, null, null);
}
Toast.makeText(MainActivity.this, R.string.success, Toast.LENGTH_LONG).show();
}
}
}