首先,由于BroadReceiver是Android组件之一,所以需要先声明才能使用,声明的方法如下:
<!-- 建立receiver聆聽系統廣播訊息 -->
<receiver android:name="EX06_01_SMSreceiver">
<!-- 設定要捕捉的訊息名稱為provider中Telephony.SMS_RECEIVED -->
<intent-filter>
<action
android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
接着,我们看下实现本实例的截图:
1.程序开始运行时

2.当程序收到短信的时候

下面给出实现本实例的代码:
1.继承自BroadReceiver的类对象
//这个类实现的是处理操作系统的事件,它处于一直监听的状态,知道操作系统有事件发生时才会有所响应
/* 自定义继承自BroadcastReceiver类,监听系统服务广播的信息 */
public class EX06_01_SMSreceiver extends BroadcastReceiver
{
/*声明静态字符串,并使用android.provider.Telephony.SMS_RECEIVED作为Action为短信的依据*/
private static final String mACTION = "android.provider.Telephony.SMS_RECEIVED";
/*
* 实现广播的监听反应必须要重载的函数
* 这个函数有一个重要的参数Intent,它是系统或用户发送的Intent变量
* @see android.content.BroadcastReceiver#onReceive(android.content.Context, android.content.Intent)
*/
@Override
public void onReceive(Context context, Intent intent)
{
// TODO Auto-generated method stub
/* 判断传来Intent是否为短信
* 需要在过滤器中设置
* */
if (intent.getAction().equals(mACTION))
{
/*建构一字符串集集合变量sb*/
StringBuilder sb = new StringBuilder();
/*接收由Intent传来的数据*/
Bundle bundle = intent.getExtras();
/*判断Intent是有资料*/
if (bundle != null)
{
Set<String> keysSet=bundle.keySet();
for(String keyString:keysSet){
Log.d("key", keyString);
}
/* pdus为 android内建短信参数 identifier
* 透过bundle.get("")并传一个包含pdus的对象*/
Object[] myOBJpdus = (Object[]) bundle.get("pdus");
/*建构短信对象array,并依据收到的对象长度来建立array的大小*/
SmsMessage[] messages = new SmsMessage[myOBJpdus.length];
for (int i = 0; i<myOBJpdus.length; i++)
{
messages[i] = SmsMessage.createFromPdu ((byte[]) myOBJpdus[i]);
}
/* 将送来的短信合并自定义信息于StringBuilder当中 */
for (SmsMessage currentMessage : messages)
{
sb.append("接收到来告:\n");
/* 来讯者的电话号码 */
sb.append(currentMessage.getDisplayOriginatingAddress());
sb.append("\n------传来的短信------\n");
/* 取得传来讯息的BODY */
sb.append(currentMessage.getDisplayMessageBody());
}
}
/* 北Notification(Toase)显示短信信息 */
Toast.makeText(context, sb.toString(), Toast.LENGTH_LONG).show();
/* 返并加Activity */
Intent i = new Intent(context, EX06_01.class);
Bundle bundle2=new Bundle();
bundle2.putString("SMS", sb.toString());
i.putExtra("SMSS", bundle2);
/*设定让加Activity以一个新的task来执行*/
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
}
说明:由于BroadReceiver不是一旦单独的进程,且不是一个单独的线程,所以可以对UI界面进行更新。
2.主程序代码:
public class EX06_01 extends Activity
{
private TextView mTextView1;
private TextView textView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/*透过findViewById建构巳建立TextView对象*/
textView=(TextView)findViewById(R.id.myTextView2);
mTextView1 = (TextView) findViewById(R.id.myTextView1);
mTextView1.setText("等待接收短信...");
Bundle bundle=getIntent().getBundleExtra("SMSS");
//初始时并没有短信的内容(因为没有发送),若没有判断会造成空指针异常
if(bundle!=null){
String smsString=bundle.getString("SMS");
textView.setText(smsString);
}
}
}
3.AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="irdc.EX06_01"
android:versionCode="1"
android:versionName="1.0.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".EX06_01"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- 建立receiver聆聽系統廣播訊息 -->
<receiver android:name="EX06_01_SMSreceiver">
<!-- 設定要捕捉的訊息名稱為provider中Telephony.SMS_RECEIVED -->
<intent-filter>
<action
android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
</application>
<uses-sdk android:minSdkVersion="7" />
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
</manifest>
分享到:
相关推荐
本教程将详细介绍如何在Android中实现一个常驻通知栏的Notification,以确保即使在用户关闭应用后,该通知仍然可见。 一、Notification的基本结构 1. **Notification channels**: 从Android O(8.0)开始,每个...
本项目"Android实现Notification的通知栏常驻"是一个Android应用源码开发Demo,适用于毕业设计学习,旨在帮助学生理解和掌握如何创建并维护一个始终显示在通知栏的Notification。 首先,我们需要了解Notification的...
本文将深入探讨如何使用MarsDaemon源码实现Android进程及Service的常驻,确保服务即使在用户退出应用或者系统清理内存时也能持续运行。 首先,了解Android的进程生命周期是至关重要的。Android系统为了优化资源管理...
Android-AppDaemon-master.zip是一个专门为Android平台设计的开源项目,它的目标就是实现一个守护进程服务,以保护特定的Android应用在后台稳定运行。 守护进程(AppDaemon)在计算机系统中是一个常驻内存的程序,...
在标题"Android应用源码之实现Notification的通知栏常驻"中,主要关注的是如何使Notification即使在用户离开应用后仍然保留在通知栏,提供持续的可见性。这通常涉及到Android的Notification持久性和优先级设置。 ...
本资源“Android高级应用源码-实现Notification的通知栏常驻.rar”提供了一套实现通知栏常驻的源代码,这对于开发者来说是一个很好的学习和参考材料。 首先,我们要理解什么是常驻通知。在Android中,常驻通知是指...
运用Service和Receiver设计并实现一个应用程序:在Activity里启动系统后台服务,并在启动服务后关闭Activity,接着在操作系统中运行监控,直到手机收到短信之后,...要求在模拟器或真实Android设备上实现此应用程序。
"Android高级应用源码-实现Notification的通知栏常驻.zip"这个压缩包文件包含了一个示例项目,教你如何创建一个常驻通知栏的Notification,确保即使在应用被关闭或者用户切换到其他应用时,仍然能在通知栏看到该通知...
该项目包含了实现音乐播放、播放列表管理、歌曲搜索、音乐下载等功能的核心代码,是Android开发中关于视频/音频播放器领域的重要学习资源。 首先,我们要理解Android音视频播放的基础知识。在Android系统中,可以...
本文将深入探讨Android Bubbles这一开源项目,揭示其工作原理、实现方式以及如何在自己的应用中集成这一功能。 一、Android Bubbles简介 Android Bubbles源于Android 10版本引入的一项新特性,它允许应用程序创建...
综上所述,Android AppDaemon 是一个强大的工具,它简化了常驻进程的实现,让开发者能够更专注于应用的核心功能,而不用过于担心后台服务的复杂性。通过深入研究 Android-AppDaemon-master 文件中的内容,开发者可以...
- Android服务(Service):服务器功能常驻后台运行,确保即使用户离开应用,流媒体服务依然能够持续提供。 - Socket编程:用于建立客户端与服务器之间的连接,进行数据交换。 - RTP/RTCP:处理媒体数据的封装、解...
在Android平台上,自动回复短信是一项实用的功能,尤其适用于那些经常忙碌无法及时查看手机或需要保持通讯畅通的用户。本文将深入探讨如何构建一个基于Android的短信自动回复程序,以实现自动响应接收到的短信。 ...
在Android平台上,电话和短信的监听是通过特定的API接口实现的,这涉及到系统的权限管理和广播接收器。本文将深入探讨如何使用Java编程语言在Android应用中实现电话和短信的监听功能,以及如何理解并学习提供的源码...
本压缩包文件“Android应用源码之实现Notification的通知栏常驻”提供了关于如何创建并保持一个常驻通知栏的示例源代码,这对于开发长后台运行服务或者持续提醒用户的应用非常有用。 首先,我们来理解Notification...
"Android应用源码之实现Notification的通知栏常驻"这个主题主要关注如何使Notification在用户的设备通知栏中持续显示,即使用户关闭或离开应用也是如此。下面我们将深入探讨相关的Android知识点。 首先,了解...
Android 服务保活/常驻 (Android Service Daemon) 建议只在App的核心功能需要保活/常驻时使用。 本示例中使用的保活方法部分来源于下面的博客和库。启动前台服务而不显示通知来自于D-clock的AndroidDaemonService,...
"安卓Android源码——实现Notification的通知栏常驻.zip"这个资源显然包含了关于如何使通知在通知栏中持续显示的代码示例。这里我们将深入探讨Android中创建和管理Notification的基本概念,以及如何实现通知栏常驻。...
在Android系统中,常驻通知栏(persistent notification)是一种重要的应用交互方式,它允许应用程序在后台保持活动状态并在用户的通知栏中显示一条持久性的消息。这样的通知通常不会被系统自动清除,除非用户手动...