Android Notification

Notification是一种具有全局效果的通知,它展示在屏幕的顶端,首先会表现为一个图标的形式,当用户向下滑动的时候,展示出通知具体的内容。

它是一种让你的应用程序在没有开启情况下或在后台运行警示用户。它是看不见的程序组件(Broadcast Receiver,Service和不活跃的Activity)警示用户有需要注意的事件发生的最好途径。

 

状态栏和状态条

状态条就是手机屏幕最上方的一个条形状的区域;

在状态条有好多信息量:比如usb连接图标,手机信号图标,电池电量图标,时间图标等等;

状态栏就是手从状态条滑下来的可以伸缩的view;

在状态栏中一般有两类(使用FLAG_标记):

(1)正在进行的程序

(2)通知事件

大概来描述创建一个Notification传送的信息有
一个状态条图标
在拉伸的状态栏窗口中显示带有大标题,小标题,图标的信息,并且有处理该点击事件:
比如调用该程序的入口类
闪光,LED,或者震动
内容信息:

 

 

 

 

实例化一个Notification.Builder对象;
注意:在android:minSdkVersion <16以下时,可以使用
NotificationCompat.Builder创建。

 

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     android:layout_width="match_parent"
 3     android:layout_height="match_parent"
 4     android:orientation="vertical" >
 5 
 6     <Button
 7         android:layout_width="match_parent"
 8         android:layout_height="wrap_content"
 9         android:onClick="sendNotification"
10         android:text="发送通知" />
11 
12     <Button
13         android:layout_width="match_parent"
14         android:layout_height="wrap_content"
15         android:onClick="clearNotification"
16         android:text="清除通知" />
17 
18     <Button
19         android:layout_width="match_parent"
20         android:layout_height="wrap_content"
21         android:onClick="diyNotification"
22         android:text="自定义通知" />
23 
24 </LinearLayout>
activity_main
 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     android:layout_width="match_parent"
 3     android:layout_height="match_parent"
 4     android:orientation="vertical">
 5 
 6     <TextView
 7         android:id="@+id/tv"
 8         android:layout_centerHorizontal="true"
 9         android:layout_width="wrap_content"
10         android:layout_height="wrap_content"
11         android:text="标题"/>
12 
13     <ImageView
14         android:id="@+id/iv"
15         android:layout_below="@id/tv"
16         android:layout_centerHorizontal="true"
17         android:layout_width="wrap_content"
18         android:layout_height="wrap_content"
19         android:src="@drawable/ic_launcher" />
20 
21 
22 
23 </RelativeLayout>
notification_layout
 1 public class MainActivity extends Activity {
 2 
 3     public static final int CLICK_REQUEST = 1;
 4     public static final int DIY_CLICK_REQUEST = 2;
 5 
 6     @Override
 7     protected void onCreate(Bundle savedInstanceState) {
 8         super.onCreate(savedInstanceState);
 9         setContentView(R.layout.activity_main);
10     }
11 
12     public void sendNotification(View v) {
13         //minSdkVersion<16时,使用NotificationCompat.Builder创建
14         NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
15         //设置小图标
16         builder.setSmallIcon(R.mipmap.ic_launcher);
17         //标题
18         builder.setContentTitle("大标题");
19         //文本
20         builder.setContentText("大新闻大新闻,这里显示大新闻");
21         //发送的时间戳
22         builder.setWhen(System.currentTimeMillis());
23         //附加信息
24         builder.setContentInfo("通知");
25         //状态条中贴标内容
26         builder.setTicker("新闻来了");
27         //使用默认值DEFAULT_ALL,比如声音,震动,闪屏
28         //DEFAULT_LIGHTS、DEFAULT_SOUNDS、DEFAULT_VIBRATE
29         //加入手机震动,一定要在manifest.xml中加入权限
30         // <uses-permission android:name="android.permission.VIBRATE" />
31         builder.setDefaults(Notification.DEFAULT_ALL);
32 
33         //设置点击事件
34         Intent intent = new Intent(this, MainActivity.class);
35         PendingIntent pi = PendingIntent.getActivity(this, CLICK_REQUEST, intent, PendingIntent.FLAG_UPDATE_CURRENT);
36         builder.setContentIntent(pi);
37 
38         NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
39         //创建一个Notification对象
40         Notification notification = builder.build();
41         //通知不能被状态栏的清除按钮清除掉
42         notification.flags = Notification.FLAG_NO_CLEAR;
43         //标记为id的通知
44         manager.notify((int) (Math.random() * 100), notification);
45     }
46 
47     public void clearNotification(View v) {
48         NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
49         manager.cancelAll();
50     }
51 
52     //自定义布局Notification
53     public void diyNotification(View v) {
54         RemoteViews view =  new RemoteViews(getPackageName(), R.layout.notification_layout);
55         Notification notification = new NotificationCompat.Builder(this)
56                 .setSmallIcon(R.mipmap.ic_launcher)
57                 .setContent(view)
58                 .setContentTitle("自定义通知")
59                 .setContentText("自定义通知内容")
60                 .setTicker("自定义通知来了")
61                 .build();
62         notification.flags = Notification.FLAG_NO_CLEAR;
63         view.setTextColor(R.id.tv, Color.BLUE);
64 
65         //点击图片打开MainActivity
66         Intent intent = new Intent(MainActivity.this, MainActivity.class);
67         PendingIntent pi_iv = PendingIntent.getActivity(this,DIY_CLICK_REQUEST,intent,PendingIntent.FLAG_UPDATE_CURRENT);
68         view.setOnClickPendingIntent(R.id.iv,pi_iv);
69 
70         //点击"跳转界面"打开OneActivity
71         Intent intent2 = new Intent(MainActivity.this, OneActivity.class);
72         PendingIntent pi_tv = PendingIntent.getActivity(this,DIY_CLICK_REQUEST,intent2,PendingIntent.FLAG_UPDATE_CURRENT);
73         view.setOnClickPendingIntent(R.id.tv,pi_tv);
74 
75         NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
76         manager.notify(1,notification);
77 
78     }
79 }
MainActivity.java
 1 public class OneActivity extends Activity {
 2 
 3     @Override
 4     protected void onCreate(@Nullable Bundle savedInstanceState) {
 5         super.onCreate(savedInstanceState);
 6         TextView tv = new TextView(this);
 7         tv.setText("界面跳转");
 8         setContentView(tv);
 9     }
10 
11 }
OneActivity.java

 

 

别忘了注册OneActivity

posted on 2016-10-17 20:26  语风6649  阅读(179)  评论(0编辑  收藏  举报

导航