1. 程式人生 > >android 通知欄NotificationManager及自定義通知欄Notification的使用

android 通知欄NotificationManager及自定義通知欄Notification的使用

在Android作業系統中,狀態列通知Notification的運用是很常見的,比如我們收到簡訊,QQ訊息等,在手機頂端通知欄就會顯示一條圖文訊息來提示我們。Notification有很多的用法,比如最基本的即時訊息的提示,更新應用或下載檔案的進度條式的提示,用來顯示長文字和一些自定義佈局的摺疊式的提示,android5.0新增加的懸掛式的提示等。下面我們介紹一個最基本的Notification,瞭解大致的流程和設定屬性。

建立Notification大致需要以下四步:
1.從系統服務中獲得通知管理器NotificationManager物件
2.建立Notification
3.定義一個PendingIntent,將PendingIntent關聯到Notification
4.通過通知管理器來發起通知

程式碼如下:

這裡寫圖片描述

java程式碼:

    import android.app.AlarmManager;
    import android.app.PendingIntent;
    import android.app.TimePickerDialog;
    import android.content.Context;
    import android.content.Intent;
    import android.graphics.Color;
    import android.os.Build;
    import android.support
.annotation.RequiresApi; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.RemoteViews; import android.widget.TimePicker; import java.util.Calendar; import android.media.MediaPlayer; import android.app
.PendingIntent; import android.app.Notification; import android.app.NotificationManager; import android.support.v7.app.NotificationCompat; public class MainActivity extends AppCompatActivity { private PendingIntent pendingIntent; private AlarmManager alarmManager; private MediaPlayer mediaPlayer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void sendinform(View view){ NotificationManager notificationManager= (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); //例項化通知 NotificationCompat.Builder builder=new NotificationCompat.Builder(this); //通知欄的標題,內容 builder.setContentTitle("大事件"); builder.setContentText("今天情人節,不要放孔明燈!"); //設定通知LED燈 builder.setDefaults(NotificationCompat.DEFAULT_ALL); //點選之後 該條通知將會移除 builder.setAutoCancel(true); builder.setSmallIcon(android.R.drawable.ic_media_play); builder.setContentIntent(PendingIntent.getActivity(this,0x102,new Intent(this,AlarmActivity.class),0)); Notification notification=builder.build(); //傳送通知 notificationManager.notify(0x101,notification); } public void senddefinition(View view){ //設定圖示,後面的自定義佈局的圖片會覆蓋它,但還是得設定,不然不會顯示到通知欄 Notification notification = new Notification(); notification.icon=R.drawable.b; notification.tickerText="金正恩長兄金正男被殺"; notification.when = System.currentTimeMillis(); notification.flags = Notification.FLAG_AUTO_CANCEL; // 設定通知欄佈局裡面控制元件的屬性 RemoteViews remoteViews=new RemoteViews(getPackageName(),R.layout.activity_notification); remoteViews.setImageViewResource(R.id.iv_notification_view, R.drawable.b); // remoteViews.setTextColor(R.id.ll_notification_layout, Color.BLUE); remoteViews.setTextViewText(R.id.tv_notification_view, "金正恩長兄金正男被殺"); // remoteViews.setTextViewTextSize(R.id.tv_notification_view, 1, 15); remoteViews.setTextViewText(R.id.tv_notification_view2, "金正男在吉隆坡國際機場遭兩女間諜遇害"); // PendingIntent有4種flag. // - FLAG_ONE_SHOT 只執行一次 // - FLAG_NO_CREATE 若描述的Intent不存在則返回NULL值 // - FLAG_CANCEL_CURRENT 如果描述的PendingIntent已經存在,則在產生新的Intent之前會先取消掉當前的 // - FLAG_UPDATE_CURRENT 總是執行,這個flag用的最多 PendingIntent pendingIntent = PendingIntent.getActivity( this, 0, new Intent(this,AlarmActivity.class), PendingIntent.FLAG_UPDATE_CURRENT); remoteViews.setOnClickPendingIntent(R.id.iv_notification_view, pendingIntent); notification.contentView = remoteViews; notification.contentIntent = pendingIntent; NotificationManager manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); manager.notify(1, notification); } }

自定義通知欄的xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:id="@+id/ll_notification_layout"
    android:layout_height="match_parent">

<LinearLayout
    android:layout_weight="2"
    android:layout_width="match_parent"
    android:layout_height="0dp">
    <ImageView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:id="@+id/iv_notification_view"
        />

  <TextView
      android:layout_marginLeft="20dp"
      android:layout_width="0dp"
      android:layout_height="wrap_content"
      android:layout_weight="3"
      android:textSize="20sp"
      android:gravity="center"
      android:id="@+id/tv_notification_view"

    />

    </LinearLayout>


    <TextView
        android:layout_marginLeft="20dp"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:textSize="15sp"
        android:id="@+id/tv_notification_view2"
        />

</LinearLayout>

真機效果圖:

這裡寫圖片描述

這裡寫圖片描述