设为首页收藏本站

融智技术学院

 找回密码
 注册

QQ登录

只需一步,快速开始

Xamarin开发常见问题集锦
搜索
查看: 330|回复: 1

[求助] 安卓发送短信程序出错

[复制链接]
IT囚徒 发表于 2014-3-22 11:19:04 | 显示全部楼层 |阅读模式
各位安卓爱好者,我最近根据安卓视频教程做了个短信发送 改了 接收方的号码长度 从4-9 之间改成正常的手机号码11位程序就报错 不知道原因  在布局文件里面也没有限制输入字符串的长度 请大神指点下 源码如下
package com.android;

import java.util.ArrayList;
import java.util.concurrent.Semaphore;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.security.auth.PrivateCredentialPermission;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.PendingIntent;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class SmsMangerActivity extends Activity {
    /** Called when the activity is first created. */
        private static final String[] phonenumberStr=new String[]{"88888888","85668888","77777777","86666666","7377777"};
        //用于自动完成提示的号码表
        private Button send_message_button;//声明短息发送按钮
        private EditText send_message_text;//声明短信文本编辑框
        private AutoCompleteTextView autoCompletePhone;//定义自动提示文本控件
        private SmsManager smsManager;//声明短信管理器对象
        private PendingIntent pendingIntent;//声明pendingIntent对象
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        autoCompletePhone=(AutoCompleteTextView) findViewById(R.id.autoCompletePhone);
        send_message_text=(EditText) findViewById(R.id.send_message_text);
        send_message_button=(Button) findViewById(R.id.send_message_button);
        //创建一个默认模式的SmsManager对象
        smsManager=SmsManager.getDefault();
        //创建一个广播Intent
        PendingIntent.getBroadcast(SmsMangerActivity.this, 0, new Intent(), 0);
        //以phonenumberStr字符串数组生成ArrayAdapter对象
        ArrayAdapter<String>adapter=new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line,phonenumberStr);
        //通过setAdapter()读取ArrayAdapter里的数据:phonenumberStr
        autoCompletePhone.setAdapter(adapter);
        //设置Button对象的OnclickListener来监听Onclick事件
        send_message_button.setOnClickListener(new MyButtonOnclickListener());
    }
    private class MyButtonOnclickListener implements OnClickListener{

                @Override
                public void onClick(View v) {
                        // TODO Auto-generated method stub
                        try {
                                String receiver=autoCompletePhone.getText().toString();
                                String message=send_message_text.getText().toString();
                                //设置vaild_expression仅包含数字的字符串
                                String vaild_exprsssion="([0-9]+)$";
                                //设置vaild_expression仅包含字符的字符串
                                String invaild_expression="[a-zA-Z]+$";
                                //若输入的号码包含数字,不包含字母。且字符串长度在4-9之间
                                //则调用系统的拨号应用
                                if(VaildDigitaiPhoneNumber(receiver, vaild_exprsssion)&&!VaildDigitaiPhoneNumber(receiver, invaild_expression)
                                                &&VaildNumberLen(receiver, 4, 11)){
                                        //若为空信息,则弹出对话框提示用户是否发送
                                        if(MessageLen(message)==0)
                                                CreateDialog("send anyway", "Cancel", "确定发送空信息?", new PositiveButtonListener(), new NegativeButtonListener());
                                        //若长度大于70,则弹出对话框显示用户是否发送
                                        else if(MessageLen(message)>70)
                                                CreateDialog("send anyway", "Cancel", "确定发送超长信息?", new PositiveButtonListener(), new NegativeButtonListener());
                                        //若长度小于70,弹出对话框提示用户是否发送
                                        else
                                                CreateDialog("Send anyway", "Cancel", "确定发送信息 ?", new PositiveButtonListener(), new NegativeButtonListener());
                                }else{
                                        autoCompletePhone.setText("");
                                        send_message_text.setText("");
                                        Toast.makeText(SmsMangerActivity.this, "无效电话号码格式", Toast.LENGTH_LONG).show();
                                }
                               
                        } catch (Exception e) {
                                // TODO: handle exception
                                Toast.makeText(SmsMangerActivity.this, "异常错误 :"+e.toString(), Toast.LENGTH_LONG).show();
                        }finally{
                               
                        }
                }
           
    }
    //判断输入的电话号码的长度是否在规定范围之间,若长度正确返回TRUE否则返回FALSE
    public static boolean VaildNumberLen(String phone_number,int mixlen,int maxlen){
            //获取电话号码的长度
            int len=phone_number.length();
            //判定电话号码是否在规定范围之间
            if(len>=mixlen&&len<=maxlen)
                    return true;
            return false;
    }
   //检查电话号码是否包含正则表达式定义的字符串,若包含,则返回TRUE否则返回FALSE
    public static boolean VaildDigitaiPhoneNumber(String phone_number,String regexp){
            Pattern pattern=Pattern.compile(regexp);
            //根据正则表达式regexp生成模式对象
            Matcher matcher=pattern.matcher(phone_number);
            //模式对象利用正则表达式regexp匹配phone_number返回Matcher对象
            if(matcher.matches()){
                    return true;
            }
            return false;
    }
    public int MessageLen(String message){
            return message.length();
    }
    //sendMessage方法用于发送短信
    public void sendMessage(SmsManager smsManager,String destination,String source,String strMessage,PendingIntent pintent,
                    PendingIntent dintent){
            //若发送长度大于70则使用divideMessage方法拆开短信
            if(MessageLen(strMessage)>70){
                    ArrayList<String>messagearray=smsManager.divideMessage(strMessage);
                    for(String msg:messagearray){
                            smsManager.sendTextMessage(destination, source, msg, pintent, dintent);
                    }
            }else
                    smsManager.sendTextMessage(destination, source, strMessage, pintent, dintent);
    }
    //CreateDialog根据指定的属性产生对话框
    void CreateDialog(String PositiveButtontext,String NegativeButtontext,String title,PositiveButtonListener positiveButtonListener,
                    NegativeButtonListener negativeButtonListener){
            //新建Buildet对象,该builder独享用于构造对话框
            Builder myBuilder=new AlertDialog.Builder(this);
            //设置PositiveButton按钮的标题和单机监听器
            myBuilder.setPositiveButton(PositiveButtontext, positiveButtonListener);
            //设置NegativeButton按钮的标题和单机监听器
            myBuilder.setNegativeButton(NegativeButtontext, negativeButtonListener);
            //设置对话框的标题
            myBuilder.setTitle(title);
            //显示对话框
            myBuilder.show();
    }
    /**定义私有类PositiveButtonListener用于实现PositiveButton的单机事件监听
     * 该类实现对话框监听事件的接口类  DialogInterface.OnClickListener
     *
     */
    private class PositiveButtonListener implements DialogInterface.OnClickListener{

                @Override
                public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub
                        //获取接收方地址
                        String receiver =autoCompletePhone.getText().toString();
                        //发送方地址,可以置为null(5554)
                        String sender=null;
                        //获取发送方消息
                        String message=send_message_text.getText().toString();
                        PendingIntent pIntent=pendingIntent;
                        PendingIntent dIntent=null;
                        //发送短信
                        sendMessage(smsManager, receiver, sender, message, pIntent, dIntent);
                }
           
    }
    /**定义私有类NegativeButtonListener用于实现NegativeButton的单机事件监听
     * @author Administrator
     *
     */
    private class NegativeButtonListener implements DialogInterface.OnClickListener{

                @Override
                public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub
                        //取消发送短信,清空短信文本框和号码文本框
                        autoCompletePhone.setText("");
                        send_message_text.setText("");
                }
           
    }
}
sxyufeng 发表于 2014-3-22 12:50:04 | 显示全部楼层
发一下错误信息。看看。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

新突破电商

小黑屋|手机版|Archiver|融智技术学院 ( 京ICP备09018999号  

GMT+8, 2018-2-19 17:53

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表