`
zsnlovewl
  • 浏览: 176334 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android 短信接受学习

阅读更多

来源:http://lyp2002924.iteye.com/blog/491718

接收短信也是比较方便的,主要是继承BroadcaseReceiver 类 ,覆盖onReceive 函数:

1:相关类:
android.content.BroadcastReceiver
android.telephony.gsm.SmsMessage;

2:example code.

public class MessageDemo extends BroadcastReceiver {
    private static final String strACT = "android.provider.Telephony.SMS_RECEIVED";

public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(strACT)) {
StringBuilder sb = new StringBuilder();
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get("pdus");
SmsMessage[] msg = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++) {
msg[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
}
for (SmsMessage currMsg : msg) {
sb.append("From:");
sb.append(currMsg.getDisplayOriginatingAddress());
sb.append("\nMessage:");
sb.append(currMsg.getDisplayMessageBody());
}
}
}

}
}
3: 相关的配置

修改AndroidManifest.xml,在Activity下添加receiver节点:
<receiver android:name="MessageDemo">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
随后在application下添加节点:
<uses-permission android:name="android.permission.SEND_SMS"></uses-permission>
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>

4:使用BroadReceiver的弊端
查看BroadReceiver sdk reference , 可以了解到所有的BroadReceiver对短信的接收是无顺序的状态 ,即使是使用了Ordered broadcasts对于同等优先级别的BroadReceiver ,也会产生无顺序的行为。
所以下面介绍另一种接收短信的行为,包括其中可以进行短信的删除。

5:从数据库端监听sms的收发
//如下 主要用于内部数据库改变,向外面的界面(Activity)做反应
class SMSHandler extends Handler
{
    public void handleMessage(Message msg)
    {
        //Handle message
    }
}

// 对收到短消息后,做出的处理,这里直接删除,并没有反应到界面,所以上面的handleMessage是空的。
class SMSObserver extends ContentObserver
{
    private Handle m_handle = null;

    public SMSObserver(Handle handle)
    {
        super(handle);
        m_handle = handle;
    }

    public void onChange(boolean bSelfChange)
    {
        super.onChange(bSelfChange);

        //Send message to Activity
        Message msg = new Message();
        msg.obj = "xxxxxxxxxx";
        m_handle.sendMessage(msg);

String strUriInbox = "content://sms/inbox";
Uri uriSms = Uri.parse(strUriInbox);  //If you want to access all SMS, just replace the uri string to "content://sms/"
Cursor c = mContext.getContentResolver().query(uriSms, null, null, null, null);
// delete all sms here when every new sms occures.
while (c.moveToNext())
{   
       //Read the contents of the SMS;
       for(int i; i < c.getColumnCount(); i++)
        {
            String strColumnName = c.getColumnName(i);
            String strColumnValue = c.getString(i);
        }


       //Delete the SMS
        String pid = c.getString(1);  //Get thread id;
       String uri = "content://sms/conversations/" + pid;
       mContext.getContentResolver().delete(Uri.parse(uri), null, null);       
   
}

         


    }
}

//把基本类功能性地应用起来
ContentResolver contentResolver = getContentResolver();// Context 环境下getContentResolver()
Handler handler = new SMSHandler();
ContentObserver m_SMSObserver = new SMSObserver(handler);
contentResolver.registerContentObserver(Uri.parse("content://sms/inbox"),true, m_SMSObserver);
//Register to observe SMS in outbox,we can observe SMS in other location by changing Uri string, such as inbox, sent, draft, outbox, etc.)

// some Available Uri string  for sms.
/* 
  String strUriInbox = "content://sms/inbox";//SMS_INBOX:1
  String strUriFailed = "content://sms/failed";//SMS_FAILED:2
  String strUriQueued = "content://sms/queued";//SMS_QUEUED:3
  String strUriSent = "content://sms/sent";//SMS_SENT:4
  String strUriDraft = "content://sms/draft";//SMS_DRAFT:5
  String strUriOutbox = "content://sms/outbox";//SMS_OUTBOX:6
  String strUriUndelivered = "content://sms/undelivered";//SMS_UNDELIVERED
  String strUriAll = "content://sms/all";//SMS_ALL
  String strUriConversations = "content://sms/conversations";//you can delete one conversation by thread_id
  String strUriAll = "content://sms"//you can delete one message by _id
*/

REMEBER: must request following permission
1) Read SMS
    <uses-permssion android:name="android.permission.READ_SMS" />
2) Delete/Modify/Send SMS
    <uses-permssion android:name="android.permission.WRITE_SMS" />
in AndroidManifest.xml

分享到:
评论

相关推荐

    android 短信demo

    "android短信demo"是一个示例项目,旨在帮助开发者理解如何在Android应用中实现短信功能。这个项目可以直接导入Eclipse IDE进行运行和学习。 在Android中,短信操作主要涉及以下几个核心知识点: 1. **权限声明**...

    Android代码-android模拟短信插入和接收.rar

    通过这个压缩包,开发者可以学习到如何在Android应用中实现短信和MMS的基本操作,这对于构建通信相关的应用或者自动化测试是非常有价值的。同时,源码分析和实践操作也是提高编程技能的重要步骤。

    android sms的发送以及接受

    通过查看源代码,我们可以学习如何将这些理论知识应用于实际的Android应用中,包括UI设计、事件处理、错误处理以及性能优化等。例如,查看发送短信时的用户界面设计,以及如何在接收到短信后更新UI或者执行其他业务...

    Android自动发送短信.zip

    它接受五个参数:电话号码、短信内容、发送消息的回调、成功时调用的发送消息完成的BroadcastReceiver以及失败时调用的BroadcastReceiver。例如: ```java SMSManager smsManager = SMSManager.getDefault(); ...

    Android Studio实现发短信功能

    在Android平台上,开发一个能够发送短信的应用程序是一个常见的需求。Android Studio作为官方推荐的集成开发环境,提供了便利的工具和API来实现这一功能。...通过不断学习和实践,你将在Android开发中变得更加熟练。

    基于android APP(电话、短信、电话薄)

    在Android平台上,开发一款集成了电话、短信以及电话薄功能的应用程序是一项常见的任务。这个APP的主要目标是提供用户与通信...通过对这些文件的分析和学习,可以深入理解Android系统如何实现电话、短信和电话薄功能。

    Android学习笔记.pdf

    包括环境搭建教程、创建模拟器、新建helloworld程序、电话拨号器、软件部署到模拟器、短信发送器、线性布局、相对布局、日志、activity、Android进程线程及优先级、Android UI线程阻塞及优化、广播接受者、Service...

    安卓手机发送短信最简源码Demo

    通过这个"安卓手机发送短信最简源码Demo",开发者可以学习如何在安卓应用中实现短信功能,但实际开发中还需要考虑用户体验、错误处理、权限管理等多个方面,确保功能的完整性和安全性。如果你对细节感兴趣,可以访问...

    Android安卓经典设计学习例程源代码-SendSMSSample.rar

    你可以通过`getDefault()`方法获取到它的实例,然后调用`sendTextMessage()`方法来发送短信,该方法接受电话号码、短信内容、发送状态回调的PendingIntent等参数。 4. **用户交互**:在实际应用中,通常需要创建一...

    发送和接受短信

    总的来说,这个压缩包中的类涵盖了Android短信服务的基本操作,是学习和理解短信通信机制的好起点。通过深入研究这两个类的源代码和注释,初学者不仅可以掌握短信服务的基础知识,还能了解到实际开发中的注意事项和...

    移动应用程序设计基础——点菜单列表实现2.0(实现短信接受以及服务与广播的使用).zip

    本教程将深入探讨移动应用程序设计的基础,特别是如何在Android Studio环境下实现点菜单列表,并结合短信接收、服务与广播的概念,这些都是Android应用开发中的关键组件。 首先,点菜单列表(通常称为ListView或...

    安卓短信源码

    这个方法接受电话号码、短信内容和回调接口作为参数。如果短信需要发送到多个号码,可以多次调用此方法。 4. **处理发送结果**:为了确保短信发送成功,我们需要实现`SmsManager.Default_sms_callback`接口,处理...

    Android应用程序设计

    在Android应用程序设计中,开发者需要掌握一系列技术和工具来创建功能丰富的移动应用。本主题主要聚焦于Android系统的架构、开发环境的...在这个过程中,不断更新的Android API和最佳实践也需要开发者持续关注和学习。

    在Android中发送短信并接收反馈

    此方法接受四个参数:目标电话号码、发送短信时使用的默认短信应用的URI、短信内容以及一个PendingIntent,用于处理发送操作的结果。 ```java SmsManager smsManager = SmsManager.getDefault(); smsManager....

    sms.zip_android_sms

    在发送短信方面,`SmsManager`的`sendTextMessage()`方法是最常用的功能,它接受电话号码、短信内容以及发送状态回调的BroadcastReceiver作为参数。发送短信需要权限,因此在AndroidManifest.xml中需要添加`...

    Android开发视频下载链接地址

    21. **21-模拟器接受短信和电话以及通知提醒的使用**: 教导如何在Android模拟器中模拟接收短信、电话和通知,以便于测试应用的相应功能。 22. **22-使用广播接收器来显示用户退出**: 介绍BroadcastReceiver的概念,...

    短信管理器

    描述中的“发送短信,接受短信,查看通讯录,查看短信”这些都是短信管理器的基本功能。发送短信是指通过输入接收方的电话号码和短信内容,然后通过移动网络进行发送。接收短信则是系统自动接收到的来自其他手机或...

    跨平台的Android Message应用程序.zip

    标题中的“跨平台的Android Message应用程序”指的是将原生的Android Messages应用移植到桌面环境,让用户可以在电脑上方便地收发短信,而不仅仅局限于手机。这个项目的目标是提供一个类似于官方应用的功能,同时...

    android6.0权限管理封装demo

    通过这个“android6.0权限管理封装demo”,开发者可以学习如何创建一个通用的权限管理类,简化权限处理流程,使代码更整洁,同时提高用户体验。理解并正确使用这些知识点对于开发适应Android 6.0及以上系统的应用至...

Global site tag (gtag.js) - Google Analytics