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

Android通知及receiver

 
阅读更多

 

1. BroadcastReceiver

BroadcastReceiver用来接收如电量低、信号弱等即时广播通知,发送侧调用Context.sendBroadcast(Intent)或Context.sendOrderedBroadcast(Intent)可发送这类广播通知,而BroadcastReceiver则用onReceive (Context, Intent)方法来处理到接受到的广播通知。一个BroadcastReceiver的生命周期和onReceive()一致,其宿主进程和Activity、Service的一样,因此在onReceive不能有长时间的循环处理,不能显示Dialog的UI。


一个BroadcastReceiver可以在AndroidManifest.xml中静态声明和在程序动态注册,其可处理的通知由在声明或注册时定义的IntentFilter决定。

  • 动态注册的例子: 如果在Activity中动态注册,必须在onResume()中注册,在onPause()中取消注册。
    private IntentReceiver mDataReceiver = new IntentReceiver() {
       @Override public void onReceiveIntent(Context context, Intent intent) {
            Log.d("hogeRecv","onReceiveIntent: "+intent);
       }
    }
    
    public void onResume() {
       super.onResume();
    
       String action = "cn.com.chen.TestReceiver";
       IntentFilter filter = new IntentFilter(action);
       this.registerReceiver(mDataReceiver,filter);
    }
    
    public void onPause() {
       super.onPause();
    
       unregisterReceiver(mDataReceiver);
    }
     
  • 静态声明同Service和Activity的声明类似。
    <application&gt ... >
    <receiver name="receiver类名">
       <intent-filter>
          <action name="cn.com.chen.TestReceiver">
       </intent-filter>
    </receiver>
    </application>
在onReceive()中,不能直接同Activity交互,仅可Toast显示一个简单的通知消息、或通过NotificationManager设置一个Notification。对于Service,可以通过Context.startService()启动,但不能用Context.bindService()来绑定。如果需要同一个已启动的Service异步通信,可以通过BroadcastReceiver.peekService (Context myContext, Intent service)(返回值为IBinder)。
    例:
IBinder binder = peekService(ctx, new Intent(ctx, MediaPlaybackService.class));
IMediaPlaybackService sService = IMediaPlaybackService.Stub.asInterface(binder);
  Context.sendBroadcast()是一个完全异步处理,该函数调用后,其所能匹配的BroadcastReceiver则同时执行。而Context.sendOrderedBroadcast()则调用一次则能执行一个匹配的BroadcastReceiver,执行顺序只有IntentFilter的android:priority属性决定。

2. NotificationManager
Notification可以有多种形式,比如在StatusBar上的一个icon(通过该Icon可以启动一个Activity等)、LED闪烁、Screen的背景灯闪烁、震动等。用户拖动StatusBar,可以使Notification扩展显示为一个List UI。如果选择一个Nofitication,则触发该Nofitication所关联的PendingIntent所定义的行为。PendingIntent可以包含启动一个Activity、BroadcastReceiver、Service等信息。
int icon = R.drawable.notification_icon;                // StatusBar上的图标
CharSequence tickerText = "Hello";                      // 启动时,在StatusBar上显示的走马灯
long when = System.currentTimeMillis();                 // Notification启动时间    
Context CharSequence contentTitle = "My notification";  // (扩展显示时)Notification的标题
CharSequence contentText = "Hello World!";              // (扩展显示时)Notification的消息
Notification notification = new Notification(icon, tickerText, when);

Intent notificationIntent = new Intent(this, MyActivity.class);  // 后续的PendingIntent用
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
Context context = getApplicationContext();
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent); 
此外,还可以通过设置Notification的属性来设置提示音、震动等。
notification.defaults |= Notification.DEFAULT_SOUND;
notification.sound = Uri.parse("file:///sdcard/notification/ringer.mp3");
   
notification.defaults |= Notification.DEFAULT_VIBRATE;
long[] vibrate = {0,100,200,300};
notification.vibrate = vibrate;

notification.defaults |= Notification.DEFAULT_LIGHTS;
notification.ledARGB = 0xff00ff00;
notification.ledOnMS = 300;   notification.ledOffMS = 1000;
notification.flags |= Notification.FLAG_SHOW_LIGHTS; 
NotificationManager用来管理Notification,用Context.getSystemService(String)可从系统中获获取。NotificationManager的方法notify(int id, Notification)可以显示一个Notification到StatusBar上,方法cancel(int id)可删除一个Notification。参数ID用来标识Notification,在一个程序中必须唯一。
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);
Notification notification = ...           // Notification设置
mNotificationManager.notify(1, notification);
 


 

 

分享到:
评论

