Android中的PendingIntent

来源:互联网 发布:扬州网络电视台app 编辑:程序博客网 时间:2024/06/05 05:53

我们在开发过成功会经常遇到这个类----PendingIntent,下面我们来看一下对这个类的一些介绍

pendingIntent字面意义:等待的,未决定的Intent。
要得到一个pendingIntent对象,使用方法类的静态方法 getActivity(Context, int, Intent, int),getBroadcast(Context, int, Intent, int),getService(Context, int, Intent, int) 分别对应着Intent的3个行为,跳转到一个activity组件、打开一个广播组件和打开一个服务组件。
参数有4个,比较重要的事第三个和第一个,其次是第四个和第二个。可以看到,要得到这个对象,必须传入一个Intent作为参数,必须有context作为参数。

pendingIntent是一种特殊的Intent。主要的区别在于Intent的执行立刻的,而pendingIntent的执行不是立刻的。pendingIntent执行的操作实质上是参数传进来的Intent的操作,但是使用pendingIntent的目的在于它所包含的Intent的操作的执行是需要满足某些条件的。
主要的使用的地方和例子:通知Notificatio的发送,短消息SmsManager的发送和警报器AlarmManager等


你可以通过getActivity(Context context, int requestCode, Intent intent, int flags)系列方法从系统取得一个用于启动一个Activity的PendingIntent对象,

可以通过getService(Context context, int requestCode, Intent intent, int flags)方法从系统取得一个用于启动一个Service的PendingIntent对象

可以通过getBroadcast(Context context, int requestCode, Intent intent, int flags)方法从系统取得一个用于向BroadcastReceiver的Intent广播的PendingIntent对象

下面,我和大家说一下关于PendingInetnt的参数问题

int FLAG_CANCEL_CURRENT:如果该PendingIntent已经存在,则在生成新的之前取消当前的。
int FLAG_NO_CREATE:如果该PendingIntent不存在,直接返回null而不是创建一个PendingIntent.
int FLAG_ONE_SHOT:该PendingIntent只能用一次,在send()方法执行后,自动取消。
int FLAG_UPDATE_CURRENT:如果该PendingIntent已经存在,则用新传入的Intent更新当前的数据。

下面我们通过一个小demo进行深入了解:

1.主程序代码;

package com.dck.dcknotification;import android.os.Bundle;import android.app.Activity;import android.app.Notification;import android.app.NotificationManager;import android.app.PendingIntent;import android.content.Intent;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity {private Button button;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button=(Button) findViewById(R.id.button);button.setOnClickListener(new Listener());}class Listener implements OnClickListener{@Overridepublic void onClick(View v) {// TODO Auto-generated method stub//首先我们要获取到服务NotificationManager manger=(NotificationManager) getSystemService(NOTIFICATION_SERVICE);//下面我们利用Notification的构造方法创建Notification对象Notification notification=new Notification(R.drawable.cqq,"主人,哆啦a梦来了",System.currentTimeMillis());Intent intent=new Intent(MainActivity.this,NotificationActivity.class);//下面我们将对PendingIntent进行创建PendingIntent pendingIntent=PendingIntent.getActivity(MainActivity.this,0,intent, PendingIntent.FLAG_CANCEL_CURRENT);//下面我们来设置通知的布局notification.setLatestEventInfo(MainActivity.this,"哆啦a梦","哆啦a梦",pendingIntent);//我们还可以进行声音的设置//我们使用默认的设置notification.defaults=Notification.DEFAULT_ALL;//发送一个通知manger.notify(1,notification);}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}

2.通知的activity

package com.dck.dcknotification;import android.app.Activity;import android.app.NotificationManager;import android.os.Bundle;public class NotificationActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_noti);//如果用户打开这条通知,则将该通知取消掉NotificationManager manager=(NotificationManager) getSystemService(NOTIFICATION_SERVICE);manager.cancel(1);}}

3.布局文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context=".MainActivity" >    <Button        android:id="@+id/button"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:layout_alignParentRight="true"        android:layout_alignParentTop="true"        android:layout_marginTop="170dp"        android:text="@string/_" /></RelativeLayout>


<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <ImageView        android:id="@+id/imageView1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:scaleType="fitXY"        android:src="@drawable/taikong" /></LinearLayout>

希望大家多多动手,这样才可以真正体会到开发的难处
0 0
原创粉丝点击