`
tansitongba
  • 浏览: 503725 次
文章分类
社区版块
存档分类
最新评论

MonoDroid学习笔记(十)—— 使用MonoDroid打电话,发短信,发邮件。

 
阅读更多

这次我们来探讨一下MonoDroid中对AndroidManifest.xml文件的使用,这里以手机中较为常用的打电话,发短信及发邮件作为范例来进行说明。界面将如下所示:

布局文件如下:

“打电话”是每个手机必备的功能,虽然在Android平台上可以通过程序,进行各种让人目眩神迷的应用,但拨打电话这项最基本的功能,依然是每个Android工程师的必修课程。

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

为了检查用户输入是否正确的电话格式,Activity1中增加了一个方法IsPhoneNoValid。

接下来就是关键了,刚才已经跟大家说过,要拨打电话,必须要在AndroidManifest.xml中添加uses-permission,那么这个AndroidManifest.xml是个什么东西?如果我们是在Eclipse里用Java来开发Android项目的话,AndroidManifest.xml是必不可少的,它里头包含这个Android应用程序具有哪些Activity,Service或者Receiver,你可以将它理解为我们.net里winform的app.config,asp.net里的web.config,它是应用程序的一个配置文件。MonoDroid为了简化我们手动修改AndroidManifest.xml文件的工作,将一些常用的xml元素封装成了.net里的Attribute类,在部署程序时,一个叫做mandroid.exe的工具会自动生成AndroidManifest.xml,并将这些Attribute生成相应的xml元素。例如,我们的Activity1类的上部不是有个[Activity(Label = "MonoDroidTest", MainLauncher = true)]标签吗?只要打上了这个标签,那么在部署程序时,mandroid.exe就会在AndroidManifest.xml中生成如下节点:

因此,一些常用的xml元素,例如Activity,Application,Service等都可以通过在你的Activity中加上相应的Attribute来实现。但是像这次的uses-permission,MonoDroid并没有提供相应的Attribute,我们只能通过手动添加AndroidManifest.xml文件并自己加上这些元素了。

点击vs2010的菜单”项目“,选择最后一项,即你的项目的属性,在项目属性窗口中点击Android Manifest,如果你没有手动添加过AndroidManifest.xml文件,那么应该如下图所示:

它会提示你没有找到AndroidManifest.xml,点击以新增。我们就点击一下这个链接,就会显示如下界面,并会在Properties目录下增加了一个AndroidManifest.xml文件。

Application name是你的程序名称,Package name是安装包名称,可以不填,Version number是程序的版本号,必须填数字, Version name是版本的名称,Minimum Android version代表程序支持的最低Android版本,我这里选择的1.6,Install location不知道干吗用的,但就是这个东西造成我部署程序时产生了签名的错误。Required permissions里选择CALL_PHONE表示需要打电话的权限,由于我们接下来还要发短信,所以可以把SEND_SMS也勾选上。

我们来打开AndroidManifest.xml,里面已经为我们添加了一些东西,就是我们刚才在属性窗口里填的东西,但这样还是不完整的,因为只要我们手动添加了AndroidManifest.xml文件,mandroid.exe就不会为我们自动生成该文件,也就是说我们在Activity中加的一切Attribute将变为无效,需要我们来补充完整:

注意如果你和我一样Minimum Android version里选的是1.6,那么在AndroidManifest.xml文件里一定要把android:installLocation="internalOnly"这个属性给去掉,我就是没去掉所以每次部署的时候才会出错,经与官网的技术人员讨论,应该是他们的一个bug。

好了,生成并部署程序,然后在第一个输入框里输入电话号码,点击,按钮,我们可以通过程序来进行打电话了~~~

大家也可以使用”Android.Action.Dialer”的方式,调用虚拟键盘来拨打电话,只要在自定义Intent时将Action.CALL改为Action.DIAL即可。

除了打电话,另一个常用的功能就是发短信了。发短信的使用与打电话基本类似,关键是要使用Android.Telephony.SmsManager类来实现。如果刚才没有在AndroidManifest.xml中添加发短信的权限的话,这里记得添加上。程序代码如下:

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

下面我们来通过自定义Intent,并使用Android.Content.Intent.ActionSend参数来实现通过手机发送电子邮件。实际上,收发EMail的过程是通过Android内置的Gmail程序,而非直接使用SMTP的协议。由于目前的模拟器并未内置Gmail Client端程序,也因此,发送EMail的程序在送出数据后,模拟器上会发生“No application can perform this action",这是正常的。我在我的手机上运行,是可以正常发送的。

事实上,发短信和发邮件并不局限于以上方式,大家可以根据API文档试验一下其它的方式,我在这里就不详细说明了。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics