Android中PendingIntent的简单使用

来源:互联网 发布:国盛证券交易软件 编辑:程序博客网 时间:2024/05/29 15:07

PendingIntent主要用于包装一个Intent及该Intent对应的动作。

例如,PendingIntent调用getSerivce接口,可以包装一个启动Service的Intent;
调用getActivity接口,可以包装一个启动Activity的Intent。


PendingIntent一般与AlarmManager、Notification等一起工作。
例如:

public static void setServiceAlarm(Context context, boolean isOn) {    //得到启动服务对应的Intent    Intent i = PollService.newIntent(context);    //利用PendingIntent的getService接口,得到封装后的PendingIntent    //第二个参数,是区分PendingIntent来源的请求代码    //第四个参数,是决定如何创建PendingIntent的标志位    PendingIntent pi = PendingIntent.getService(context, 0, i, 0);    AlarmManager alarmManager = (AlarmManager)            context.getSystemService(Context.ALARM_SERVICE);    if (isOn) {        //AlarmManager循环处理PendingIntent        //其中,第一个参数描述定时器时间基准常量        //第二个参数指定定时器启动的时间        //第三个参数指定时间间隔        alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME,                SystemClock.elapsedRealtime(), POLL_INTERVAL, pi);    } else {        //取消定时器           alarmManager.cancel(pi);        //同时调用PendingIntent的cancel接口        pi.cancel();    }}

使用AlarmManager安排周期任务后,PendingIntent将被定时处理,
每次都可以拉起其中封装的服务。


上述例子中,提到了创建PendingIntent时,可以指定标志位,例如:

public static boolean isServiceAlarmOn(Context context) {    Intent i = PollService.newIntent(context);    //指定FLAG_NO_CREATE后,不会主动创建PendingIntent,而是读取系统中的记录,    PendingIntent pi = PendingIntent.getService(context, 0, i, PendingIntent.FLAG_NO_CREATE);    return pi != null;}

PendingIntent与Notification合作的代码类似于:

...........Resources res = getResources();Intent i = PhotoGalleryActivity.newIntent(this);PendingIntent pi = PendingIntent.getActivity(this, 0, i, 0);//这里使用的支持库中的NotificationCompatNotification notification = new NotificationCompat.Builder(this)        //设置通知对应的一些信息        .setTicker(res.getString(R.string.new_pictures_title))        .setSmallIcon(android.R.drawable.ic_menu_report_image)        .setContentTitle(res.getString(R.string.new_pictures_title))        .setContentText(res.getString(R.string.new_pictures_text))        //添加通知对应的PendingIntent        //一旦点击通知后,PendingIntent将被处理        .setContentIntent(pi)        .setAutoCancel(true)        .build();NotificationManagerCompat notificationManager =        NotificationManagerCompat.from(this);notificationManager.notify(0, notification);.............
0 0
原创粉丝点击