资讯专栏INFORMATION COLUMN

Android——Notifications笔记

PumpkinDylan / 1972人阅读

摘要:一开始给这三个类给搞糊涂了。,由上面的加粗可以看出,是解决的兼容问题而诞生的。兼容性把这三个搞清楚之后,我直接用来构建。例如,震动到用户进行一些动作才停止等等功能,有空再补上。先搁置,接下来学。

Notification
Notification.Builder
NotificationCompat.Builder

一开始给这三个类给搞糊涂了。

官网是这样解释的:
Notification:
A class that represents how a persistent notification is to be presented to the user using the NotificationManager.
The Notification.Builder has been added to make it easier to construct Notifications.
*构建Notifications主要用的类,发现好多方法都给移除给NotificationCompat.Builder替代了

Notification.Builder:
Builder class for Notification objects. Provides a convenient way to set the various fields of a Notification and generate content views using the platform"s notification layout template. If your app supports versions of Android as old as API level 4, you can instead use NotificationCompat.Builder, available in the Android Support library.
*Notification.Builder是为了让开发者更容易构建出Notifications而诞生的。

NotificationCompat.Builder
Builder class for NotificationCompat objects. Allows easier control over all the flags, as well as help constructing the typical notification layouts.
*NotificationCompat.Builder,由上面的加粗可以看出,NotificationCompat.Builder是解决Notification.Builder的兼容问题而诞生的。compat:兼容性

把这三个搞清楚之后,我直接用NotificationCompat.Builder来构建Notifications。

NotificationCompat.Builder mBuilder =           //Notification 的兼容类

                new NotificationCompat.Builder(this)

                .setSmallIcon(R.drawable.ic_launcher)   //若没有设置largeicon,此为左边的大icon,设置了largeicon,则为右下角的小icon,无论怎样,都影响Notifications area显示的图标

                .setContentTitle("My notification") //标题

                .setContentText("Hello World!")         //正文

                .setNumber(3)                       //设置信息条数

//              .setContentInfo("3")        //作用同上,设置信息的条数

                .setLargeIcon(smallicon)           //largeicon,

                .setDefaults(Notification.DEFAULT_SOUND)//设置声音,此为默认声音

                .setVibrate(vT) //设置震动,此震动数组为:long vT[]={300,100,300,100}; 还可以设置灯光.setLights(argb, onMs, offMs)

                .setOngoing(true)      //true使notification变为ongoing,用户不能手动清除,类似QQ,false或者不设置则为普通的通知

                .setAutoCancel(true);             //点击之后自动消失

一个Notifications完成,现在已经可以把它显示出来,但我们继续coding,添加点击通知后的跳转。

实例化一个intent

Intent resultIntent = new Intent(this, ResultActivity.class);

实例化一个TaskStackBuilder ,用于添加动作,就像一个stack一样,一个一个压进去

TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);

添加父stack,添加下一个intent

stackBuilder.addParentStack(this);

stackBuilder.addNextIntent(resultIntent);

PendingIntent resultPendingIntent =
                stackBuilder.getPendingIntent(
                    0,
                    PendingIntent.FLAG_UPDATE_CURRENT
                );

把刚才的pending添加进去

mBuilder.setContentIntent(resultPendingIntent);

获得NotificationManager

NotificationManager mNotificationManager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

mBuilder.build()会返回一个Notifications对象,1000为Notifications的id,可变动。就可以notify出来了。

mNotificationManager.notify(1000, mBuilder.build());

效果:

接下来是构建一个进度条Notifications

        new Thread(
            new Runnable() {

                @Override
                public void run() {
                    for(int i=0;i<100;i++){
                        mBuilder.setProgress(100, i, false); //最后一个参数设置  determinate 还是  indeterminate ,
                        //false的进度条是可以看到增加的,true是无限循环的,但设置为true的时候,前面连个参数可以忽略设置为0,0或者任意

                        mNotificationManager.notify(1000, mBuilder.build());

                        try {
                            Thread.sleep(50);
                        } catch (InterruptedException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }

                    mBuilder.setContentText("OK")
                    .setDefaults(Notification.DEFAULT_ALL)   //设置后不会出现当进度完成之后奔溃,不设置会奔溃,原因不明。求大神指点
                    .setProgress(0, 0, false);
                    mNotificationManager.notify(1000, mBuilder.build());

                }
            }).start();

效果:

若mBuilder.setProgress(0, 0, true);
则:

还有好多功能没有写上去。例如setstyle,震动到用户进行一些动作才停止等等功能,有空再补上。

还有自定义Notifications没搞。先搁置,接下来学service。加油

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/12015.html

相关文章

  • fir.im Weekly - 如何在 iOS 上构建 TensorFlow 应用

    摘要:开发分享美团点评移动网络优化实践网络优化对于产品的用户体验至关重要,与公司的运营和营收息息相关。页面加载延长秒,一年就会减少亿美金营收。 本期 fir.im Weekly 收集了最近新鲜出炉的 iOS /Android 技术分享,包括 iOS 系统开发 TensorFlow 教程、iOS 新架构、iOS Notifications 推送实践,Android 无埋点 SDK 技术、代码质...

    Developer 评论0 收藏0
  • Android6.0 源码修改之屏蔽系统短信功能和来电功能

    摘要:监听可以写到广播中,当收到开机广播时,开始监听,这样和系统保持同步。源码位置诺,就是这了,看注释就明白了吧,这样我们就搞定了来电功能。一、屏蔽系统短信功能 1、屏蔽所有短信 android 4.2 短信发送流程分析可参考这篇 戳这 源码位置 vendormediatekproprietarypackagesappsMmssrccomandroidmmstransactionSmsRece...

    coordinate35 评论0 收藏0
  • 一个简单的网页通知(Web Notifications API)实例

    摘要:一些情况下,我们希望网页可以直接向桌面推送消息。查看一个简单的例子请求权限弹出一个通知两秒后关闭通知首先,我们需要判断浏览器是否支持。如果通过向用户请求权限,这是浏览器会弹出一个是否允许显示通知的提示如果用户选择了允许,那么返回的将会是。 一些情况下,我们希望网页可以直接向桌面推送消息。本文利用 HTML5 的 Web Notifications API 来展示具体的代码该如何编写,同...

    keelii 评论0 收藏0
  • 一个简单的网页通知(Web Notifications API)实例

    摘要:一些情况下,我们希望网页可以直接向桌面推送消息。查看一个简单的例子请求权限弹出一个通知两秒后关闭通知首先,我们需要判断浏览器是否支持。如果通过向用户请求权限,这是浏览器会弹出一个是否允许显示通知的提示如果用户选择了允许,那么返回的将会是。 一些情况下,我们希望网页可以直接向桌面推送消息。本文利用 HTML5 的 Web Notifications API 来展示具体的代码该如何编写,同...

    NusterCache 评论0 收藏0
  • 在原生 React Native 应用中使用 Expo API

    摘要:从今天开始,你可以在任何应用程序中使用尽可能少或尽可能多的。另一方面,应用程序将所有的控制权以及随之而来的复杂性交给了开发人员。通过在一个简单的应用程序中安装,你已经可以非常接近使用的效果了。 本文翻译自 Expo 的一篇博客:You can now use Expo APIs in any React Native app showImg(https://segmentfault.c...

    Big_fat_cat 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<