Android小项目之--电话与短信服务

在 Android 上实现电话与短信服务相信己经是老生常谈了,有些人或许认为没有必要拿出来谈,网上一抓一大把。确实是,网上现在有很多调用 Android 电话与短信服务的例子,今天特地拿出来谈,只是因为有一些小技巧还是有拿出来谈的必要的。

  什麽是Intent使用 Intent之前我们有必要先认识一下 Intent。

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

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

  解析 IntentIntent是一种在不同组件之间传递的请求消息,是应用程序发出的请求和意图。作为一个完整的消息传递机制, 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. import android.app.Activity;
  2. import android.content.Intent;
  3. import android.net.Uri;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.view.View.OnClickListener;
  7. import android.widget.*;
  8. public class phoneAndsmsAcitivity extends Activity {
  9.     private Button myButton;
  10.     private EditText myEditText;
  11.     /** Called when the activity is first created. */
  12.     @Override
  13.     public void onCreate(Bundle savedInstanceState) {
  14.         super.onCreate(savedInstanceState);
  15.         setContentView(R.layout.main);
  16.         myButton=(Button)findViewById(R.id.button);
  17.         myEditText=(EditText)findViewById(R.id.mobile);
  18.         
  19.         myButton.setOnClickListener(new OnClickListener() {
  20.             
  21.             @Override
  22.             public void onClick(View v) {
  23.                 // TODO Auto-generated method stub
  24.                 if(myEditText.getText().length()>0)
  25.                 {
  26.                     Intent myIntent=new Intent(Intent.ACTION_CALL,Uri.parse
  27.                             ("tel:"+myEditText.getText().toString()));
  28.                 phoneAndsmsAcitivity.this.startActivity(myIntent);
  29.                 }
  30.             }
  31.         });
  32.     }
  33. }
复制代码
  运行效果:
 

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

  2. import java.util.List;

  3. import android.app.Activity;
  4. import android.app.PendingIntent;
  5. import android.content.Intent;
  6. import android.os.Bundle;
  7. import android.telephony.gsm.SmsManager; 
  8. import android.view.View;
  9. import android.view.View.OnClickListener;
  10. import android.widget.Button;
  11. import android.widget.EditText;
  12. import android.widget.Toast;

  13. @SuppressWarnings("deprecation")
  14. public class smsAcitivity extends Activity {
  15.     private Button myButton;
  16.     private EditText myEditText;
  17.     private EditText EditText2;
  18.     @Override
  19.     protected void onCreate(Bundle savedInstanceState) {
  20.         // TODO Auto-generated method stub
  21.         super.onCreate(savedInstanceState);
  22.         setContentView(R.layout.sms);
  23.         
  24.         myButton=(Button)findViewById(R.id.button);
  25.         myEditText=(EditText)findViewById(R.id.mobile);
  26.         EditText2=(EditText)findViewById(R.id.content);
  27.         
  28.         myButton.setOnClickListener(new OnClickListener() {
  29.              
  30.             @Override
  31.             public void onClick(View v) {
  32.                 // TODO Auto-generated method stub
  33.                  String mobile=myEditText.getText().toString();
  34.                  String content=EditText2.getText().toString();
  35.                 SmsManager sms=SmsManager.getDefault();
  36.                 PendingIntent sentintent =PendingIntent.getBroadcast(smsAcitivity.this,
  37.                         0, new Intent(), 0);
  38.                 try {
  39.                     if(content.length()>70)
  40.                     {
  41.                         List<String> msgs=sms.divideMessage(content);
  42.                         for(String msg:msgs)
  43.                         {
  44.                             sms.sendTextMessage(mobile, null, msg, sentintent, null); 
  45.                         }
  46.                     }
  47.                     else
  48.                     {
  49.                     
  50.                         sms.sendTextMessage(mobile, null, content, sentintent, null);
  51.                     }
  52.                 } catch (Exception e) {
  53.                     // TODO: handle exception
  54.                     e.printStackTrace();
  55.                 }
  56.                 Toast.makeText(smsAcitivity.this, "短信發送成功", 1000).show();
  57.             }
  58.         });
  59.         
  60.     }
  61. }
复制代码
  关於一个测试的小技巧:发送短信的时候我们需要两台机子可以测试,这时候我们要同时启动两个模拟器己达到发送与接收的效果,这时候你可以如下操作:开始 --cmd--emulator -data foo 依此在 dos 命令中输入,即可重新打开一个模拟器,下面是收送测试效果图:
 
  疑问:

  不知道有没有细心的朋友发现。好像Google API 中不建议使用 smsManager 这个类来发送短信,如果是不建议那是否有另外的替代方案?如果知道的园友不妨告知一声。。非常感激。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值