自己实现的2中方式显示通知栏消息
方式1
private void showNotify1() {
Context context = this;
final int notifyID = 1;
final String CHANNEL_ID = "channel";
// 创建一个Intent,指定启动的Activity
Intent intent = new Intent(context, AppActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
// 创建一个PendingIntent,用于启动应用程序的Activity
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
// 发送通知
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// NotificationManager notificationManager = (NotificationManager) context.getSystemService(NotificationManager.class);
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, "default", NotificationManager.IMPORTANCE_HIGH);
notificationManager.createNotificationChannel(channel);
// 创建一个Notification,并设置其点击行为为启动Activity
NotificationCompat.Builder builder = new NotificationCompat.Builder(context, CHANNEL_ID)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle("title")
.setContentText("text")
.setWhen(System.currentTimeMillis())
.setContentIntent(pendingIntent)
.setAutoCancel(false);
notificationManager.notify(notifyID, builder.build());
}
}
- Context.NOTIFICATION_SERVICE :notification
- NotificationManager.class: class android.app.NotificationManager
方式2
private void showNotify() {
String channel = "notify channel";
final int notifyID = 1;
String key = "click";
Context context = this;
Toast.makeText(context, "test toast", Toast.LENGTH_LONG).show();
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
final RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.notify);
NotificationManager notificationManager = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);
final Notification.Builder builder = new Notification.Builder(context, channel);
builder.setAutoCancel(true);
BroadcastReceiver buttonReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context ctx, Intent intent) {
// Intent intent1=new Intent(ctx,AppActivity.class);
// intent1.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
// ctx.startActivity(intent1);
String name = ctx.getPackageName();
Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(name);
if (launchIntent != null) {
launchIntent.addCategory(Intent.CATEGORY_LAUNCHER);
launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ctx.startActivity(launchIntent);
}
}
};
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(key);
context.registerReceiver(buttonReceiver, intentFilter);
views.setOnClickPendingIntent(R.id.btn, PendingIntent.getBroadcast(context, 0, new Intent(key), 0));
builder.setOngoing(true)
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setCustomContentView(views);
@SuppressLint("WrongConstant") NotificationChannel notificationChannel = new NotificationChannel(channel, "Default Channel", NotificationManager.IMPORTANCE_DEFAULT);
notificationManager.createNotificationChannel(notificationChannel);
notificationManager.notify(notifyID, builder.build());
}
}
在 Android 中,可以使用 Intent 配合通知栏来创建交互式通知。
通过点击通知栏上的通知,可以触发特定的操作或打开相应的活动。
intent
在 Android 开发中,Intent 是一种用于在组件之间传递消息和执行操作的对象。它可以用于启动活动(Activity)、启动服务(Service)、发送广播(Broadcast)以及执行其他各种系统或应用组件之间的通信。
Intent 可以包含以下信息:
-
Action(动作):指定要执行的操作,比如启动活动、启动服务等。例如,ACTION_VIEW 表示查看某个内容,ACTION_SEND 表示发送某个内容等。
-
Data(数据):用于指定操作涉及的数据或内容。可以是一个 URI、一个文件路径等。
-
Extras(附加数据):可选的键值对,用于传递额外的数据给目标组件。可以通过 putExtra() 方法添加多个键值对。
-
Category(类别):用于进一步指定操作的类别。
使用 Intent 的基本流程如下:
-
创建一个新的 Intent 对象,指定要执行的操作类型(Action)和相关参数。
-
可选的设置其他属性,如数据(Data)、类别(Category)等。
-
根据需求,添加附加数据(Extras)。
-
调用 startActivity() 方法启动活动,startService() 方法启动服务,sendBroadcast() 方法发送广播等,将 Intent 发送给目标组件。
以下是一个简单的示例,演示如何使用 Intent 启动一个活动:
// 创建一个新的 Intent 对象
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
// 可选:设置数据
intent.setData(Uri.parse("https://www.example.com"));
// 可选:添加附加数据
intent.putExtra("key", "value");
// 启动活动
startActivity(intent);
在上面的示例中,我们创建了一个新的 Intent 对象,并指定了要启动的目标活动为 SecondActivity。我们还通过 setData() 方法设置了数据为一个网址,并通过 putExtra() 方法添加了一个键值对。最后,我们使用 startActivity() 方法将 Intent 发送给系统来启动目标活动。
通过 Intent,我们可以实现在不同的组件之间进行通信和交互,从而实现丰富的 Android 应用程序功能。