android 设置整个app的通知栏Notification 的声音和震动用啥方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android 设置整个app的通知栏Notification 的声音和震动用啥方法相关的知识,希望对你有一定的参考价值。
整个项目中 提醒,被评论什么的有多个通知栏 我要用什么方法才能 控制所有的 弹出的通知栏的声音和震动效果。
就是相当于 软件设置中的消息通知 设置它为 是否有声音 或者是否震动
设置安卓手机通知栏提示音的方法如下。
1、以OPPO手机为例,点击打开手机设置,如图。
2、进入设置页面,下拉菜单找到“声音与振动”选项并点击,如图。
3、进入声音与振动设置页面,如果要将通知栏提示声音设为振动,把“静音时振动”和“静音”两个选项开启就可以了。
4、如果要把通知栏提示音关闭,把“静音时振动”选项关闭,把“静音”选项开启就不会有提示音了。
5、如果需要通知栏有提示音,把以上两个选项关闭就可以了,也就是“静音时振动”和“静音”选项,如图。
参考技术A Notification即通知,用于在通知栏显示提示信息。在较新的版本中(API level > 11),Notification类中的一些方法被android声明deprecated(弃用),其实基本上相当于全部弃用了。
Android官方声明弃用,一定有它的理由,虽然我也不知道是什么人家都建议你不要用了,那就不要老是恪守着N年前的东西了。就像是以前,一说到标签页,大家基本上都会想到TabHost配合ActivityGroup,但Android后来提倡Fragment。
废话说多了,还是小结一下使用方法。
下面按照创建一个通知的步骤一步一步来,同时给出新旧实现方法。
1、获取Notification管理器
NotificationManager noteMng = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
2、新建一个Notification,设置状态栏显示样式
private Notification note;
//API 11以下
note = new Notification(R.drawable.ico_launcher "显示于屏幕顶端状态栏的文本", System.currentTimeMillis());
//API 11及以上
Notification.Builder builder = new Notification.Builder(nowContext).setTicker("显示于屏幕顶端状态栏的文本")
.setSmallIcon(R.drawable.ic_laucher);
API 11以上版本中,状态栏显示的样式跟下拉通知栏中显示的样式,可以一起设置,就是通过Notification.Builder类来实现,这里的Builder只调用了两个方法来设置状态栏显示样式。
3、设置Notification标志位(非必要步骤)
//FLAG_ONGOING_EVENT表明有程序在运行,该Notification不可由用户清除
note.flags = Notification.FLAG_ONGOING_EVENT;
4、设置点击Notification后的触发事件
//通过Intent,使得点击Notification之后会启动新的Activity
Intent i = new Intent(nowContext, AnotherActivity.class);
//该标志位表示如果Intent要启动的Activity在栈顶,则无须创建新的实例
i.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
pendingIntent = PendingIntent.getActivity(nowContext, 100, i, PendingIntent.FLAG_UPDATE_CURRENT);
5、设置Notification在通知栏里的样式
(1)系统默认样式
//API 11以下:
note.setLatestEventInfo(nowContext, "take me to your heart", "Micheal learn to rock", pendingIntent);
//API 16及以上,build()方法要求API 16及以上
//一会API 11以上,一会API16以上,我也很想知道Android的API是怎么设计的
note = builder.setContentIntent(pendingIntent).setContentTitle("title").setContentText("text").build();
(2)自定义样式:
自定义样式,就是让Notification在通知栏显示成自定义的xml布局
应当注意的是,Notification的自定义样式,只支持以下可视组件:
FrameLayout, LinearLayout, RelativeLayout
TextView, Button, AnalogClock, ImageView, ImageButton, Chronometer, ProgressBar
RemoteView view = new RemoteView(nowActivity.getPackageName(), R.layout.note_layout);
//API 11以下
note.contentView = view;
note.contentIntent = pendingIntent;
//API 16及以上,又是build()方法导致的,汗。。
note = builder.setContent(view).setContentIntent(pendingIntent).build();
这个步骤里有一个很值得注意的地方:pendingIntent被设置为note的contentIntent的值,就意味着点击了这个通知才会触发该Intent。
那么如果只是想让自定义布局里的某个按钮触发呢?比如说,弄了一个音乐播放器,Service负责播放音乐,Notification显示当前播放进度和一些简单的暂停按钮、上一首、下一首按钮,让用户不用再打开界面就可以通过Notification上的按钮操纵音乐播放。
假设说想让自定义布局里的一个id为R.id.button1的按钮来触发这个Intent,可以如下操作:
view.setOnClickPendingIntent(R.id.button1, pendingIntent);//在上面创建RemoteView实例后加上这句
然后注意,pendingIntent已经绑定到按钮上了,上面Notificatiion实例中,设置contentIntent的语句要去掉。
6、发布该通知,第一个参数为该notification的ID
noteMng.notify(10, note);
有关Notification的更多详细用法,建议查看官方API文档 参考技术B 这边对应字段存布尔值,后面的动作先判断布尔值再决定做不做。 参考技术C 默认提醒声音:
notification.defaults|=Notification.DAFAULT_SOUND
自定义:
notification.sound=Uri.parse("android.resource://" + getPackageName() + "/" +R.raw.**);追问
这个我知道 我要怎么才能在这个页面的activity中拿到 并设置是否有声音
Android Notification通知栏开发详解
Notification是在你的应用常规界面之外展示的消息。当app让系统发送一个消息的时候,消息首先以图表的形式显示在通知栏。要查看消息的详情需要进入通知抽屉(notificationdrawer)中查看。通知栏和通知抽屉(notificationdrawer)都是系统层面控制的,你可以随时查看,不限制于app。
图 1.通知栏的通知
图 2. notificationdrawer中的通知。
Notification 的设计
作为android UI中很重要的组成部分,notification拥有专属于自己的设计准则。如果想了解如何设计notification以及其交互,请阅读android 设计指南的notification一章。
Notification的界面元素
在通知抽屉中的notification有两种显示方式,取决于你的android版本以及notification drawer的状态:
普通视图
这种风格是notification drawer的标准显示方式。
宽视图
指你的notification被展开的时候会显示更大的视图,这种风格是android4.1之后才有的新特性。
下面将详细介绍两种情况。
普通视图
在图通视图中,notification最高64dp,即使你创建了一个宽视图风格的notification,在未展开的情况下也是以普通大小显示出来。下面是一个普通的notification。
图 3.正常状态下的notification
蓝色指示框所代表的的意思如下:
1.标题
2.大图标
3.通知内容
4.通知数据
5.小图标
6.Notification的发布时间。可以通过调用setWhen()设置一个明确的时间,默认是系统收到该notification的时间。
宽视图
只有当notification被展开的时候这种宽视图的notification才会出现,通过手势操作可以展开一个普通的notification(如果能展开的话)。这种风格的notification从android4.1以后才开始支持。下面的截图展示了inbox风格的notification:
图 4.宽视图notification
你应该注意到了这种notification其实跟普通的没多大差别,唯一的区别在于数字7-详情区域。不同宽视图notification这里的显示是有区别的,有如下几种风格:
大图标风格
详情区域显示一个最高位256dp的bitmap。
文字风格
详情区域显示一段文字
消息盒子风格(Inbox style)
详情区域显示几行文字
至于如何设置宽视图风格的notification可以参考这篇文章Applyinga big view style to a notification.
创建notification
首先将notification的一些UI信息以及相关动作赋予NotificationCompat.Builder对象,然后通过NotificationCompat.Builder.build()来获得notification对象自己;然后调用NotificationManager.notify()向系统转交这个通知。一个notification对象需要包含如下内容:
小图标(setSmallIcon()获取)
标题(setContentTitle()获取)
详情文字(setContentText()获取)
除此之外,其余内容都是可选的,要了解这些可选的内容参考NotificationCompat.Builder的文档。
Notification的动作与行为
虽然这也是可选的,但是你还是应该为你的notification至少添加一种行为:允许用户通过点击notification进入一个activity中进行更多的查看或者后续操作。一个notification可以提供多种动作,而且你也应该让用户点击一个notification之后能总是有相应的响应动作,通常是打开一个activity。你还可以在notification中添加能响应点击事件的button,比如延迟一下闹钟,或者立即回复一条短消息。
在notification内部,一个动作本身是被定义在一个PendingIntent中,PendingIntent包含了一个用于启动你app中activity的intent。要将PendingIntent和一个手势联系起来,你需要调用合适的NotificationCompat.Builder方法。比如你想在点击notification文字的时候启动activity,你需要调用NotificationCompat.Builder的setContentIntent()来添加PendingIntent。启动一个activity是notification动作响应中最普遍的一类。
创建一个简单的notification
下面的代码片段演示了一个打开activity的notification,注意这里获取PendingIntent是通过创建TaskStackBuilder对象:
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.notification_icon) .setContentTitle("My notification") .setContentText("Hello World!"); // Creates an explicit intent for an Activity in your app Intent resultIntent = new Intent(this, ResultActivity.class); // The stack builder object will contain an artificial back stack for the // started Activity. // This ensures that navigating backward from the Activity leads out of // your application to the Home screen. TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); // Adds the back stack for the Intent (but not the Intent itself) stackBuilder.addParentStack(ResultActivity.class); // Adds the Intent that starts the Activity to the top of the stack stackBuilder.addNextIntent(resultIntent); PendingIntent resultPendingIntent = stackBuilder.getPendingIntent( 0, PendingIntent.FLAG_UPDATE_CURRENT ); mBuilder.setContentIntent(resultPendingIntent); NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); // mId allows you to update the notification later on. mNotificationManager.notify(mId, mBuilder.build());
就是这么简单,通过上面的代码你就能为你的用户发出一个系统通知。
为notification设置宽视图样式
要获得一个能展开的宽视图样式的notification首选创建一个普通的NotificationCompat.Builder对象,然后调用Builder.setStyle()。记住这种notification只有4.1版本以上才支持。
下面的例子演示了在上面的普通notification的基础上添加宽视图风格的notification:
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.notification_icon) .setContentTitle("Event tracker") .setContentText("Events received") NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle(); String[] events = new String[6]; // Sets a title for the Inbox style big view inboxStyle.setBigContentTitle("Event tracker details:"); ... // Moves events into the big view for (int i=0; i < events.length; i++) { inboxStyle.addLine(events[i]); } // Moves the big view style object into the notification object. mBuilder.setStyle(inBoxStyle); ... // Issue the notification here.
以上是关于android 设置整个app的通知栏Notification 的声音和震动用啥方法的主要内容,如果未能解决你的问题,请参考以下文章
android 设置整个app的通知notification 的声音和震动用啥方法