关于android中PendingIntent.getBroadcase的注册广播

使用语句

[java] view plaincopyprint?PendingIntent intent= PendingIntent.getBroadcast(Context context, int requestCode, Intent intent, int flags)

PendingIntent intent= PendingIntent.getBroadcast(Context context, int requestCode, Intent intent, int flags)

获得PendingIntent,浏览了各类文章,大多数说了这种方法,但是基本上也就是止步于此,可是还有最重要的没有谈及,如何区别多个已注册的PendingIntent呢,看了一下PendingIntent.getBroadcast的javadoc,第四个参数flags意为标记,初步认为flags是标识各个PendingIntent的,于是在测试中设置了个全局变量

[java] view plaincopyprint?public static int currentIntent=0;

public static int currentIntent=0;
然后用currentIntent++作为第四个参数传递进去,测试,注册了两个监听,等待时间的到来,bingo,居然可以了,目测已经可以。可是继续深入时问题来了,我要传递参数怎样?正解做法就是在第三个参数中设置

[java] view plaincopyprint?intent.setExtra(String key,String value); //设置传递的参数

intent.setExtra(String key,String value); //设置传递的参数
然后在自己实现的Receiver里用传进来的参数Intent intent实现

[java] view plaincopyprint?intent.getIntegerExtra(String key);

intent.getIntegerExtra(String key);
就可以获得参数,可以真正在实现的时候发现,在receiver里始终取不到参数,再经过一番查找,发现要把PendingIntent.getBroadcast的第四个参数设置于PendingIntent.FLAG_UPDATE_CURRENT,设置后测试,果然可以,可是这样问题又出来了,又要如何区别注册的intent呢?再次查看getBroadcast的javadoc,几个参数都没有说明如何区别要注册的PendingIntent,反而看到第二个参数的说明很神奇,就是这个参数目前为保留状态,仍未用到,无奈中,继续search各种说法,才发现,用requestCode来区别居然是可以的(可是为什么javadoc要说该参数未被使用呢?不解;估计用于区分PendingIntent的方法就是其中任意一个参数不同便可以区分了)代码如下:

设置监听

[java] view plaincopyprint?Intent setAlertIntent=new Intent(this,AlertReceiver.class);
setAlertIntent.putExtra(“try”, “i‘m just have a try”);
PendingIntent pendingIntent=PendingIntent.getBroadcast(this, alarmCount++, setAlertIntent,PendingIntent.FLAG_UPDATE_CURRENT);

AlarmManager alarmManager=(AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);

Intent setAlertIntent=new Intent(this,AlertReceiver.class);
    setAlertIntent.putExtra("try", "i‘m just have a try");
    PendingIntent pendingIntent=PendingIntent.getBroadcast(this, alarmCount++, setAlertIntent,PendingIntent.FLAG_UPDATE_CURRENT);

    AlarmManager alarmManager=(AlarmManager)getSystemService(ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);

Receiver中获取传递的数据:

[java] view plaincopyprint?public void onReceive(Context context, Intent intent) {

// TODO Auto-generated method stub
Bundle bundle= intent.getExtras();
if(bundle==null){
    Toast.makeText(context,"nothing", Toast.LENGTH_LONG).show();
}else{
    Set<String> set=bundle.keySet();
    for(String item:set){
        System.out.println(item);
        System.out.println(".............");
    }
    Toast.makeText(context,bundle.getCharSequence("try"), Toast.LENGTH_LONG).show();
}

}

public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub
    Bundle bundle= intent.getExtras();
    if(bundle==null){
        Toast.makeText(context,"nothing", Toast.LENGTH_LONG).show();
    }else{
        Set<String> set=bundle.keySet();
        for(String item:set){
            System.out.println(item);
            System.out.println(".............");
        }
        Toast.makeText(context,bundle.getCharSequence("try"), Toast.LENGTH_LONG).show();
    }

}
时间: 2024-08-08 13:23:25

关于android中PendingIntent.getBroadcase的注册广播的相关文章

[转]Android中pendingIntent的深入理解