相关推荐

    android music braoadcast receiver

    在Android平台上,广播接收器(Broadcast Receiver)是四大组件之一,它是系统用来发送和接收广播消息的关键组件。在"android music broadcast receiver"这个项目中,我们可以看到开发者利用广播接收器来实现音乐...

    Android开发之获取通知栏的内容源码

    总之,获取Android通知栏的内容涉及到对Android的通知系统有深入的理解,包括Notification类、BroadcastReceiver以及在不同Android版本下的适配策略。通过以上介绍,你可以开始构建自己的GetNotifiService,实现获取...

    android 广播 receiver的讲解

    当一个BroadcastIntent被发送时,所有匹配该Intent的Receiver都会接收到广播通知,然后执行onReceive()方法。 二、创建BroadcastReceiver 创建BroadcastReceiver通常需要自定义一个类,继承BroadcastReceiver,并...

    Android新手Broadcast Receiver简单实现

    BroadcastReceiver是Android中实现跨进程通信的一种方式,使得不同应用间可以传递信息,即使它们在后台运行也能接收到广播通知。本教程将引导Android新手一步步实现Broadcast Receiver。 首先,我们需要创建一个新...

    Android快速集成极光推送,内含自定义通知,通知推送对象到某一个人,或者某一群人

    本文将详细介绍如何快速集成极光推送到Android项目中,并实现自定义通知,以及如何将通知推送给特定的个人或群体。 一、集成极光推送 1. 注册极光推送账号:首先,你需要在极光推送官网(http://www.jpush.cn/)...

    Android下载进度监听和通知的处理详解

    Android应用开发中,对于下载功能的实现,涉及到如何监听下载进度以及如何处理下载完成后的通知。以下将详细介绍如何在Android应用中实现下载进度监听和通知处理。 ### Android下载进度监听 在Android平台上实现...

    第八章_Android广播事件处理Broadcast_Receiver

    ### 第八章 Android广播事件处理Broadcast Receiver #### 知识点一:理解Broadcast Receiver的作用与意义 在Android应用开发过程中,Broadcast Receiver是一种重要的组件,它主要用于接收来自系统或其他应用程序...

    实现广播通知到通知栏

    在Android开发中,广播(Broadcast)和BroadcastReceiver是系统服务的重要组成部分,它们允许应用程序之间进行异步通信。本文将深入探讨如何使用Broadcast和BroadcastReceiver来实现广播通知到通知栏的功能。 首先...

    android客户端请求,服务端监听apk安装完成,通知客户端

    在Android开发中,有时我们需要实现一个特定的需求:客户端在安装APK后,通过网络通知服务端这个过程已经完成。这通常涉及到Android系统的广播接收器(BroadcastReceiver)和Socket通信技术。接下来,我们将深入探讨...

    Android白天夜晚模式切换实现

    &lt;receiver android:name=".DayNightModeReceiver"&gt; &lt;action android:name="android.intent.action.TIME_SET" /&gt; &lt;action android:name="android.intent.action.TIMEZONE_CHANGED" /&gt; &lt;/receiver&gt; ``` ...

    Android实例四:BroadCast_Receiver

    总之,BroadcastReceiver在Android开发中扮演着重要角色,它是实现跨组件通信的有效手段,尤其适用于实现后台任务和实时通知。通过学习和理解BroadcastReceiver的工作原理和使用方法,开发者可以更高效地构建功能...

    android 通知开发

    通过以上步骤,你将能够创建具备基本功能的Android通知,并能根据用户对通知的交互进行相应处理。实际开发中,还可以根据需求调整通知的其他属性,如颜色、声音、震动等,以提升用户体验。记住,合理地使用通知能够...

    Android系统中的广播Broadcast,Receiver例子

    Android系统中的广播Broadcast,Receiver例子,可以用LogCat察看整个运行的生命周期.MainActivity界面上有两个按钮,分别是Start Counter和Stop Counter按钮,点击前者开始计数,而点击后者则停止计数。

    android检测版本更新,通知栏显示下载进度

    &lt;receiver android:name=".UpdateDownloadReceiver" /&gt; ``` 最后,记得在合适的时候取消注册BroadcastReceiver,防止内存泄漏。 总结来说,实现“android检测版本更新,通知栏显示下载进度”的功能,需要涉及以下...

    android demo,android app重启后,Receiverd的处理。

    同时,如果在`onReceive()`中需要启动服务,建议使用`PendingIntent`或者在`AlarmManager`中安排任务,以符合Android O及以上版本的后台执行策略。 现在,当用户重启设备时,`BootReceiver`会接收到`ACTION_BOOT_...

    android 设置闹钟及通知示例.zip

    // 创建通知频道(Android O及以上版本) if (Build.VERSION.SdkInt &gt;= BuildVersionCodes.O) { int importance = NotificationImportance.Default; NotificationChannel channel = new NotificationChannel(...

    Android获取系统拍照程序发出的广播

    "Android获取系统拍照程序发出的广播"这个主题涉及到的是如何通过BroadcastReceiver来接收并处理系统相机应用拍照后的广播通知。下面将详细介绍这个过程,以及相关的知识点。 首先,Android系统在相机应用拍摄照片...

    Android手机系统下两种广播方法(通知)

    在Android系统中,广播是一种非常重要的组件,它用于在应用程序之间传递消息,使得不相关的组件可以在适当的时间接收到系统的事件通知。本篇文章将详细讲解Android中的两种广播机制:显式广播和隐式广播,并通过设置...

    Android Framework 开发揭秘

    5. **通知类别**:改进了通知的分类和优先级管理,使用户能更好地控制和组织来自不同应用的通知。 书中会详细讲解如何在Android Framework层面实现这些新特性,包括API的使用、系统服务的调用以及如何进行系统级别...

    Android Framework精编内核解析

    9. **通知系统**:Android的通知中心允许应用向用户显示重要的信息,即使用户不在应用中。开发者可以通过Notification API创建和管理通知。 10. **多媒体支持**:Android Framework提供了对音频、视频和图像的广泛...

Global site tag (gtag.js) - Google Analytics