zoukankan      html  css  js  c++  java
  • Android笔记——横幅通知

    通知分为三种:下拉通知、锁屏通知、横幅通知。前两个通知内容是相同的,横幅通知的View需要单独定制(还有一种是只在通知栏出现一句话)

    一般的app,只会默认开启“下拉通知”的权限。其他两个通知需要用户手动去在设置中开启。只有系统级apk(如通话、短信)或者高频使用的apk(如微信、QQ)会三个权限都开启。【注:因为本人只用过华为的手机,其他ROM厂商和Google的规则不是很清楚】。一般来说在下拉通知和锁屏通知显示的内容是一样的,只是普通的apk需要用户在设置中单独开启权限才能看到锁屏/横幅通知。锁屏/横幅通知是Android5.0才引入的。感兴趣的可以百度自己搜索一下效果。这里博主随便找了一个:http://www.360doc.com/content/15/0205/15/21857071_446464870.shtml。

    锁屏通知不需要单独的绘制,内容和正常的下拉通知一样;横幅通知的View必须要单独绘制,出于美观,一般也不会与下拉/锁屏设置的相同。下面就来简单讲解一下通知(Notification)的用法。

    1. 首先我们需要一个获取通知管理器(NotificationManager):

     1 import android.app.Notification;
     2 import android.app.NotificationManager;
     3 
     4 public class MainActivity extends AppCompatActivity {
     5     private NotificationManager notificationManager;
     6 
     7     @Override
     8     protected void onCreate(Bundle savedInstanceState) {
     9         super.onCreate(savedInstanceState);
    10         notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    11     }

    2. 然后我们需要通过Notification.Builder创建一个通知并显示:

     1     private void sendNotification() {
     2         Notification.Builder nb = new Notification.Builder(this);
     3         PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
     4                 new Intent(this, MainActivity.class), 0);   // 设置一个不是马上调用的PendingIntent,和Intent类似
     5         nb.setSmallIcon(R.mipmap.ic_launcher)               // 设置状态栏里的小图标
     6         .setWhen(System.currentTimeMillis())                // 设置时间发生时间
     7         .setAutoCancel(true)                                // 设置可以清除
     8         .setContentTitle("This is ContentTitle")            // 设置下拉列表里的标题
     9         .setContentText("this is ContentText")              // 设置下拉列表里的说明
    10         .setTicker("这个通知只有一句话,在通知栏上")             // 设置一句话通知
    11         .setContentIntent(pendingIntent)                    // 点击通知则执行pendingIntent,跳转到MainActivity
    12         .setContent(getRemoteViews2());                     // 设置下拉通知栏(会让标题、说明、图标无效)
    13         Notification n = nb.build();                        // 获取一个Notification
    14         n.defaults = Notification.DEFAULT_SOUND;            // 设置为默认的声音
    15         n.headsUpContentView = getRemoteViews();            // 设置横幅通知
    16         notificationManager.notify(NOTIFICATION_ID, n);     // 显示通知
    17     }

    第10行的setTicker()其实就是上面的提到过的一句话通知,相当于横幅通知的“简略版”;

    第11行的setContentIntent()是设置点击通知跳转到MainActivity,由于不是马上执行,所以使用的是PendingIntent;

    第12行的setContent()是使用定制的通知界面,而不是现有的框架,这条语句会让之前设置的标题、说明、图标无效,以这个为准;

    第15行的headsUpContentView就是横幅通知了,它和setContent()的参数的类型一样,都是RemoteViews。

     1     private RemoteViews getRemoteViews() {
     2         RemoteViews views = new RemoteViews(getApplicationContext().getPackageName(), R.layout.headupview);
     3         // 这里可以设置按钮监听,待补充
     4         return views;
     5     }
     6 
     7     private RemoteViews getRemoteViews2() {
     8         RemoteViews views = new RemoteViews(getApplicationContext().getPackageName(), R.layout.notificationview);
     9         // 这里可以设置按钮监听,待补充
    10         return views;
    11     }

    3. 布局实现(headupview)

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                    android:layout_width="match_parent"
                    android:layout_height="64dp"
                    android:layout_marginStart="12dp"
                    android:layout_marginTop="12dp" >
    
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/imageView"
            android:src="@mipmap/icon" />
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="啦啦啦,我是标题(∩_∩)"
            android:textSize="12sp"
            android:id="@+id/textView"
            android:layout_alignParentTop="true"
            android:layout_marginStart="10dp"
            android:layout_marginTop="11dp"
            android:layout_toEndOf="@+id/imageView"/>
    
        <Button
            android:layout_width="132dp"
            android:layout_height="33dp"
            android:text="取消"
            android:id="@+id/button3"
            android:textSize="12sp"
            android:layout_below="@id/textView"
            android:layout_toEndOf="@id/imageView"
            android:layout_marginStart="10dp"
            android:layout_gravity="center_vertical"/>
    
        <Button
            android:layout_width="132dp"
            android:layout_height="33dp"
            android:text="同意"
            android:id="@+id/button4"
            android:layout_below="@id/textView"
            android:layout_marginStart="9dp"
            android:layout_toEndOf="@id/button3"
            android:textSize="12sp"/>
    
    </RelativeLayout>

    布局实现(notificationview):

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                    android:layout_width="match_parent"
                    android:layout_height="64dp"
                    android:layout_marginStart="2dp"
                    android:layout_marginTop="1dp" >
    
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/imageView"
            android:src="@mipmap/icon" />
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="啦啦啦,我是标题(∩_∩)"
            android:textSize="12sp"
            android:id="@+id/textView"
            android:layout_alignParentTop="true"
            android:layout_marginStart="10dp"
            android:layout_marginTop="11dp"
            android:layout_toEndOf="@+id/imageView"/>
    
        <Button
            android:layout_width="112dp"
            android:layout_height="33dp"
            android:text="取消"
            android:id="@+id/button3"
            android:textSize="12sp"
            android:layout_below="@id/textView"
            android:layout_toEndOf="@id/imageView"
            android:layout_marginStart="10dp"
            android:layout_gravity="center_vertical"/>
    
        <Button
            android:layout_width="112dp"
            android:layout_height="33dp"
            android:text="同意"
            android:id="@+id/button4"
            android:layout_below="@id/textView"
            android:layout_marginStart="9dp"
            android:layout_toEndOf="@id/button3"
            android:textSize="12sp"/>
    
    </RelativeLayout>

    很多知识点没有补全,未完待续……

    推荐阅读以下这个,超级全:

    http://blog.csdn.net/loongggdroid/article/details/17616509/

  • 相关阅读:
    每日总结2021.9.14
    jar包下载mvn
    每日总结EL表达语言 JSTL标签
    每日学习总结之数据中台概述
    Server Tomcat v9.0 Server at localhost failed to start
    Server Tomcat v9.0 Server at localhost failed to start(2)
    链表 java
    MVC 中用JS跳转窗体Window.Location.href
    Oracle 关键字
    MVC 配置路由 反复走控制其中的action (int?)
  • 原文地址:https://www.cnblogs.com/clevercong/p/5375114.html
Copyright © 2011-2022 走看看