精华内容
下载资源
问答
  • 安卓 Notification 使用方法小结

    万次阅读 多人点赞 2016-02-24 17:59:03
    本文简单介绍安卓 Notification 的用法,并简单对比 5.0 前后 Notification 的变化和处理方法。

    本文简单介绍安卓 Notification 的用法,并简单对比 5.0 前后 Notification 的变化和处理方法。

    1. Notification 效果举例

    以微信为例,我们看下 Notification 的效果图:

    微信后台接收到消息时就会通过 Notification 来通知用户

    2. 常用方法及作用

    Notification 通常可以分为2个部分:Status Bar 中的部分和下拉通知栏后显示的部分。各个部分的名称如下图:

    20160120204444199

    需要说明的是,下拉后的部分的布局是系统默认的,该布局可以通过 contentView 字段自定义设置。如天猫 APP 就使用了自定义布局如下图(Nexus 5X,Tmall V4.7.2):

    20160122121323344

    20160122121337811

    我们用一段代码来说明图中上述项如何进行设置:

    
    import android.app.Notification;
    import android.app.NotificationManager;
    import android.app.PendingIntent;
    import android.content.Context;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.graphics.drawable.BitmapDrawable;
    import android.net.Uri;
    import android.support.v4.app.NotificationCompat;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    
    import com.example.cmm.helloworld.R;
    
    public class NotificationActivityDemo extends AppCompatActivity {
    
        public final static int NOTIFICATION_ID = "NotificationActivityDemo".hashCode();
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_notification_activity_demo);
    
            final NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
    
            // params
            int smallIconId = R.drawable.small_icon;
            Bitmap largeIcon = ((BitmapDrawable) getResources().getDrawable(R.drawable.large_icon)).getBitmap();
            String info = "逢赌必输:我是通知内容";
    
            // action when clicked
            Intent intent = new Intent();
            intent.setAction(Intent.ACTION_VIEW);
            intent.setData(Uri.parse("host://anotheractivity"));
    
            builder.setLargeIcon(largeIcon)
                    .setSmallIcon(smallIconId)
                    .setContentTitle("逢赌必输")
                    .setContentText(info)
                    .setTicker(info)
                    .setContentIntent(PendingIntent.getActivity(this, 0, intent, 0));
    
            final Notification n = builder.getNotification();
    
            Button btn = (Button) findViewById(R.id.btn);
            btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    nm.notify(NOTIFICATION_ID, n);
                }
            });
    
        }
    }

    3. 5.0 后的变化

    以上部分的内容是基于 4.4 及以下版本的 SDK。

    5.0 及以上版本的 Notification 样式发生了改变,我们先来看个例子,直观感受一下。

    下图为 24px x 24px 大小的 SmallIcon,我们可以看到其颜色艳丽精细,明显有悖 SmallIcon 简洁明了的精神:

    20160121091319151

    在 4.1 和 5.0 的 Genymotion 模拟器上的效果图对比如下(很明显 5.0 上 SmallIcon 白成一坨了,完全无法辨别):

    4.1 系统运行效果 5.0 系统运行效果
    20160121091517888 20160121091529325


    Notification 在 5.0及以上版本上的样式发生了变化,包括但不仅限于以下各项:

    • 背景色,由黑色变为白色;
    • smallIcon 的显示位置,由布局的右下角变为 largeIcon 的右下角,不过不设置 largeIcon,则系统会使用圆形灰色背景+SmallIcon构成largeIcon,且其右下角没有 SmallIcon,具体效果见下图;
    • smallIcon 的显示方式,不再按原图显示,而只显示白色和透明色,且不再显示 ticker(提示文本);
    • 如果不设置 largeIcon,则用 smallIcon 代替之,而且大图用灰色的圆包围 smallIcon 构成;

    20160120204604293

    5.0 及以上的系统,Google 推荐 SmallIcon 仅使用白色和透明色两种颜色,而且尽量简单。如果使用其他颜色,系统会进行处理,仅仅显示上述两种颜色,从而导致图标变为白色的一坨,而无法辨别。

    安卓 5.0(>= 4.0 同样适用) 及以上版本系统对通知图标的规则:

    尺寸颜色
    SmallIcon LargeIcon 小图标和操作图标应该避免过于精细、难以辨认,应该是纯白透明背景图像;禁止对小图标设置任何附加的阿尔法通道属性(变暗或变淡);这些图标会有抗锯齿边缘,但是由于 Android 使用这些图标作为蒙板(即仅使用阿尔法通道),因此通常应以完全不透明的方式绘制图像
    24dp x 24dp,上下左右各有 2dp 的留白:

    22 × 22 area in 24 × 24 (mdpi) 33 × 33 area in 36 × 36 (hdpi) 44 × 44 area in 48 × 48 (xhdpi) 66 × 66 area in 72 × 72 (xxhdpi) 88 × 88 area in 96 × 96 (xxxhdpi)
    64dp x 64dp:

    64 x 64 px(mdpi) 96 x 96 px (hdpi) 128 x 128 px (xhdpi) 192 x 192 px (xxhdpi) 256 x 256 px (xxxhdpi) 更多尺寸参考 该网页

    在5.0及以上系统,微信、大众点评、淘宝的 SmallIcon 如下图所示:

    20160120204654528

    所以,我们要对 5.0 及以上版本做兼容性处理,代码类似:

    // more code
    
    boolean isAboveLollipop = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP;
    
    builder.setSmallIcon(isAboveLollipop ? R.drawable.small_icon : R.drawable.white_small_icon);
    
    // more code
    

    4. 结束语

    本文简单介绍了 Notification 常用的 API 及在 5.0 及以上版本的变化。在实际开发中,我们要对 5.0 及以上系统做兼容性处理,也就是制作两套 SmallIcon。

    展开全文
  • Notification notification = new Notification(icon, message, when); //这里还需要程序的名字 程序名字一般在res/values/strings.xml文件里 String title = context.getString(R.string.app_name); //无参数...

    话不多说,直击主题

    1.在AndroidManifest.xml,添加权限

    唤醒屏幕

    <uses-permission android:name="android.permission.WAKE_LOCK" />

    允许访问振动设备(对的!你没有看错就是振动设备!!!)

    <uses-permission android:name="android.permission.VIBRATE" />

    2.具体代码

    </pre><pre name="code" class="java">//引用头文件就不提了  eclipse会提醒你,到时候自动补全就是
    //要想一个APP 推送的消息都存在 则每一次的 notify_id都需要不一样一样会被下一条覆盖
    private static int auto_notify_id = 0;
    //用来点击某个App推送的时候,清空这个App在通知栏的所有推送
    private static NotificationManager _mNotificationManager = null;
    private static void generateNotification(Context context, String message) 
    {
        	//这里需要取到程序的图标
            int icon = R.drawable.icon;
            long when = System.currentTimeMillis();
            //实例化NotificationManager以获取系统服务
            _mNotificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
            Notification notification = new Notification(icon, message, when);
            //这里还需要程序的名字  程序名字一般在res/values/strings.xml文件里
            String title = context.getString(R.string.app_name);
            //无参数跳转的意思
            //login是发推送的app的入口activity
            //就是你在Manifest.xml文件中设置的那个activity
    //<intent-filter>
    //                <action android:name="android.intent.action.MAIN" />
    //                <category android:name="android.intent.category.LAUNCHER" />
    //</intent-filter>
            Intent notificationIntent = new Intent(context, login.class);
            // set intent so it does not start a new activity 有点讲究,App启动的方式
            notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |Intent.FLAG_ACTIVITY_SINGLE_TOP);
            PendingIntent intent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
            notification.setLatestEventInfo(context, title, message, intent);
            //手机震动 声音  网上说还有亮屏,但是我测试,完全不亮
            notification.defaults = Notification.DEFAULT_ALL;
            //LED闪烁
            notification.defaults |= Notification.DEFAULT_LIGHTS; 
            notification.ledARGB = 0xff00ff00; //0x00FF00是绿色
            notification.ledOnMS = 500; 
            notification.ledOffMS = 500; 
            notification.flags |= Notification.FLAG_SHOW_LIGHTS; 
            notification.flags |= Notification.FLAG_AUTO_CANCEL;
            //唤醒屏幕
            wakeUpAndUnlock(context);
            _mNotificationManager.notify(auto_notify_id, notification);
            auto_notify_id++;
        }
    
    
        //这个方法在APP的入口函数那里调用 通过推送进入APP,清空该APP的所有推送
    	public static void ClearNotification()
    	{
    		if(null == _mNotificationManager)
    		{
    			return;
    		}
    		_mNotificationManager.cancelAll();
    	}
    	
        //唤醒屏幕的方法
    	public static void wakeUpAndUnlock(Context context){
            //获取电源管理器对象
            PowerManager pm=(PowerManager) context.getSystemService(Context.POWER_SERVICE);  
            //获取PowerManager.WakeLock对象,后面的参数|表示同时传入两个值,最后的是LogCat里用的Tag  
            PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK,"bright");  
            //点亮屏幕
            wl.acquire();  
            //释放 
            wl.release();  
        }


    
    


    展开全文
  • 使用自定义notification时候,remoteView.setTextViewText()方法时,需要给textview设置一个color或者主题,因为默认颜色白色跟背景一样。 Notification.Builder builder = new Notification.Builder(this) .set...
    • 在使用自定义notification时候,remoteView.setTextViewText()方法时,需要给textview设置一个color或者主题,因为默认颜色白色跟背景一样。

        Notification.Builder builder = new Notification.Builder(this)
                      .setSmallIcon(R.mipmap.ic_launcher)
                      .setPriority(Notification.PRIORITY_HIGH)
                      .setTicker("显示于屏幕顶端状态栏的文本");
      
    • 在使用setTicker(“显示于屏幕顶端状态栏的文本”)方法要注意在安卓L版本以上,不再支持显示setTicker中的内容。官网文档这样介绍的:

      tickerText

      CharSequence tickerText

      Text that summarizes this notification for accessibility services. As of the L release, this text is no longer shown on screen, but it is still useful to accessibility services (where it serves as an audible announcement of the notification’s appearance).

    展开全文
  • 使用FLAG_CANCEL_CURRENT也能做到更新extras,只不过是先把前面的extras清除,FLAG_CANCEL_CURRENT和FLAG_UPDATE_CURRENT的区别在于能否新new一个Intent,FLAG_UPDATE_CURRENT能够新new一个Intent,而FLAG_CANCEL_...
     PendingIntent pendingIntent2 = PendingIntent.getActivity(mContent, 0,  

        intent, PendingIntent.FLAG_UPDATE_CURRENT);  

    pendingintent.getactivity方法中第二个参数和第4个参数会影响intent中extras的内容 第二个值是id  相当于这个pendingintent的标签 同一个标签的pendingintent只会显示最新的 intent也是最新的intent  第4个参数会影响intent的extras的内容 这里常用的flag标签如下

    FLAG_ONE_SHOT:this PendingIntent can only be used once. If set, after send() is called on it, it will be automatically canceled for you and any future attempt to send through it will fail.

    FLAG_NO_CREATE:if the described PendingIntent does not already exist, then simply return null instead of creating it.

    FLAG_CANCEL_CURRENT:if the described PendingIntent already exists, the current one is canceled before generating a new one. You can use this to retrieve a new PendingIntent when you are only changing the extra data in the Intent; by canceling the previous pending intent, this ensures that only entities given the new data will be able to launch it. If this assurance is not an issue, consider FLAG_UPDATE_CURRENT.

    FLAG_UPDATE_CURRENT: if the described PendingIntent already exists, then keep it but its replace its extra data with what is in this new Intent. This can be used if you are creating intents where only the extras change, and don't care that any entities that received your previous PendingIntent will be able to launch it with your new extras even if they are not explicitly given to it.

    其中FLAG_UPDATE_CURRENT是最常用的 描述的Intent有更新的时候需要用到这个flag去更新你的描述,否则组件在下次事件发生或时间到达的时候extras永远是第一次Intent的extras。使用FLAG_CANCEL_CURRENT也能做到更新extras,只不过是先把前面的extras清除,FLAG_CANCEL_CURRENT和FLAG_UPDATE_CURRENT的区别在于能否新new一个Intent,FLAG_UPDATE_CURRENT能够新new一个Intent,而FLAG_CANCEL_CURRENT则不能,只能使用第一次的Intent。

    展开全文
  • 安卓 Notification使用

    2015-03-04 10:01:24
    主要涉及4个API —— Intent, PendingIntent, Notification,NotificationManager. 其中Intent 用来启动意图 PendingIntent用来延时启动意图,就是说它不会像Intent那样,app启动后立刻执行,而是现在状态栏中存...
  • NotificationManager notificationManager = (NotificationManager)getSystemService(MainActivity.this.NOTIFICATION_SERVICE); Notification notification1; Bitmap Larg...
  • 1.MainActivity.java中关键...Notification notification=new Notification(R.drawable.notee, "this is notification", System.currentTimeMillis()); Intent intent2=new Intent(MainActivity.this,SecondActivi
  • Notification.FLAG_SHOW_LIGHTS //三色灯提醒,在使用三色灯提醒时候必须加该标志符 Notification.FLAG_ONGOING_EVENT //发起正在运行事件(活动中) Notification.FLAG_INSISTENT //让声音、振动无限...
  • 全栈工程师开发手册 (作者:栾鹏) 安卓教程全解 安卓通知栏是提醒用户信息有效...创建通知栏有使用Notification直接创建何使用Notification.Builder创建两种方法 1、使用Notification直接创建通知栏 private
  • 安卓Notification使用最新API。
  • 安卓 notification2

    2014-10-03 09:23:27
    在通知使用震动之前千万记得去添加权限直接使用这一个就好了要将声音直接根据下面的目录写下面直接使用自定义的通知看代码 转载于:https://blog.51cto.com/marvinkane/1560439...
  • Notification —— 通知,是一种让你的应用程序在不使用Activity的情况下警示用户。它是看不见的程序组件(Broadcast Receiver,Service和不活跃的Activity)警示用户有需要注意的事件发生的最好途径。 Notification ...
  • Notification能够使你的应用程序能够在不使用Activity的情况下通知用户。虽然Notification与Toast都可以起到通知、提醒的作用。但它们的实现原理和表现形式却完全不一样。Toast其实相当于一个组件 (Widget)。...
  • 安卓8.0以上版本Notification使用

    千次阅读 2020-05-10 23:23:58
    安卓8.0以上版本Notification发生了很大变化。 今天在学习的时候,按照《第一行代码》中写的一样,但尝试了好几遍,都无法成功,在手机调试了没有反应。接下来,我跟大家分享一下我查找了资料以及修改了代码之后的...
  • 通知(Notification)简介 当一个应用程序不在前台运行而在后台运行时,这时有个消息希望让用户知道,那么可以在状态栏显示一个消息图标,下拉状态栏后可以看到具体消息,这就是通知功能。在Activity中一般用得少,...
  • 安卓9.0以上使用Notification的Demo

    千次阅读 2019-09-05 09:18:24
    安卓8.0以上使用Notification的Demo Notification在android 8.0以上设置时,需要设置渠道信息才能够正常显示通知 String name = "name"; NotificationManager notificationManager = (NotificationManager) ...
  • NotificationManager manager=(NotificationManager) getSystemService(NOTIFICATION_SERVICE); //需添加的代码 String channelId = "default"; String channelName = "默认通知"; if (manager != null) {
  • 用最新版的SDK,在做状态栏通知时,使用Notification的setLatestEventInfo(),结果提示: The method setLatestEventInfo(Context, CharSequence, CharSequence, PendingIntent) is undefined for the type ...
  • 比较两个版本的源码我们可以发现Notification.java在SDK23中比SDK 22中多了一行注释 “@removed”,这意味着如果你的工程是用SDK 23的那么此方法用不了,如果想用的话将编译版本换成 SDK 22即可。 另一个警告是 ...
  • 一、Notification 的简介1.1 什么是通知(Notification)1)文字描述: 通知是一个可以在应用程序正常的用户界面之外显示给用户的消息。 通知发出时,它首先出现在状态栏的通知区域中,用户打开通知抽屉可查看通知...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 163
精华内容 65
关键字:

安卓notification使用