转自;here pendingIntent字面意义:等待的,未决定的Intent.要得到一个pendingIntent对象,使用方法类的静态方法 getActivity(Context, int, Intent, int),getBroadcast(Context, int, Intent, int),getService(Context, int, Intent, int)  分别对应着Intent的3个行为,跳转到一个activity组件.打开一个广播组件和打开一个服务组件.参数有4个,比较

Android中如何做到自定义的广播只能有指定的app接收

今天没吊事,又去面试了,具体哪家公司就不说了,因为我在之前的blog中注明了那些家公司的名字,结果人家给我私信说我泄露他们的题目,好吧,我错了...其实当我们已经在工作的时候,我们可以在空闲的时间去面一面,因为面试有很多好处的: 第一点:你知道这个公司的具体地址了,以后和朋友说的时候也是有话题的 第二点:这点很重要,看看其他公司的面试题(现在有的公司还在采用笔试题这个环节,真心无语了,题目全是从网上找的,很没有意思,所以我只要见到有笔试题的一律pass,个人感觉面到现在,阿里和滴滴还是不错的,他

关于Android中PendingIntent的认识

转载:       PendingIntent 2010-11-16 00:03:55 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://lbrant.blog.51cto.com/2400264/424154 Intent和PendingIntent的关系,初学的时候很迷惑,用PendingIntent的时候,还会出现奇怪的问题,比如无法传递数据,无法更新数据,所以我集众家之长,加上我个人的一些实践,总结如下,希望能给你一些帮

android 中使用自定义权限在广播中的利用

1.在一个进程中发送一个有自定义权限的广播,另外一个进程中拥有广播接受者接受到该广播 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="im.weiyuan.com.hkkj"> <application andro

android四大组件之Service 注册广播接收者

广播的注册一共有两种,一种就是用清单文件注册,还有另外一种就是用代码注册,代码注册比较灵活,可以在需要的时候注册,不需要的时候解除注册 用服务注册广播首先要开启服务, 然后在服务oncreate方法里注册广播,在ondestory方法里解除注册就可以了 package com.example.zhuceBroadcast; import android.app.Activity; import android.content.Intent; import android.os.Bundle; i

Android中pendingIntent的深入理解

pendingIntent字面意义:等待的,未决定的Intent.要得到一个pendingIntent对象,使用方法类的静态方法 getActivity(Context, int, Intent, int),getBroadcast(Context, int, Intent, int),getService(Context, int, Intent, int)  分别对应着Intent的3个行为,跳转到一个activity组件.打开一个广播组件和打开一个服务组件.参数有4个,比较重要的事第三个和

Android应用程序注册广播接收器(registerReceiver)的过程分析

前 面我们介绍了Android系统的广播机制,从本质来说,它是一种消息订阅/发布机制,因此,使用这种消息驱动模型的第一步便是订阅消息:而对 Android应用程序来说,订阅消息其实就是注册广播接收器,本文将探讨Android应用程序是如何注册广播接收器以及把广播接收器注册到哪里去的. 在Android的广播机制中,ActivityManagerService扮演着广播中心的角色,负责系统中所有广播的注册和发布操作,因 此,Android应用程序注册广播接收器的过程就把是广播接收器注册到Activ

Android中,Broadcas介绍

什么是广播 在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制.我们拿广播电台来做个比方.我们平常使用收音机收音是这样的:许许多多不同的广播电台通过特定的频率来发送他们的内容,而我们用户只需要将频率调成和广播电台的一样就可以收听他们的内容了.Android中的广播机制就和这个差不多的道理. 电台发送的内容是语音,而在Android中我们要发送的广播内容是一个Intent.这个Intent中可以携带我们要传送的数据. 电台通过大功率的发射器发送内容,而在Androi

BroadcastReceiver广播接收者(二)——利用AndroidManifest.xml注册广播接收者

MainActivity如下: package cc.testbroadcasta; import android.os.Bundle; import android.app.Activity; import android.content.Intent; /** * Demo描述: * 利用AndroidManifest.xml注册广播接收者 */ public class MainActivity extends Activity { @Override protected void onC