安卓系统通知,延迟意图示例
欢迎使用Android PendingIntent的通知示例。在本教程中,我们将讨论和实现PendingIntent,并在我们的应用程序中构建通知。
安卓等待意图
Android PendingIntent是一个封装了Intent对象的对象,它指定了在未来要执行的操作。换句话说,PendingIntent允许我们将一个未来的Intent传递给另一个应用程序,并允许该应用程序在调用Intent时具有与我们的应用程序相同的权限,无论我们的应用程序在Intent最终被调用时是否还存在。PendingIntent通常用于需要执行AlarmManager的情况,或者用于通知(在本教程中稍后实现)。PendingIntent提供了一种让应用程序在其进程退出后继续工作的方法。出于安全原因,提供给PendingIntent的基本Intent必须明确设置组件名称,以确保它最终被发送到正确的地方而不是其他地方。每个明确的Intent都应由特定的应用程序组件(如Activity、BroadcastReceiver或Service)进行处理。因此,PendingIntent使用以下方法来处理不同类型的意图:
-
- PendingIntent.getActivity() :获取一个用于启动Activity的PendingIntent
-
- 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()方法中的参数及其用法。
-
- 这是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);
安卓通知方法
我们可以在此构建器对象上设置通知属性。以下是一些常用方法及其描述。
-
- 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