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>
希望大家多多动手,这样才可以真正体会到开发的难处
- Android中的PendingIntent 原理
- 浅谈Android中的PendingIntent
- Android中的PendingIntent
- Android中的PendingIntent使用注意事项
- android中的闹钟管理器AlarmManager&PendingIntent
- android中的Intent和PendingIntent的区别
- Android PendingIntent
- Android PendingIntent
- android PendingIntent
- android pendingIntent
- Android---PendingIntent
- Android PendingIntent
- android-pendingintent
- android pendingIntent
- android PendingIntent
- Android PendingIntent
- 关于android API中的android.app.PendingIntent类的介绍
- PendingIntent中的flag
- readonly属性值的修改方案讨论
- Ansible配置支持Windows(远程节点)流程
- 等价二叉树样例 1 1 / \ / \ 2 2 and 2 2 / / 4
- 【MySQL基础】数据的增删改查
- Unity简单UI框架搭建
- Android中的PendingIntent
- 服务器远程安装Matlab2015
- [2017雅礼集训]day10 T2 数列 最长上升子序列
- TLD运动检测与目标跟踪详细介绍
- Swift3.0 信鸽推送
- 使用百度天气API实现自己的天气预报
- 日常训练 棋盘游走
- 数字字符
- Linux内存管理之进程创建的写时拷贝技术