Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2179263
  • 博文数量: 436
  • 博客积分: 9833
  • 博客等级: 中将
  • 技术积分: 5558
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-29 10:27
文章存档

2013年(47)

2012年(79)

2011年(192)

2010年(118)

分类: LINUX

2011-04-06 15:32:58

第五次报告

研究题目:Android手机游戏开发

小组成员:李安 李想

本周计划:3.31--4.6

本周我们要对android的交互式通信服务与手机控件进行了解。交互式通信服务就是上下行同时进行的。在界面输入电话号码或是一些文字,单击确认后,会自动打开对应事件的程序,在另一个界面中显示,达到交互式通信的目的。

①. 拨打电话②.自制发送短信程序

实验内容:

一.拨打电话---Intent.ACTION.CALL的使用o

设计一个让用户输入电话号码的EditText,通过一个Button来实现拨打电话的练习,为了避免用户输入非电话号码的字符,在拨出电话前,通过自定义的isPhoneNumberValid()方法以及Toast信息来提示用户。

拨打电话的关键有两个方面:1)要在AndroidManifest中添加uses-permission,并声明Android:name="Android.permission.CALL_PHONE"使用权限。由于拨打电话属于手机底层的服务,与用户隐私及通话费用等议题息息相关,因此,程序必须取得相关权限。2)通过自定义Intent对象,带入"ACTION_CALL"这个关键,以及通过Uri.parse()的方法将用户输入的电话号码带入,最后以startActivity()方法,即可完成通过程序直接拨打电话的工作。

可接受的电话格式有: * ^\\(? : 

可以使用 "(" 作为开头 * (\\d{3}): 紧接着三个数字 * \\)? : 

可以使用")"接续 * [- ]? : 在上述格式后可以使用具选择性的 "-". * (\\d{3}) :

再紧接着三个数字 * [- ]? : 可以使用具选择性的 "-" 接续. * (\\d{4})$: 

以四个数字结束. * 可以比对下列数字格式:

(123)456-7890, 123-456-7890, 1234567890, (123)-456-7890 

需要预加载android.net.Urijava.util.regex.Matcherjava.util.regex.Pattern三个类。

通过Button对象监听onClick()事件来冲动拨打电话的程序

public class EX05_02 extends Activity 

/*声明Button与EditText对象名称*/

private Button mButton1;

private EditText mEditText1; 

@Override 

public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.main); 

/*透过findViewById建构子来建构EditText与Button对象*/ 

mEditText1 = (EditText) findViewById(R.id.myEditText1); 

mButton1 = (Button) findViewById(R.id.myButton1);

mButton1.setOnClickListener(new Button.OnClickListener() 

{

@Override 

public void onClick(View v) 

   

try 

/*取得EditText中用户输入的字符串*/ 

String strInput = mEditText1.getText().toString();                   if (isPhoneNumberValid(strInput)==true)

/*建构一个新的Intent并执行action.CALL的常数与透过Uri将字符串带入*/

Intent myIntentDial = new Intent("android.intent.action.CALL",Uri.parse("tel:"+strInput)); 

/*在startActivity()方法中带入自定义的Intent对象以执行拨打电话的工作*/ 

startActivity(myIntentDial); mEditText1.setText("");

else

{

mEditText1.setText(""); 

Toast.makeText( EX05_02.this, "输入的电话格式不符", Toast.LENGTH_LONG).show();

}

catch(Exception e)

{

e.printStackTrace();

});

/*检查字符串是否为电话号码的方法,并回传true or false的判断值*/ 

public static boolean isPhoneNumberValid(String phoneNumber) 

{

boolean isValid = false;

String expression = "^\\(?(\\d{3})\\)?[- ]?(\\d{3})[- ]?(\\d{4})$"; 

String expression2 ="^\\(?(\\d{2})\\)?[- ]?(\\d{4})[- ]?(\\d{4})$"; 

CharSequence inputStr = phoneNumber;

/*建立Pattern*/ 

Pattern pattern = Pattern.compile(expression); 

/*将Pattern 以参数传入Matcher作Regular expression*/

Matcher matcher = pattern.matcher(inputStr);

/*建立Pattern2*/

Pattern pattern2 =Pattern.compile(expression2);

/*将Pattern2 以参数传入Matcher2作Regular expression*/

Matcher matcher2= pattern2.matcher(inputStr); 

if(matcher.matches()||matcher2.matches()) 

isValid = true;

}

return isValid;

}

}

中,添加一个拨打电话的权限,否则当单击按钮时,会发生错误。

 运行结果:

可以进行后台两个电话的接打:

当拨打的电话含有英文的时候,会显示输入的电话格式不符:

二.自制发送短信程序---SmsManager PendingIntent对象

流程图:

运行结果:

        

发送短信界面                   送出成功界面

电话号码格式错误界面

发送短信的关键程序是通过SmsManager对象的sendTextMessage()方法来完成,其中sendTextMessage()方法需传入5个值,依次是收件人地址(String)、发送地址(String)、正文(String)、发送服务(PendingIntent)与送达服务(PendingIntent),其中收件人与正文是不可为Null的两个参数。

主程序:1.声明变量、定义对象

onCreat()中创建两个EditText控件与一个Button控件

2. 定义方法

1)设置onClickLinstener()让用户做出反应

·单击EditText时,同时清除内容

·单击Button时送出短信,并通过isPhoneNumberValid()iswithin70()这两个自定义的方法来检查收件人电话号码的正则表达式,以及短信正文的字数是否超过70个字符。

①格式正确无误,取得EditText控件的值,将输入内容当短信发送

关于try模块:

两个条件都检查通过的情况下,发送简讯  

       先建构一PendingIntent对象并使用getBroadcast()方法进行广播  

    将PendingIntent,电话,简讯文字等参数传入sendTextMessage()方法发送简讯

电话格式与简讯文字不符合条件时,使用Toast告知用户检查

(2)检查字符串是否为电话号码的方法,并回传true or false的判断值

关于可接受的电话模式:

可接受的电话格式有:  ^\\(? : 可以使用 "(" 作为开头 

   (\\d{2}):  紧接着两个数字

    \\)? : 可以使用")"接续 

   [- ]? :  在上述格式后可以使用具选择性的 "-"

   (\\d{4}) : 再紧接着四个数字 

   [- ]? : 可以使用具选择性的 "-" 接续 

   (\\d{4})$: 以四个数字结束 

小结:

本范例使用到的PendingIntent对象,具有下列的特性:当接收到PendingIntent对象时,会进行broadcast的动作,就如同使用Context.sendBroadcast()方法一样,这也就是为什么在SmsManager.sendTextMessage()方法中需要传入PendingIntent作为传送服务的参数之一。

有一个问题就是,虽然成功实现了发出短信,但是只是通过运行程序的模拟器实现的,并不知道短信是否真的有送出,收件人是否真的受到。不知该如何测试呢?        

 

下周计划:为我们前几周的试验做一下小结,并且进行一个九宫格的开发,我们会参照一些范例来做,并在这个的基础上,开发一些新的界面或者功能。

 

参考资料:

1.http://blog.csdn.net/chenzhp/archive/2009/10/25/4726910.aspx

2.CSDN社区-移动平台-Android

3.Android setContentView的应用

4. OnClickListener接口简介

5. Android基础教程()------- 参数的传递(Bundle

 http://archive.cnblogs.com/a/1959784/

阅读(728) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~