之前在做C#的时候很容易就实现了短信发送验证码修改密码的功能,之后做安卓的时候也想实现这个功能,但是有些难度,sms上面有Java接口,所以我觉得在安卓上面也可以使用,所以就试着做了一下,第一次没出来,就转到发送邮箱验证了,但是心有不甘,这几天再次根据接口实现,发现可以发送成功了。
首先需要三个jar包,我上传的资源里面有jar包地址
可以根据上面给的API接口来使用短信发送,以及验证。
注意::在使用线程的时候,有回调的地方要与发送放到一起,不然会有空指针错误。
public void btn_send(View v){
Log.d("进入点击函数", "btn_send: ");
final HttpClient client = new HttpClient();
final PostMethod post = new PostMethod("http://gbk.sms.webchinese.cn");//http://gbk.api.smschinese.cn
post.addRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gbk");//在头文件中设置转码
NameValuePair[] data ={
new NameValuePair("Uid", "网站用户名"),
new NameValuePair("Key", "网站上的授权码"),
new NameValuePair("smsMob","15209596446"),
new NameValuePair("smsText","验证码:8888"+"您正在使用短信验证码登录功能,该验证码仅用于身份验证,勿泄露给他人")};
post.setRequestBody(data);
Log.d("到发送线程了", "btn_send: ");
//http的操作需放到线程中,在线程操作的时候,已经离开当前位置了,所以后面有回调函数应该与发送写在一起
new Thread(new Runnable() {
@Override
public void run() {
try {
client.executeMethod(post);//发送短信
//异常处理,返回值
try {
//打印状态码和响应头信息
//
// Header[] headers = post.getResponseHeaders();
// int statusCode = post.getStatusCode();
// Log.d(String.valueOf(statusCode), "btn_send: ");
// for(Header h : headers)
// {
// Log.d(h.toString(), "btn_send: ");
// }
String result = new String(post.getResponseBodyAsString().getBytes("gbk"));
//getResponseBodyAsString要和client.excute放在同一个线程中,因为在执行线程时就会离开当前地方,回调函数就会得不到,出现空指针错误
Log.d(result, "btn_send: "); //打印返回消息状态
} catch (IOException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
Toast.makeText(this,"发送成功", Toast.LENGTH_LONG).show();
Log.d("出线程", "btn_send: ");
post.releaseConnection();
}