欢迎来到使用Android PendingIntent的Android通知示例。在本教程中,我们将讨论并实现PendingIntent
,并在我们的应用程序中构建Notification
。
Android PendingIntent
Android PendingIntent是一个包装intent对象的对象,它指定了将来要发生的操作。换句话说,`PendingIntent‘允许我们将未来的意图传递给另一个应用程序,并允许该应用程序执行该意图,就像它具有与我们的应用程序相同的权限一样,无论当该意图最终被调用时,我们的应用程序是否仍然存在。PendingIntent通常用于需要执行AlarmManager 或用于** 通知** (我们将在本教程后面实现)的情况。PendingIntent为应用程序提供了一种工作方式,即使在它们的进程退出之后也是如此。出于安全原因,提供给PendingIntent的基本意图必须显式设置组件名称,以确保最终将其发送到那里,而不是发送到其他地方。每个明确的意图都应该由特定的应用程序组件来处理,比如Activity、BroadcastReceiver或服务。因此,PendingIntent使用以下方法来处理不同类型的意图:
1.PendingInvent.getActivity()
:获取PendingIntent启动活动
2.PendingIntent.getBroadcast()
取回PendingIntent进行广播
3.PendingIntent.getService()
:检索PendingIntent启动服务
下面给出了PendingIntent的一个示例实现。
1Intent intent = new Intent(this, SomeActivity.class);
2
3// Creating a pending intent and wrapping our intent
4PendingIntent pendingIntent = PendingIntent.getActivity(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
5try {
6 // Perform the operation associated with our pendingIntent
7 pendingIntent.send();
8} catch (PendingIntent.CanceledException e) {
9 e.printStackTrace();
10}
挂起Intent关联的操作使用Send()
方法执行。下面介绍了getActivity()方法中的参数及其用法:
1.This (Context):这是** PendingIntent** 开始活动的上下文 2.questCode :1为上例中发送方的私有请求码。以后以相同的方法再次使用它将得到相同的待定意图。然后我们可以做各种事情,比如用Cancel()取消挂起的意图等。 3.意图 :要发起的活动的明确意图对象 4.FLAG :我们在上面的示例中使用的PendingIntent标志之一是** FLAG_UPDATE_CURRENT** 。这个声明如果以前的PendingIntent已经存在,那么当前的PendingIntent将用最新的意图更新它。还有许多其他标志,如** FLAG_CANCEL_CURRENT** 等。
Android通知
安卓**Toast** 类提供了一种向用户显示警报的便捷方式,但问题是这些警报不是持久的,这意味着警报会在屏幕上闪烁几秒钟,然后消失。Android通知消息填补了此类情况下的空白。Android通知是一条消息,我们可以在应用程序的正常用户界面之外向用户显示。Android中的通知是使用NotificationCompat
库构建的。
创建Android通知
使用NotificationManager
类创建通知,如下所示:
1NotificationManager notificationManager = (NotificationManager)
2 getSystemService(NOTIFICATION_SERVICE);
Notification.Builder
提供了一个生成器接口来创建通知对象,如下所示:
1NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
Android通知方式
我们可以在此构建器对象上设置通知属性。下面给出一些常用的方法及其说明。
1.通知构建() :组合已设置的所有选项并返回新的通知对象 2.NotificationCompat.Builder setAutoCancel(Boolean AutoCancel) :设置此标志将使其在用户在面板中单击通知时自动取消通知 3.NotificationCompat.Builder setContent(RemoteViews Views) :提供一个自定义的RemoteViews来代替标准的RemoteView 4.NotificationCompat.Builder setContent Info(CharSequence Info) :设置通知右侧的大文本 5.NotificationCompat.Builder setContent Intent(PendingIntent Intent) :提供点击通知时发送的PendingIntent 6.NotificationCompat.Builder setContent Text(CharSequence Text) :设置标准通知中通知的文本(第二行) 7.NotificationCompat.Builder setContent Title(CharSequence标题) :设置标准通知中通知的文本(第一行) 8.NotificationCompat.Builder setDefaults(int默认) :设置要使用的默认通知选项。一个例子是;
1MBuilder.setDefaults(Notification.DEFAULT_LIGHTS|通知.DEFAULT_SOUND)
9.NotificationCompat.Builder setLargeIcon(位图图标) :设置滚动条和通知中显示的大图标 10.NotificationCompat.Builder setNumber(Int Number) :设置通知右侧的大数 11.NotificationCompat.Builder setOning(Boolean Ounding) :设置这是否是持续通知 12.NotificationCompat.Builder setSmallIcon(int图标) :设置通知布局中使用的小图标 13.NotificationCompat.Builder setStyle(NotificationCompat.Style) :添加在构建时应用的丰富通知样式 14.NotificationCompat.Builder setTicker(CharSequence TickerText) :设置通知首次到达时状态栏中显示的文本 15.NotificationCompat.Builder setVibrate(Long[]Pattern) :设置要使用的振动模式 16.NotificationCompat.Builder setWhen(Long When) :设置事件发生的时间。面板中的通知按此时间排序
Android通知按钮和样式
Notification.Builder
允许您向通知添加最多三个按钮,这些按钮具有可定义的操作。Android 4.1及更高版本支持可展开的通知,当通知被展开时,它会显示一个大视图。大图有三种风格:大图风格 、** 大文本风格** 、** 收件箱风格** 。
取消Android通知
我们也可以在NotificationManager
上为特定的通知ID调用ancel()
。ancelAll()
方法调用将移除您之前发出的所有通知。在本教程中,我们将创建一个将查看网页的意图包装到PendingIntent中的应用程序。当点击通知时,该PendingIntent将被触发。此外,我们还将添加以编程方式取消通知的功能。
Android通知示例项目结构
[](https://cdn.jsdelivr.net/gh/andsky/tutorials-images/others/14919b1bde2389d634d8d5f54c601f9e_android-notitiments-project t.png)
Android通知示例
Active_main.xml是一个基本的相对布局,有两个按钮:一个用于创建通知,另一个用于取消通知。active_main.xml
:
1<?xml version="1.0" encoding="utf-8"?>
2<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
3 xmlns:tools="https://schemas.android.com/tools"
4 android:layout_width="match_parent"
5 android:layout_height="match_parent"
6 android:paddingBottom="@dimen/activity_vertical_margin"
7 android:paddingLeft="@dimen/activity_horizontal_margin"
8 android:paddingRight="@dimen/activity_horizontal_margin"
9 android:paddingTop="@dimen/activity_vertical_margin"
10 tools:context="com.journaldev.notifications.MainActivity">
11
12 <Button
13 android:layout_width="wrap_content"
14 android:layout_height="wrap_content"
15 android:text="CREATE NOTIFICATION"
16 android:id="@+id/button"
17 android:layout_alignParentTop="true"
18 android:layout_alignParentRight="true"
19 android:layout_alignParentEnd="true"
20 android:layout_alignParentLeft="true"
21 android:layout_alignParentStart="true" />
22
23 <Button
24 android:layout_width="wrap_content"
25 android:layout_height="wrap_content"
26 android:text="CANCEL NOTIFICATION"
27 android:id="@+id/button2"
28 android:layout_below="@+id/button"
29 android:layout_alignRight="@+id/button"
30 android:layout_alignEnd="@+id/button"
31 android:layout_alignParentLeft="true"
32 android:layout_alignParentStart="true" />
33</RelativeLayout>
MainActivity.java
如下所示。
1package com.journaldev.notifications;
2
3import android.app.NotificationManager;
4import android.app.PendingIntent;
5import android.content.Context;
6import android.content.Intent;
7import android.graphics.BitmapFactory;
8import android.net.Uri;
9import android.support.v7.app.AppCompatActivity;
10import android.os.Bundle;
11import android.support.v7.app.NotificationCompat;
12import android.widget.Toast;
13
14import butterknife.ButterKnife;
15import butterknife.OnClick;
16
17public class MainActivity extends AppCompatActivity {
18
19 @Override
20 protected void onCreate(Bundle savedInstanceState) {
21 super.onCreate(savedInstanceState);
22 setContentView(R.layout.activity_main);
23 ButterKnife.inject(this);
24 }
25
26 @OnClick(R.id.button)
27 public void sendNotification() {
28
29 NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
30 builder.setSmallIcon(android.R.drawable.ic_dialog_alert);
31 Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.journaldev.com/"));
32 PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
33 builder.setContentIntent(pendingIntent);
34 builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher));
35 builder.setContentTitle("Notifications Title");
36 builder.setContentText("Your notification content here.");
37 builder.setSubText("Tap to view the website.");
38
39 NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
40
41 // Will display the notification in the notification bar
42 notificationManager.notify(1, builder.build());
43 }
44
45 @OnClick(R.id.button2)
46 public void cancelNotification() {
47
48 String ns = Context.NOTIFICATION_SERVICE;
49 NotificationManager nMgr = (NotificationManager) getApplicationContext().getSystemService(ns);
50 nMgr.cancel(1);
51 }
52}
在上面的代码中,我们将这个网站的意图传递给了PendingIntent。通知ID设置为1,用于构建通知和取消通知。应用程序的实际输出如下所示。这将结束使用PendingIntent的安卓通知教程。您可以通过下面的链接下载Android通知项目 。
下载Android PendingIntent和通知Project
参考资料: