Notification-通知

该类为通知的跳转类:
 1 package com.example.gaoji;
 2 
 3 import android.app.Activity;
 4 import android.app.Notification;
 5 import android.app.NotificationManager;
 6 import android.app.PendingIntent;
 7 import android.content.Context;
 8 import android.content.Intent;
 9 import android.os.Bundle;
10 import android.support.v4.app.NotificationManagerCompat;
11 import android.text.Layout;
12 import android.view.Menu;
13 import android.view.MenuItem;
14 import android.view.View;
15 import android.view.ViewGroup.LayoutParams;
16 import android.widget.Button;
17 import android.widget.PopupWindow;
18 import android.widget.TextView;
19 /*
20  * 发送通知
21  */
22 public class MainActivity2 extends Activity {
23 
24     @Override
25     protected void onCreate(Bundle savedInstanceState) {
26         super.onCreate(savedInstanceState);
27         setContentView(R.layout.activity_main2);
28         TextView tv= (TextView) findViewById(R.id.textView1);
29         NotificationManager nm=(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
30         nm.cancel(MainActivity.id_n);//取消id为id_n的通知栏显示
31         String ms=getIntent().getStringExtra("ms");//获取对象发送的内容
32         tv.setText(ms);
33     }
34 }

 通知的一些属性 :

对于这样来创建通知的来说:

Notification notification = new Notification(R.drawable.ic_launcher, "This is ticker text", System.currentTimeMillis());

控制手机的闪光灯
现在的手机基本上都会前置一个 LED 灯,当有未接电话或未读短信,而此时手机又处
于锁屏状态时,LED灯就会不停地闪烁,提醒用户去查看。我们可以使用ledARGB、ledOnMS、
ledOffMS 以及 flags 这几个属性来实现这种效果。ledARGB 用于控制 LED 灯的颜色,一般
有红绿蓝三种颜色可选。ledOnMS 用于指定 LED 灯亮起的时长,以毫秒为单位。ledOffMS
用于指定 LED 灯暗去的时长,也是以毫秒为单位。flags 可用于指定通知的一些行为,其中
就包括显示 LED 灯这一选项。所以,当通知到来时,如果想要实现 LED 灯以绿色的灯光一
闪一闪的效果,就可以写成:
notification.ledARGB = Color.GREEN;/为闪光灯设置颜色
notification.ledOnMS = 1000;//指定led灯亮起的时间(毫秒)
notification.ledOffMS = 1000;//指定led灭的时间(毫秒)
notification.flags = Notification.FLAG_SHOW_LIGHTS;//显示闪光灯

控制手机的声音:
比如说,我们手机的/system/media/audio/ringtones 目录下有一个 Basic_tone.ogg
音频文件,那么在代码中这样就可以这样指定:
Uri soundUri = Uri.fromFile(new File("/system/media/audio/ringtones/
Basic_tone.ogg"));
notification.sound = soundUri;

控制手机的振动:
除了允许播放音频外,我们还可以在通知到来的时候让手机进行振动,使用的是 vibrate
这个属性。它是一个长整型的数组,用于设置手机静止和振动的时长,以毫秒为单位。下标为 0 的值
表示手机静止的时长,下标为 1 的值表示手机振动的时长,下标为 2 的值又表示手
机静止的时长,以此类推。所以,如果想要让手机在通知到来的时候立刻振动 1 秒,然后静
止 1 秒,再振动 1 秒,代码就可以写成:
long[] vibrates = {0, 1000, 1000, 1000};
notification.vibrate = vibrates;//需要在xml文件中加入振动的权限

当然,如果你不想进行那么多繁杂的设置,也可以直接使用通知的默认效果,它会根据
当前手机的环境来决定播放什么铃声,以及如何振动,写法如下:
notification.defaults = Notification.DEFAULT_ALL;
注意,以上所涉及的这些高级技巧都要在手机上运行才能看得到效果,模拟器是无法表现出振动、以及 LED 灯闪烁等功能的。

 

  2  1 package com.example.gaoji;
  3 import android.app.Activity;
  4 import android.app.Notification;
  5 import android.app.Notification.Builder;
  6 import android.app.NotificationManager;
  7 import android.app.PendingIntent;
  8 import android.content.Context;
  9 import android.content.Intent;
 10 import android.graphics.Color;
 11 import android.os.Bundle;
 12 import android.support.v4.app.NotificationCompat;
 13 import android.support.v4.app.NotificationManagerCompat;
 14 import android.text.Layout;
 15 import android.util.Log;
 16 import android.view.Menu;
 17 import android.view.MenuItem;
 18 import android.view.View;
 19 import android.view.ViewGroup.LayoutParams;
 20 import android.widget.Button;
 21 import android.widget.PopupWindow;
 22 import android.widget.RemoteViews;
 23 /*
 24  * 发送通知
 25  */
 26 public class MainActivity extends Activity {
 27     public static final int id_n=0x1;
 28     @Override
 29     protected void onCreate(Bundle savedInstanceState) {
 30         super.onCreate(savedInstanceState);
 31         setContentView(R.layout.activity_main);
 32         Button but = (Button) findViewById(R.id.button1);
 33         Button but2 = (Button) findViewById(R.id.button2);
 34         Button but3 = (Button) findViewById(R.id.button3);
 35         Button but4 = (Button) findViewById(R.id.button4);
 36         final Button but5 = (Button) findViewById(R.id.button5);
 37         Button but6 = (Button) findViewById(R.id.button6);
 38         but.setOnClickListener(new View.OnClickListener() {
 39             
 40             @Override
 41             public void onClick(View v) {
 42                 Notification.Builder builder=new Notification.Builder(MainActivity.this);
 43                 //设置通知的事件消息
 44                 builder.setTicker("你有一条新通知");
 45                 builder.setContentText("消息内容");
 46                 builder.setContentTitle("消息标题");
 47                 
 48                 //设置通知的各种属性
 49                 //builder.setOngoing(true);//常驻通知,不能被取消掉
 50                 //builder.setAutoCancel(true);//取消声音震动呼吸灯(静音模式)和单击事件执行后取消显示,也可以在另一个activity中去关闭显示
 51                 builder.setDefaults(Notification.DEFAULT_ALL);//通知提示(声音震动呼吸灯)
 52                        //DEFAULT_ALL     使用所有默认值,比如声音,震动,闪屏等等
 53                     //DEFAULT_LIGHTS  使用默认闪光提示
 54                     //DEFAULT_SOUNDS  使用默认提示声音
 55                     //DEFAULT_VIBRATE 使用默认手机震动,需加上<uses-permission android:name="android.permission.VIBRATE" />权限
 56                 //FLAG_AUTO_CANCEL   该通知能被状态栏的清除按钮给清除掉
 57                 //FLAG_NO_CLEAR      该通知不能被状态栏的清除按钮给清除掉
 58                 //FLAG_ONGOING_EVENT 通知放置在正在运行
 59                 //FLAG_INSISTENT     是否一直进行,比如音乐一直播放,知道用户响应
 60                 builder.setNumber(1);//信息条数
 61                 builder.setWhen(System.currentTimeMillis());//获取时间
 62                 builder.setSmallIcon(android.R.drawable.ic_menu_manage);//设置图标
 63                 
 92                 //设置通知的单击跳转
 93                 Intent intent=new Intent(MainActivity.this, MainActivity2.class);//activity之间的跳转,单击该通知的时候跳转
 94                 //startActivity(intent);执行这条代码可以直接跳转
 95                 intent.putExtra("ms", "消息内容");//键值对
 96                 PendingIntent pi=PendingIntent.getActivity(MainActivity.this,0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
 97                 builder.setContentIntent(pi);//状态栏跳转单击事件,实现跳转,activity必须在XML文件里注册 
 98                 //获取系统的通知管理器
 99                 NotificationManager nm=(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
100                 
101                 //将通知传递给管理者并自定义一个id,方便取消该id代表的通知的显示
102                 nm.notify(id_n,builder.getNotification());//发送通知,id和通知对象
103             }
104         });
105         //大视图通知
106         but2.setOnClickListener(new View.OnClickListener() {
107             
108             @Override
109             public void onClick(View v) {
110                 NotificationCompat.Builder builder=new NotificationCompat.Builder(MainActivity.this);
111                 builder.setContentText("文本");
112                 builder.setContentTitle("标题");
113                 builder.setSmallIcon(android.R.drawable.ic_dialog_map);//通知的图标
114                 NotificationCompat.InboxStyle  style=new NotificationCompat.InboxStyle();
115                 style.setBigContentTitle("消息标题");
116                 style.addLine("减肥萨克雷爱是减肥了俺看见了房间拉来的风景爱了解到");
117                 style.setSummaryText("摘要文字本");
118                 builder.setStyle(style);
119                 NotificationManager nm=(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
120                 nm.notify(2, builder.build());
121             }
122         });
123         //进度条通知
124         but3.setOnClickListener(new View.OnClickListener() {
125             int progress_value=0;
126             @Override
127             public void onClick(View v) {
128                 final NotificationCompat.Builder builder=new NotificationCompat.Builder(MainActivity.this);
129                 builder.setContentText("正在下载...");
130                 builder.setContentTitle("游戏");
131                 builder.setSmallIcon(android.R.drawable.ic_dialog_map);
132                 final NotificationManager nm=(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
133                 new Thread(new Runnable(){
134 
135                     @Override
136                     public void run() {
137                         for(progress_value=0;progress_value<100;progress_value=progress_value+5){
138                             builder.setProgress(100,progress_value,false);//true代表不确定状态,参数代表最大进度和当前进度
139                             try {
140                                 Thread.sleep(1000);
141                             } catch (InterruptedException e) {
142                                 e.printStackTrace();
143                             }
144                             nm.notify(3,builder.build());//显示出来
145                         }
146                         builder.setProgress(0,0,false);//关闭进度条
147                         nm.notify(3,builder.build());
148                     }
149                     
150                 }).start();
151             }
152         });
153         //自定义通知
154         but4.setOnClickListener(new View.OnClickListener() {
155             @Override
156             public void onClick(View v) {
157                 Notification.Builder builder=new Notification.Builder(MainActivity.this);
158                 builder.setSmallIcon(R.drawable.ic_launcher);//没有拉下来的提示图标(不写弹不出通知)
159                 RemoteViews views=new RemoteViews(getPackageName(), R.layout.activity_main3);//自定义的布局文件
160                 views.setTextViewText(R.id.textView1, "歌名");//通过id设置
161                 views.setTextViewText(R.id.button5, "播放");//通过id为按钮设置文字
162                 builder.setContent(views);//远程视图,当前包名,自定义的xml布局文件
163                 NotificationManager nm=(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
164                 nm.notify(4, builder.getNotification());//id,通知对象(可通过这个id取消显示和更新)
165                 
166             }
167         });
168     }
169 
170     @Override
171     public boolean onCreateOptionsMenu(Menu menu) {
172         // Inflate the menu; this adds items to the action bar if it is present.
173         getMenuInflater().inflate(R.menu.main, menu);
174         return true;
175     }
176 
177     @Override
178     public boolean onOptionsItemSelected(MenuItem item) {
179         // Handle action bar item clicks here. The action bar will
180         // automatically handle clicks on the Home/Up button, so long
181         // as you specify a parent activity in AndroidManifest.xml.
182         int id = item.getItemId();
183         if (id == R.id.action_settings) {
184             return true;
185         }
186         return super.onOptionsItemSelected(item);
187     }
188 }

适配8.0

 

private void showMessageNotification(Context context){
        final int pushId = 1;

        NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
        NotificationCompat.Builder mBuilder;
        //判断是否是8.0Android.O
        if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            //创建一个通知渠道(渠道id与渠道名)
            NotificationChannel chan1 = new NotificationChannel("渠道id",
                    "渠道名", NotificationManager.IMPORTANCE_DEFAULT);
            chan1.setLightColor(Color.GREEN);
            chan1.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
            mNotificationManager.createNotificationChannel(chan1);
            mBuilder = new NotificationCompat.Builder(context, "渠道id");
        } else {
            mBuilder = new NotificationCompat.Builder(context,"渠道id");
        }
        
        Intent notificationIntent = new Intent(context, MainActivity.class);
        notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                | Intent.FLAG_ACTIVITY_SINGLE_TOP);
        notificationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        PendingIntent intent = PendingIntent.getActivity(context, 0,notificationIntent, 0);
        
        mBuilder.setContentTitle("在线客服消息")//设置通知栏标题
                .setContentText("内容")//设置通知栏内容
                .setContentIntent(intent) //设置通知栏点击意图
                .setNumber(1) //设置通知集合的数量
                .setTicker("收到一条在线客服消息") //通知首次出现在通知栏,带上升动画效果的
                .setWhen(System.currentTimeMillis())//通知产生的时间,会在通知信息里显示,一般是系统获取到的时间
                .setDefaults(Notification.DEFAULT_ALL)//向通知添加声音、闪灯和振动效果的最简单、最一致的方式是使用当前的用户默认设置,使用defaults属性,可以组合
                .setSmallIcon(R.mipmap.ic_launcher);//设置通知小ICON
        Notification notify = mBuilder.build();
        notify.flags |= Notification.FLAG_AUTO_CANCEL;
        mNotificationManager.notify(pushId, notify);
    }

 

posted @ 2016-04-19 19:33  ts-android  阅读(514)  评论(0编辑  收藏  举报