通知的设计由系统模板决定,您的应用只需定义模板各部分的内容。通知的某些详细信息仅在展开视图中显示。 展示了通知最常见的部分,具体如下所示: 这里的cancle传入的是一个1,就是我们创建Notification中指定的通知的ID 1)、设置声音 (2)、设置振动 (3)、设置LED灯闪烁 (4)、进行默认效果设置 通知可以包含动画形式的进度指示器,向用户显示正在进行的操作状态。 如果您可以估算操作在任何时间点的完成进度,应通过调用 随着操作的继续,持续使用 操作结束时, 注意:由于进度条要求应用持续更新通知,因此该代码通常应在后台服务中运行。 要显示不确定性进度条(不指示完成百分比的进度条),请调用 同时,请记得更改通知文本,以表明操作已完成。 此处为小deemo,复制粘贴后实现以上效果 效果图如下 通知的是否可见 此处为一个小deemo 可以复制粘贴后进行实践理解 点击后进行跳转和取消通知 附赠小deemo,进行实践理解他们的堆栈问题一、 每个项目都必须有这个,只有这个才能进行不同安卓不同版本的适配
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { NotificationChannel channel = new NotificationChannel(Chanel_ID, name, NotificationManager.IMPORTANCE_HIGH); // 可打可不打,随便 channel.setDescription(description); channel.enableLights(false); //是否在桌面icon右上角展示小红点 channel.setLightColor(Color.GREEN); //小红点颜色 channel.setShowBadge(true); //是否在久按桌面图标时显示此渠道的通知 NotificationManager notificationManager = getSystemService(NotificationManager.class); notificationManager.createNotificationChannel(channel); Log.e(TAG, "" ); }
必须包含以下依赖
dependencies { implementation "com.android.support:support-compat:28.0.0" }
二、通知的每个部分
三、安卓8之前的内容设置
private void tongzhi() { //通知栏的显示 NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); //获取这个服务 Notification notification = new NotificationCompat.Builder(getApplicationContext()) .setContentTitle("我是标题") //设置标题 .setContentText("我是内容") //设置内容 .setWhen(System.currentTimeMillis()) //设时间,获取当前时间 .setSmallIcon(R.drawable.p2) //设置小图标 .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.p1)) //设置大图标 .build(); manager.notify(1, notification); } private void init() { button = findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { tongzhi(); } }); }
四、通知的取消方法
1)、取消通知的 第一种方法
.setAutoCancel(true) //设置为自动取消
2)、在跳转后的Activity中
NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); manager.cancel(1);
五、通知的高级使用
Notification notification = new NotificationCompat.Builder(MainActivity.this) ... .setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Luna.ogg"))) //设置通知提示音 .setVibrate(new long[]{0,1000,1000,1000}) //设置振动, 需要添加权限 <uses-permission android:name="android.permission.VIBRATE"/> .setLights(Color.GREEN,1000,1000) //设置前置LED灯进行闪烁, 第一个为颜色值 第二个为亮的时长 第三个为暗的时长 .setDefaults(NotificationCompat.DEFAULT_ALL) //使用默认效果, 会根据手机当前环境播放铃声, 是否振动 .build(); manager.notify(1,notification);
六、进度条的显示
setProgress(max, progress, false)
使用指示器的“确定性”形式。第一个参数是“完成”值(如 100);第二个参数是当前完成的进度,最后一个参数表明这是一个确定性进度条。progress
的更新值来调用 setProgress(max, progress, false)
并重新发出通知。progress
应等于 max
。您可以在操作完成后仍保留显示进度条,也可以将其移除。无论哪种情况,都请记得更新通知文本以显示操作已完成。要移除进度条,请调用 setProgress(0, 0, false)
。setProgress(0, 0, true)
。结果会产生一个与上述进度条样式相同的指示器,区别是这个进度条是一个持续动画,不指示完成情况。在您调用 setProgress(0, 0, false)
之前,进度动画会一直运行,调用后系统会更新通知以移除 Activity 指示器。public class b extends AppCompatActivity { int PROGRESS_MAX = 100; int PROGRESS_CURRENT = 0; String Chanel_ID = "这是Channel_ID"; int notificationId = 1; String name = "这是姓名"; String description = "这是描述"; String TAG = "---------"; NotificationCompat.Builder builder; NotificationManagerCompat notificationManager; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.b); init(); } private void init() { Button button = findViewById(R.id.button3); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { NotificationChannel channel = new NotificationChannel(Chanel_ID, name, NotificationManager.IMPORTANCE_DEFAULT); channel.setDescription(description); NotificationManager notificationManager = getSystemService(NotificationManager.class); notificationManager.createNotificationChannel(channel); } notificationManager = NotificationManagerCompat.from(getApplicationContext()); builder = new NotificationCompat.Builder(getApplicationContext(), Chanel_ID); builder.setContentText("Download in progress") .setContentTitle(" Picture Download") .setSmallIcon(R.drawable.p1s) .setAutoCancel(true) .setPriority(NotificationCompat.PRIORITY_HIGH); builder.setProgress(PROGRESS_MAX, PROGRESS_CURRENT, false); notificationManager.notify(notificationId, builder.build()); new Thread(new Runnable() { @Override public void run() { // 这几个都要设置为全局变量,否则新建的多线程没法接收到 // NotificationCompat.Builder builder; // NotificationManagerCompat notificationManager; //int PROGRESS_MAX = 100; //int PROGRESS_CURRENT = 0; for (int i = PROGRESS_CURRENT; i < PROGRESS_MAX; i++) { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } Log.e(TAG, "i的值" + i); //每次运行都进行+1 PROGRESS_CURRENT = ++PROGRESS_CURRENT; builder.setProgress(PROGRESS_MAX, PROGRESS_CURRENT, false); notificationManager.notify(notificationId, builder.build()); Log.e(TAG, "run: " + PROGRESS_CURRENT); //当他大于100时,下载完成并且删除此通知栏的下载按钮 if (PROGRESS_CURRENT == 100) { //下载完成后出现这个 builder.setContentText("Download complete") .setProgress(0, 0, false); notificationManager.notify(notificationId, builder.build()); } } } }).start(); } }); } }
七、设置大图片进行显示
Bitmap bitmap1 = BitmapFactory.decodeResource(this.getResources(), R.drawable.p1s); builder = new NotificationCompat.Builder(getApplicationContext(), Chanel_ID); builder.setContentText("Download in progress") .setContentTitle(" Picture Download") .setFullScreenIntent(pendingIntent,true) .setSmallIcon(R.drawable.p1s) .setStyle(new NotificationCompat.BigPictureStyle().bigPicture(bitmap1))
八、通知的可见权限
.setStyle(new NotificationCompat.BigTextStyle().bigText("DSAFFFFFFFFFFFFFFFF")) //显示应用是否在锁屏可见 /* VISIBILITY_PUBLIC 显示通知的完整内容。 VISIBILITY_SECRET 不在锁定屏幕上显示该通知的任何部分。 VISIBILITY_PRIVATE 显示基本信息,例如通知图标和内容标题,但隐藏通知的完整内容,比如Big。Text */ .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) .setAutoCancel(true) /** * 如果用户设备被锁定,会显示全屏 Activity,覆盖锁屏。 * 如果用户设备处于解锁状态,通知以展开形式显示,其中包含用于处理或关闭通知的选项 */ .setPriority(NotificationCompat.PRIORITY_HIGH);
九、通知点击后进入,同时通知消失
private void tongzhi() { /** * 使用PendingIntent进行通知点击跳转功能。 * PendingIntent的用法: * (1)、通过getActivity()、getBroadcast()、getService()方法获取实例 * (2)、参数(Context context, int requestCode, Intent intent, int flags) * 第一个参数:Context * 第二个参数:requestCode 一般用不到 ,通常设置为0 * 第三个参数:intent * 第四个参数:flags 用于确定PendingIntent的行为。这里传0就行 */ //跳转 Intent intent=new Intent(MainActivity.this,a.class); PendingIntent pi=PendingIntent.getActivity(this,0,intent,0); /** * 需要使用一个Builder构造器来创建Notification对象,由于API不同会造成不同版本的通知出现不稳定的问题, * 所以这里使用NotificationCompat类来兼容各个版本 */ //通知栏的显示 NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); //获取这个服务 Notification notification = new NotificationCompat.Builder(getApplicationContext()) .setContentTitle("我是标题") //设置标题 .setContentText("我是内容") //设置内容 .setWhen(System.currentTimeMillis()) //设时间,获取当前时间 .setSmallIcon(R.drawable.p2) //设置小图标 .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.p1)) //设置大图标 .setContentIntent(pi) ///跳转 .setAutoCancel(true) //自动取消通知栏 .build(); manager.notify(1, notification); } private void init() { button = findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { tongzhi(); } }); }
十、堆栈的跳转(必须理解)
public class MainActivity extends AppCompatActivity { // String Chanel_ID = "这是Channel_ID"; // String name = "这是姓名"; // String description = "这是描述"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); panduan(); tiaozhuan(); } private void panduan() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { //ID Name Desription 都要在全局变量中设定 NotificationChannel channel = new NotificationChannel("ID", "name", NotificationManager.IMPORTANCE_DEFAULT); channel.setDescription("描述"); NotificationManager notificationManager = getSystemService(NotificationManager.class); notificationManager.createNotificationChannel(channel); } } private void tiaozhuan() { //这个设置的最低安卓版本是 16 //这是需要堆栈,就是并不是返回桌面而是层级返回,他会新建一个栈,和原来的应用不是一起的堆栈 //这个需要在AndroidManifest。xml里进行设置class的父类,让新建的栈能根据父类设定层层返回 Intent intent = new Intent(getApplicationContext(), san.class); TaskStackBuilder stackBuilder = TaskStackBuilder.create(getApplicationContext()); stackBuilder.addNextIntentWithParentStack(intent); PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); //这个是,只要退出就返回桌面 // Intent intent = new Intent(this, c.class); // intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); // PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); NotificationManagerCompat notificationManager = NotificationManagerCompat.from(getApplicationContext()); NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "ID")//这个要和上个是一致的,这就是为甚全局变量 .setSmallIcon(R.drawable.ic_launcher_background) .setContentText("标题") .setAutoCancel(true) .setContentTitle("内容") .setContentIntent(pendingIntent); //这个notification——id 也要设置全局变量 notificationManager.notify(1, builder.build()); } }
AndroidManifest.xml
<activity android:name=".san" android:parentActivityName=".Second"/> <activity android:name=".Second" /> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算