Android 手机应用开发经验 之电话与短信服务

首届 Google 暑期大学生博客分享大赛——2010 Andriod

自从Google发布Android手机操作系统以来,各种各样的Android应用开发很多,其中,电话与短信服务相信已经是老生常谈了,有些人认为没有必要拿出来谈,网上资料一大堆。确实是,网上有很多调用Android电话与短信服务的例子,今天,就特地拿出来谈,只是因为有一些小技巧还是有拿出来谈的必要。

Intent 介绍

   首先,我们来认识一下IntentIntent是一种运行时绑定(runtime binding)机制,它能在程序运行的过程中连接两个不同的组件。通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容选择适合的组件来请求。比如本例中使用的打电话功能,那么这个Acitivity只需要发出Intent.ACTION_CALL 请求给Android,剩下只要交给Android来处理即可。

Intent的主要组成部分

     Intent对象抽象地描述了要执行的操作,其描述的基本内容可以分为组件名称、Action(动作)Data(数据)Category(类别)Extra(附件信息)Flag(标志位)6个部分。具体的使用部分请参考相关文档,这里不做介绍。

解析Intent

Intent是一种在不同组件之间传递的请求消息,是应用程序发出的请求和意图。作为一个完整的消息传递机制,Intent不仅需要发送端,还需要接收端。那么Intent如何解析Intent的请求内容,并选择合适的组件响应Intent请求呢?本文就会告诉大家,请继续往下看。

Intent激活程序---电话与短信

   本文中在使用Intent打电话程序中,Intent的行为时ACTION_DIAL,同时在Intent中传送被呼叫人的电话号码。

拨打电话的关键有两个方面,首先,要在 AndroidManifest 中添加 uses-permission(即为程序分配使用权限),并声明android:name="android.permission.CALL_PHONE"权限。由于打电话是属于手机的底层服务,与用户隐私及通话费用等话题息息相关,因此,必须取得相关权限。其次,通过自定义Intent对象,带入“ACTION_CALL”这个关键动作(Action),以及通过Uri,parse()的方法将用户输入电话号码(Data)带入,最后调用startActivity()方法,即可完成。打电话代码如下:

 

 

 

运行的效果如下:

 

1

短信不但是任何一款手机不可缺少的应用之一,而且是几乎手机使用频率最高的应用之一。在Android中自带有一个发短信的类SmsManager,利用这个类,我门可以完成手机的短信发送与接收工作,其中sentTextMessage() 方法需要传入五个值,依次是收件人地址(String)、发送人地址(String)、正文内容(String)、发送服务(PendingIntent)、送达服务(PendingIntent),其中收件人地址与正文内容是不能为NULL的参数。跟打电话一样,涉及到与金钱有关的必须在配置文件分配权限,权限代码如下:<uses-permission android:name="android.permission.SEND_SMS"/>。简单的发送短信代码:

package com.terry;

 

import java.util.List;

 

import android.app.Activity;

import android.app.PendingIntent;

import android.content.Intent;

import android.os.Bundle;

import android.telephony.gsm.SmsManager;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

import android.widget.Toast;

 

@SuppressWarnings("deprecation")

public class smsAcitivity extends Activity {

    private Button myButton;

    private EditText myEditText;

    private EditText EditText2;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

       // TODO Auto-generated method stub

       super.onCreate(savedInstanceState);

       setContentView(R.layout.sms);

      

       myButton=(Button)findViewById(R.id.button);

       myEditText=(EditText)findViewById(R.id.mobile);

       EditText2=(EditText)findViewById(R.id.content);

      

       myButton.setOnClickListener(new OnClickListener() {

            

           @Override

           public void onClick(View v) {

              // TODO Auto-generated method stub

               String mobile=myEditText.getText().toString();

               String content=EditText2.getText().toString();

              SmsManager sms=SmsManager.getDefault();

              PendingIntent sentintent =PendingIntent.getBroadcast(smsAcitivity.this,

                     0, new Intent(), 0);

              try {

                  if(content.length()>70)

                  {

                     List<String> msgs=sms.divideMessage(content);

                     for(String msg:msgs)

                     {

                         sms.sendTextMessage(mobile, null, msg, sentintent, null);

                     }

                  }

                  else

                  {

                 

                     sms.sendTextMessage(mobile, null, content, sentintent, null);

                  }

              } catch (Exception e) {

                  // TODO: handle exception

                  e.printStackTrace();

              }

              Toast.makeText(smsAcitivity.this, "短信发送成功", 1000).show();

           }

       });

      

    }

}

这里有一个关于测试的小技巧:发送短信的时候我们需要两台机子可以测试,这时我们要同时启动两个模拟器已达到发送与接收的效果,可是,eclispe中只能运行一个模拟器,这个问题困扰我好长时间,在百度和google查找好多资料,最后,终于让我找到了一个办法:那就是:开始 – cmd –emulator – data foo 依次在dos命令中输入,即可重新打开另一个模拟器,下面就是测试效果图:

 

通过这篇文章,可以让其他开发者学到启动两个模拟器的方法,帮助其他开发者以后可以不为这个问题所卡住。还有一个疑问:不知道有没有细心地朋友发现。好像Google API中不建议使用smsManager这个类来发送短信息,我想是否可以另外有替代的方案?希望知道的告诉我一声。非常感谢。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值