Android 通知、PendingIntent 示例

欢迎来到使用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通知示例项目结构

[![Android通知示例](https://cdn.jsdelivr.net/gh/andsky/tutorials-images/others/14919b1bde2389d634d8d5f54c601f9e_android-notitiments-project t.png)](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 example这将结束使用PendingIntent的安卓通知教程。您可以通过下面的链接下载Android通知项目

下载Android PendingIntent和通知Project

参考资料:

Published At
Categories with 技术
Tagged with
comments powered by Disqus