Android API开发之SMS短信服务处理和获取联系人的方法

本文实例讲述了Android API开发之SMS短信服务处理和获取联系人的方法。分享给大家供大家参考,具体如下:

Android API支持开发可以发送和接收SMS消息的应用程序。目前我们开发过程中使用的Android模拟器还不支持发送SMS,但它可以接收SMS。现在我们来探索一下Android对SMS的支持,我们将会构建一个小小的应用程序来监听移动设备(或模拟器)上接收到的SMS消息,并将它显示出来。
我们来定义一个Intent接收器来处理SMS接收事件:

package com.wissen.sms.receiver;
public class SMSReceiver extends BroadcastReceiver {
  @Override
  public void onReceive(Context context, Intent intent) {
    // TODO
  }
}
package com.wissen.sms.receiver;
public class SMSReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO
}
}

我们需要对这个Intent接收器进行配置以使它能获取SMS接收事件, android.provider.Telephony.SMS_RECEIVED 这个事件状态表示了SMS已被接收。我们可以在AndroidManifest.xml中进行如下配置:

<receiver android:name=".receiver.SMSReceiver" android:enabled="true">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
<receiver android:name=".receiver.SMSReceiver" android:enabled="true">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>

为了能让我们的应用能接收SMS,我们得先进行权限的指定,可以在AndroidManifest.xml中如下配置:

<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>

现在,我们的Intent接收器就可以在Android设备接收到SMS的时候被调用了,余下的事情就是去获取和显示接收到的SMS消息文本了:

public void onReceive(Context context, Intent intent) {
    Bundle bundle = intent.getExtras();
    Object messages[] = (Object[]) bundle.get("pdus");
    SmsMessage smsMessage[] = new SmsMessage[messages.length];
    for (int n = 0; n < messages.length; n++) {
        smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]);
    }
   // show first message
   Toast toast = Toast.makeText(context, "Received SMS: " + smsMessage[0].getMessageBody(),        Toast.LENGTH_LONG);
   toast.show();
}
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
Object messages[] = (Object[]) bundle.get("pdus");
SmsMessage smsMessage[] = new SmsMessage[messages.length];
for (int n = 0; n < messages.length; n++) {
smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]);
}
// show first message
Toast toast = Toast.makeText(context, "Received SMS: " + smsMessage[0].getMessageBody(),        Toast.LENGTH_LONG);
toast.show();
}

Android设备接收到的SMS是以pdu形式的(protocol description unit)。android.telephony.gsm.SmsMessage这个类可以储存SMS的相关信息,我们也可以从接收到的pdu中创建新的SmsMessage实例,Toast界面组件可以以系统通知的形式来显示接收到的SMS消息文本。

运行程序:

现在让我们来在模拟器中运行这个应用程序,以及发送SMS消息到这个模拟器上。我们可以在eclipse的Android插件所提供的DDMS视图(Dalvik Debug Monitor Service)中发送SMS消息到模拟器上(在'Emulator Control'面板中;另外需要指定电话电话号码,不过可以是任意的)

发出广播Intent的方法:

public static final String MUSIC_ACTION="com.mythlink.MUSIC";
Intent intent=new Intent();
intent.setAction(MUSIC_ACTION);
intent.putExtra("music_path", songPath);
this.sendBroadcast(intent);
public static final String MUSIC_ACTION="com.mythlink.MUSIC";
Intent intent=new Intent();
intent.setAction(MUSIC_ACTION);
intent.putExtra("music_path", songPath);
this.sendBroadcast(intent);

需要再写一个广播接收器:

public class MusicReceiver extends BroadcastReceiver {
 @Override
 public void onReceive(Context context, Intent intent) {
 Bundle bundle=intent.getExtras();
 String music_path=bundle.getString("music_path");
 Toast toast=Toast.makeText(context, "Playing music:"+music_path, Toast.LENGTH_LONG);
 toast.show();
 }
}
public class MusicReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle=intent.getExtras();
String music_path=bundle.getString("music_path");
Toast toast=Toast.makeText(context, "Playing music:"+music_path, Toast.LENGTH_LONG);
toast.show();
}
}

获取联系人信息:

public class ContactsList extends ListActivity {
 private ListAdapter mAdapter;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 Cursor c=this.getContentResolver().query(Contacts.People.CONTENT_URI, null, null, null, null);
 this.startManagingCursor(c);
 String[] columns=new String[]{Contacts.People.NAME};
 int[] names=new int[]{R.id.song};////////////////
 mAdapter = new SimpleCursorAdapter(this, R.layout.song_item, c, columns, names);
 this.setListAdapter(mAdapter);
 }
 @Override
 protected void onListItemClick(ListView l, View v, int position, long id) {
 super.onListItemClick(l, v, position, id);
 Intent i=new Intent(Intent.ACTION_CALL);
 Cursor c = (Cursor) mAdapter.getItem(position);
   long phoneID = c.getLong(c.getColumnIndex(Contacts.People.PRIMARY_PHONE_ID));
   i.setData(ContentUris.withAppendedId(Contacts.Phones.CONTENT_URI, phoneID));
   this.startActivity(i);
 }
}
public class ContactsList extends ListActivity {
private ListAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Cursor c=this.getContentResolver().query(Contacts.People.CONTENT_URI, null, null, null, null);
this.startManagingCursor(c);
String[] columns=new String[]{Contacts.People.NAME};
int[] names=new int[]{R.id.song};////////////////
mAdapter = new SimpleCursorAdapter(this, R.layout.song_item, c, columns, names);
this.setListAdapter(mAdapter);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Intent i=new Intent(Intent.ACTION_CALL);
Cursor c = (Cursor) mAdapter.getItem(position);
long phoneID = c.getLong(c.getColumnIndex(Contacts.People.PRIMARY_PHONE_ID));
i.setData(ContentUris.withAppendedId(Contacts.Phones.CONTENT_URI, phoneID));
this.startActivity(i);
}
}

在Androidmanifest.xml中加入:

<uses-permission android:name="android.permission.READ_CONTACTS"/>
<activity android:name=".ContactsList"
     android:label="@string/app_name">
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
</activity>

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android短信与电话操作技巧汇总》、《Android文件操作技巧汇总》、《Android操作SQLite数据库技巧总结》、《Android操作json格式数据技巧总结》、《Android数据库操作技巧总结》、《Android编程之activity操作技巧总结》、《Android编程开发之SD卡操作方法汇总》、《Android开发入门与进阶教程》、《Android资源操作技巧汇总》、《Android视图View技巧总结》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。

(0)

相关推荐

  • Android实现获取联系人电话号码功能

    本篇文档主要记录一下获取联系人的电话号码的一种方式. 1.选择联系人 ............ //构造一个隐式的Intent,拉起联系人界面 final Intent pickIntent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); mSuspectButton = (Button)v.findViewById(R.id.crime_suspect); mSuspectButton.setOn

  • Android获取联系人头像的方法

    本文实例讲述了Android获取联系人头像的方法.分享给大家供大家参考,具体如下: public byte[] getPhoto(String people_id) { String photo_id = null; String selection1 = ContactsContract.Contacts._ID + " = " + people_id; Cursor cur1 = getContentResolver().query( ContactsContract.Contac

  • Android编程基于Contacts读取联系人的方法(附demo源码)

    本文实例讲述了Android编程基于Contacts读取联系人的方法.分享给大家供大家参考,具体如下: Android Contacts简介: 这里介绍安卓通讯录数据库.包括Android使用Contacts访问SQLite的基本知识,并了解Android SQLite和Contacts的更多信息.谷歌改变了从版本1到版本2的Contacts数据库.下面加以简单介绍. Contacts 读取代码: package com.homer.phone; import java.util.ArrayLi

  • Android手机卫士之获取联系人信息显示与回显

    前面的文章已经实现相关的布局,本文接着进行相关的功能实现 读取系统联系人 当点击"选择联系人"按钮后,弹出联系人列表,读取系统联系人分如下几个步骤: 系统联系人提供了一个内容提供者,通过内容解析器,匹配Url地址 1.内容解析器 2.Url地址,查看系统联系人数据库,内容提供者源码 先看api文档的清单文件,后看java类(联系人数据库有多张表) contents://com.android.contacts/表名 3.系统联系人数据库中核心表的表结构 raw_contacts 联系人

  • Android控件ListView用法(读取联系人示例代码)

    示例代码: 这是一个读取联系人的代码: 复制代码 代码如下: package com.ui.domain; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.database.Cursor; import android.database.DataSetObserver; import android.graphics.Color; import andro

  • Android获取联系人姓名和电话代码

    在开发中往往有要获取联系人列表的功能,但是这次却不是获取联系人列表,而是在联系人列表点击单个联系人,获取单个联系人的姓名和电话,并设置在指定的输入框内,方便用户的使用:以下是实现的代码: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:la

  • android获取联系人示例分享

    复制代码 代码如下: package com.homer.phone; import java.util.ArrayList;import java.util.HashMap; import android.app.Activity;import android.database.Cursor;import android.os.Bundle;import android.provider.ContactsContract;import android.provider.ContactsCont

  • Android使用Intent获取联系人信息

    Intent的使用 趁着工作之余,看了一下intent,发现好多知识都已经忘记了,然后自己有重新复习了一遍,在这里做一下笔记,以下为自己总结的几点: intent是一个好东西 他可以启动Activity还可以回调数据 调用各种数据,联系人等等 进程之间可以接收同一个intent 三大组件的桥梁 解释一下为什么是三大组件吧,都知道四大组件分别是Activity,Service,BroadCastReceiver,ContentProvider.Intent是Activity,Service,Bro

  • 浅析Android手机卫士读取联系人

    推荐阅读: 浅析Android手机卫士sim卡绑定 深入浅析Android手机卫士保存密码时进行md5加密 详解Android 手机卫士设置向导页面 浅析Android手机卫士关闭自动更新 浅析Android手机卫士自定义控件的属性 获取ContentResolver内容解析器对象,通过getContentResolver()方法 调用ContentResolver对象的query()方法,得到raw_contacts表里面的数据,得到Cursor对象 参数:Uri对象,字段String数组 获

  • Android API开发之SMS短信服务处理和获取联系人的方法

    本文实例讲述了Android API开发之SMS短信服务处理和获取联系人的方法.分享给大家供大家参考,具体如下: Android API支持开发可以发送和接收SMS消息的应用程序.目前我们开发过程中使用的Android模拟器还不支持发送SMS,但它可以接收SMS.现在我们来探索一下Android对SMS的支持,我们将会构建一个小小的应用程序来监听移动设备(或模拟器)上接收到的SMS消息,并将它显示出来. 我们来定义一个Intent接收器来处理SMS接收事件: package com.wissen

  • Android编程之SMS读取短信并保存到SQLite的方法

    本文实例讲述了Android编程之SMS读取短信并保存到SQLite的方法.分享给大家供大家参考,具体如下: Android 之 SMS 短信在Android系统中是保存在SQLite数据库中的,但不让其它程序访问(Android系统的安全机制) 现在我们在读取手机内的SMS短信,先保存在我们自己定义的SQLite数据库中,然后读取SQLite数据库提取短信,并显示 SMS短信SQLite存取代码: package com.homer.sms; import java.sql.Date; imp

  • Android编程开发之NotiFication用法详解

    本文实例讲述了Android编程开发之NotiFication用法.分享给大家供大家参考,具体如下: notification就是通知的意思,安卓中指通知栏,一般用在电话,短信,邮件,闹钟铃声,在手机的状态栏上就会出现一个小图标,提示用户处理这个快讯,这时手从上方滑动状态栏就可以展开并处理这个快讯. 在帮助文档中,是这么说的, notification类表示一个持久的通知,将提交给用户使用NotificationManager.已添加的Notification.Builder,使其更容易构建通知

  • Android编程实现拦截短信并屏蔽系统Notification的方法

    本文实例讲述了Android编程实现拦截短信并屏蔽系统Notification的方法.分享给大家供大家参考,具体如下: 拦截短信有几个关键点: 1.android接收短信时是以广播的方式 2.程序只要在自己的Manifest.xml里加有"接收"SMS的权限 <uses-permission android:name="android.permission.RECEIVE_SMS"> </uses-permission> <uses-p

  • 阿里云PHP SMS短信服务验证码发送方法

    开通SMS服务 首先去这个网站开通阿里云的SMS短信服务:https://www.aliyun.com/product/sms?spm=5176.8142029.388261.295.vU5T5g 创建签名.模板 要使用短信服务器需要先创建签名和模板,并提交给阿里云审核通过才可以正常使用短信服务. 创建签名 创建签名的时候注意一下签名名称,其他的话就不累赘了. 记住签名名称 现在请记住你创建的签名名称,一会在代码中需要使用. 创建模板 创建模板也很简单,阿里云已经把要如何填写写的很清楚了. 查看

  • Java通过SMS短信平台实现发短信功能 含多语言

    Java通过SMS短信平台实现发短信功能 在项目中使用过发短信的功能,但那个由于公司内部的限制很麻烦,今天在网上找到一个简单的,闲来无事就把它记录如下: 本程序是通过使用中国网建提供的SMS短信平台实现的(该平台目前为注册用户提供5条免费短信,3条免费彩信,这足够用于我们测试用了.在使用前需要注册,注册地址为http://sms.webchinese.cn/reg.shtml),下面是程序源码: /** * @Author dengsilinming * @Date 2012-9-18 * */

  • Android程序开发之WebView使用总结

    前言: 今天修改项目中一个有关WebView使用的bug,激起了我总结WebView的动机,今天抽空做个总结. 使用场景: 1.)添加权限 <uses-permission android:name="android.permission.INTERNET" /> 2.)布局文件 <WebView android:id="@+id/webView" android:layout_width="match_parent" andr

  • Java实现SMS短信通发送手机验证码案例讲解

    注册网建短信通账号 链接:http://sms.webchinese.cn/ 设置短信签名 注意不要乱写别的公司等,会被视为诈骗信息 设置短信密钥,发送时代替密码 Java方式实现 导入依赖 commons-httpclient-3.1.jar 编写SmsUtil工具类 import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.NameValuePair; import org.ap

  • android应用开发之spinner控件的简单使用

    Android的控件有很多种,其中就有一个Spinner的控件,这个控件其实就是一个下拉显示列表.Spinner是位于 android.widget包下的,每次只显示用户选中的元素,当用户再次点击时,会弹出选择列表供用户选择,而选择列表中的元素同样来自适配器.Spinner是View类的一个子类. 先看spinner的效果图: 代码: MainActivity package com.mecury.spinnertest; import java.util.ArrayList; import a

  • Android开发中通过手机号+短信验证码登录的实例代码

    首先,需要一个电话号码,目前很多账户都是将账户名设置成手机号,然后点击按钮获取手机验证码. 其次,你需要后台给你手机短信的验证接口,各个公司用的不一样,这个身为前端,不需要你来考虑,你只要让你后台给你写好接口,你直接调用就好了. activity_login.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.andr

随机推荐