在 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()方法,即可完成,代码如下:

import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.*; public class phoneAndsmsAcitivity extends Activity {     private Button myButton;     private EditText myEditText;     /** Called when the activity is first created. */     @Override    public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);        setContentView(R.layout.main);         myButton=(Button)findViewById(R.id.button);         myEditText=(EditText)findViewById(R.id.mobile);         myButton.setOnClickListener(new OnClickListener() {             @Override             public void onClick(View v) {                 // TODO Auto-generated method stub                 if(myEditText.getText().length()>0)                 {                     Intent myIntent=new Intent(Intent.ACTION_CALL,Uri.parse                            ("tel:"+myEditText.getText().toString()));                 phoneAndsmsAcitivity.this.startActivity(myIntent);                 }             }         });     }} 

运行效果:

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

简单的发送短信代码:

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();             }         });     } } 

关於一个测试的小技巧:发送短信的时候我们需要两台机子可以测试,这时候我们要同时启动两个模拟器己达到发送与接收的效果,这时候你可以如下操作:开始 --cmd--emulator -data foo 依此在 dos 命令中输入,即可重新打开一个模拟器,下面是收送测试效果图:

源码下载

更多相关文章

  1. Android(安卓)Binder机制(使用)
  2. Android(安卓)UI 优化 使用和 标签
  3. Android反编译工具jadx的使用
  4. android studio项目转ADT的辛酸历程
  5. [Android] 为Android安装BusyBox —— 完整的bash shell
  6. Android(安卓)style & Theme 再探析(一)——你真的懂Style和Them
  7. 箭头函数的基础使用
  8. NPM 和webpack 的基础使用
  9. Python list sort方法的具体使用

随机推荐

  1. android 多点触控
  2. Android -- Android JUint 与 Sqlite
  3. Android系统调试(01)日志分析基础流程
  4. Android 主流图片库Picasso Glide Fresco
  5. android listview custom style 自定义样
  6. Android执行shell命令
  7. scrollview 滚动条
  8. Android 5.x特性概览二
  9. 解决Android Studio和Android SDK Manage
  10. android OpenGL ES2.0编程初学