安卓系统通知,延迟意图示例

欢迎使用Android PendingIntent的通知示例。在本教程中,我们将讨论和实现PendingIntent,并在我们的应用程序中构建通知。

安卓等待意图

Android PendingIntent是一个封装了Intent对象的对象,它指定了在未来要执行的操作。换句话说,PendingIntent允许我们将一个未来的Intent传递给另一个应用程序,并允许该应用程序在调用Intent时具有与我们的应用程序相同的权限,无论我们的应用程序在Intent最终被调用时是否还存在。PendingIntent通常用于需要执行AlarmManager的情况,或者用于通知(在本教程中稍后实现)。PendingIntent提供了一种让应用程序在其进程退出后继续工作的方法。出于安全原因,提供给PendingIntent的基本Intent必须明确设置组件名称,以确保它最终被发送到正确的地方而不是其他地方。每个明确的Intent都应由特定的应用程序组件(如Activity、BroadcastReceiver或Service)进行处理。因此,PendingIntent使用以下方法来处理不同类型的意图:

    1. PendingIntent.getActivity() :获取一个用于启动Activity的PendingIntent

 

    1. PendingIntent.getBroadcast() :获取一个用于执行广播的PendingIntent

 

    PendingIntent.getService() :获取一个用于启动服务的PendingIntent

以下是一个 PendingIntent 的实例实现。

Intent intent = new Intent(this, SomeActivity.class);
 
// Creating a pending intent and wrapping our intent
PendingIntent pendingIntent = PendingIntent.getActivity(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
try {
    // Perform the operation associated with our pendingIntent
    pendingIntent.send();
} catch (PendingIntent.CanceledException e) {
    e.printStackTrace();
}

与pendingIntent相关联的操作是使用send()方法执行的。下面描述了getActivity()方法中的参数及其用法。

    1. 这是PendingIntent启动活动的上下文。

requestCode: “1”是发送者在上面的示例中使用的私有请求码。稍后再次使用相同的方法,并使用相同的请求码,将返回相同的待定意图。然后我们可以做一些其他的事情,比如使用cancel()取消待定意图等。

intent: 要启动的活动的显式意图对象。

flag: 在上面的示例中,我们使用了FLAG_UPDATE_CURRENT中的一个PendingIntent标志。这个标志表示,如果先前已经存在一个PendingIntent,那么当前的PendingIntent将使用最新的意图进行更新。还有许多其他的标志,如FLAG_CANCEL_CURRENT等。

安卓通知

Android的Toast类提供了一种方便的方式来向用户显示警报,但问题是这些警报不是持久的,也就是说警报会在屏幕上闪现几秒钟然后消失。在这种情况下,Android的通知消息来填补这个空白。Android通知是我们可以在应用程序正常的用户界面之外向用户显示的消息。在Android中,通知是使用NotificationCompat库构建的。

创建安卓通知

使用如下代码创建通知:NotificationManager类

NotificationManager notificationManager = (NotificationManager) 
  getSystemService(NOTIFICATION_SERVICE); 

Notification.Builder提供一个构建器接口,用于创建Notification对象,如下所示:

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);

安卓通知方法

我们可以在此构建器对象上设置通知属性。以下是一些常用方法及其描述。

    1. build()通知:将所有已设置的选项组合起来,并返回一个新的Notification对象

setAutoCancel (boolean autoCancel):设置此标志将使得当用户在面板中点击通知时,通知自动被取消

setContent (RemoteViews views):提供一个自定义的RemoteViews,用于替代标准视图

setContentInfo (CharSequence info):设置通知右侧的大文本

setContentIntent (PendingIntent intent):提供一个在通知被点击时发送的PendingIntent

setContentText (CharSequence text):设置通知的文本(第二行),格式是标准通知

setContentTitle (CharSequence title):设置通知的文本(第一行),格式是标准通知

setDefaults (int defaults):设置将被使用的默认通知选项。例如:mBuilder.setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_SOUND)

setLargeIcon (Bitmap icon):设置在滚动条和通知中显示的大图标

setNumber (int number):设置通知右侧的大数字

setOngoing (boolean ongoing):设置是否为持续通知

setSmallIcon (int icon):设置通知布局中使用的小图标

setStyle (NotificationCompat.Style style):在构建时添加一个丰富的通知样式

setTicker (CharSequence tickerText):设置通知到达时在状态栏中显示的文本

setVibrate (long[] pattern):设置要使用的振动模式

setWhen (long when):设置事件发生的时间。面板中的通知按此时间排序。

Android推送按钮和样式

Notification.Builder允许您在通知中添加最多三个具有可定义操作的按钮。Android 4.1及以上的版本支持可展开的通知,当通知被展开时,会显示通知的大视图。大视图有三种样式可供使用:大图片样式、大文本样式和收件箱样式。

取消安卓通知 (Qu Xia Android Tongzhi)

我们还可以在NotificationManager上为特定的通知ID调用cancel()方法。调用cancelAll()方法将会移除先前发出的所有通知。在本教程中,我们将创建一个应用程序,将用于查看网页的意图包装到PendingIntent中。当通知被点击时,该PendingIntent将被触发。此外,我们还将添加以编程方式取消通知的功能。

Android 通知示例项目结构

安卓通知示例

activity_main.xml是一个基本的相对布局,包含两个按钮:一个用于创建通知,另一个用于取消通知。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.Olivia.notifications.MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="CREATE NOTIFICATION"
        android:id="@+id/button"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="CANCEL NOTIFICATION"
        android:id="@+id/button2"
        android:layout_below="@+id/button"
        android:layout_alignRight="@+id/button"
        android:layout_alignEnd="@+id/button"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />
</RelativeLayout>

下面给出了MainActivity.java文件的内容。

package com.Olivia.notifications;

import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.app.NotificationCompat;
import android.widget.Toast;

import butterknife.ButterKnife;
import butterknife.OnClick;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.inject(this);
    }

    @OnClick(R.id.button)
    public void sendNotification() {

        NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
        builder.setSmallIcon(android.R.drawable.ic_dialog_alert);
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.scdev.com/"));
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
        builder.setContentIntent(pendingIntent);
        builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher));
        builder.setContentTitle("Notifications Title");
        builder.setContentText("Your notification content here.");
        builder.setSubText("Tap to view the website.");

        NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

        // Will display the notification in the notification bar
        notificationManager.notify(1, builder.build());
    }

    @OnClick(R.id.button2)
    public void cancelNotification() {

        String ns = Context.NOTIFICATION_SERVICE;
        NotificationManager nMgr = (NotificationManager) getApplicationContext().getSystemService(ns);
        nMgr.cancel(1);
    }
}

在上述代码中,我们将一个关于此网站的意图传递给了PendingIntent。notificationId被设为1,并且被用来构建通知和取消通知。应用程序的运行效果如下所示。这就结束了有关使用PendingIntent的安卓通知教程。您可以通过下面的链接下载安卓通知项目。

下载Android PendingIntent和Notifications项目

参考资料 :

  • https://developer.android.com/reference/android/app/PendingIntent.html
  • https://developer.android.com/guide/topics/ui/notifiers/notifications.html
发表回复 0

Your email address will not be published. Required fields are marked *