通知Notification

簡單Notification

  • 創建Builder
NotificationCompat.Builder mBuilder =
        new NotificationCompat.Builder(this)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle("My notification")
                .setContentText("Hello World!");
  • 添加Active
// 2. 創建點擊回調動作
Intent resultIntent = new Intent(this, ResultActivity.class);
// Because clicking the notification opens a new ("special") activity, there's
// no need to create an artificial back stack.
PendingIntent resultPendingIntent =
        PendingIntent.getActivity(
                this,
                0,
                resultIntent,
                PendingIntent.FLAG_UPDATE_CURRENT
        );
mBuilder.setContentIntent(resultPendingIntent);
  • 通知
// Builds the notification and issues it.
mNotifyMgr.notify(101, mBuilder.build());
  • 後臺調用
// Creates an Intent for the Activity
Intent resultIntent = new Intent(this, ResultActivity.class);
// Sets the Activity to start in a new, empty task
resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
        Intent.FLAG_ACTIVITY_CLEAR_TASK);
// Creates the PendingIntent
notifyIntent = PendingIntent.getActivity(
        this,
        0,
        resultIntent,
        PendingIntent.FLAG_UPDATE_CURRENT
);

移除Notification

  1. 調用後自動清除
builder.setAutoCancel(true);
  1. 指定的 notification ID調用了cancel()
  2. 指定的 notification ID調用了cancelAll()

接下來的幾個樣式就不說了,簡單,先貼圖再看代碼

BigView之Text

  • 調用bigTextNotification

BigView之Picture

  • 調用bigPictureNotification

BigView之Inbox

  • 調用bigInboxNotification

BigView之Custom

  • 調用customNotification
    • 大圖
    • 小圖

Code

代碼部分

package com.xuie.notificationdemo;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Binder;
import android.os.IBinder;
import android.support.v4.app.NotificationCompat;
import android.widget.RemoteViews;

public class MyService extends Service {
    PendingIntent notifyIntent;
    NotificationManager mNotificationManager;

    @Override
    public void onCreate() {
        super.onCreate();
        // Creates an Intent for the Activity
        Intent resultIntent = new Intent(this, ResultActivity.class);
        // Sets the Activity to start in a new, empty task
        resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
                Intent.FLAG_ACTIVITY_CLEAR_TASK);
        // Creates the PendingIntent
        notifyIntent = PendingIntent.getActivity(
                this,
                0,
                resultIntent,
                PendingIntent.FLAG_UPDATE_CURRENT
        );

        // Notifications are issued by sending them to the
        // NotificationManager system service.
        mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        // Builds an anonymous Notification object from the builder, and
        // passes it to the NotificationManager


        IntentFilter filter = new IntentFilter();
        filter.addAction(REMOTE_PLAY);
        filter.addAction(REMOTE_NEXT);
        filter.addAction(REMOTE_PREVIOUS);
        registerReceiver(receiver, filter);
    }

    public void startNotification() {
        // Instantiate a Builder object.
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this);

        // Puts the PendingIntent into the notification builder
        builder.setContentIntent(notifyIntent);

        builder.setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle("Service Notification")
                .setContentText("Hello World!");

        // 設置自動清除Notification。其它方法:指定的 notification ID調用了cancel(),或cancelAll()
        builder.setAutoCancel(true);

        mNotificationManager.notify(101, builder.build());
    }

    public void bigTextNotification() {
        NotificationCompat.BigTextStyle textStyle = new NotificationCompat.BigTextStyle()
                .setBigContentTitle("BigTextContentTitle")
                .setSummaryText("SummaryText")
                .bigText("I am Big Text!");

        Notification notification = new NotificationCompat.Builder(this)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setTicker("show big view text") // 第一次提示消息的時候顯示在通知欄上
                .setContentInfo("content info")
                .setContentTitle("ContentTitle").setContentText("ContentText")
                .setStyle(textStyle)
                .setAutoCancel(true).setDefaults(Notification.DEFAULT_ALL)
                .setContentIntent(notifyIntent)
                .setAutoCancel(true)
                .build();
        mNotificationManager.notify(101, notification);
    }

    public void bigPictureNotification() {
        NotificationCompat.BigPictureStyle pictureStyle = new NotificationCompat.BigPictureStyle()
                .setBigContentTitle("BigPictureContentTitle")
                .setSummaryText("SummaryText")
                .bigPicture(resource2Bitmap(this, R.mipmap.ic_big_view));

        Notification notification = new NotificationCompat.Builder(this)
                .setLargeIcon(resource2Bitmap(this, R.mipmap.ic_big_view))// 這個與setSmallIcon相沖? - 測試手機Nexus5
                .setSmallIcon(R.mipmap.ic_launcher)
                .setTicker("show big view picture")
                .setContentInfo("content info")
                .setContentTitle("ContentTitle")
                .setContentText("ContentText")
                .setStyle(pictureStyle)
                .setAutoCancel(true)
                .setDefaults(Notification.DEFAULT_ALL)
                .build();
        mNotificationManager.notify(101, notification);
    }

    public void bigInboxNotification() {
        NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
        inboxStyle.setBigContentTitle("BigInboxContentTitle").setSummaryText("SummaryText");
        for (int i = 0; i < 5; i++) {
            inboxStyle.addLine("news" + i);
        }

        Notification notification = new NotificationCompat.Builder(this)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setTicker("show big inbox picture")
                .setContentInfo("content info")
                .setContentTitle("ContentTitle")
                .setContentText("ContentText")
                .setStyle(inboxStyle)
                .setAutoCancel(true)
                .setDefaults(Notification.DEFAULT_ALL)
                .build();
        mNotificationManager.notify(101, notification);
    }

    public void customNotification() {
        PendingIntent playIntent = PendingIntent.getBroadcast(this, 0, new Intent(REMOTE_PLAY), PendingIntent.FLAG_UPDATE_CURRENT);
        PendingIntent nextIntent = PendingIntent.getBroadcast(this, 0, new Intent(REMOTE_NEXT), PendingIntent.FLAG_UPDATE_CURRENT);
        PendingIntent previousIntent = PendingIntent.getBroadcast(this, 0, new Intent(REMOTE_PREVIOUS), PendingIntent.FLAG_UPDATE_CURRENT);

        RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.custom_notification);
        remoteViews.setOnClickPendingIntent(R.id.play_pause, playIntent);
        remoteViews.setImageViewResource(R.id.play_pause, R.mipmap.pause);
        remoteViews.setOnClickPendingIntent(R.id.next, nextIntent);
        remoteViews.setOnClickPendingIntent(R.id.previous, previousIntent);

        RemoteViews remoteViews_expand = new RemoteViews(getPackageName(), R.layout.custom_expanded_notification);
        remoteViews_expand.setOnClickPendingIntent(R.id.play_pause, playIntent);
        remoteViews_expand.setOnClickPendingIntent(R.id.next, nextIntent);
        remoteViews_expand.setOnClickPendingIntent(R.id.previous, previousIntent);
        remoteViews_expand.setTextViewText(R.id.new_text, "New Add Layout");

        NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
                .setWhen(System.currentTimeMillis())
                .setSmallIcon(R.mipmap.ic_launcher)
//                .setContentIntent(notifyIntent)
//                .setOngoing(true)
                .setAutoCancel(true)
                .setTicker("music is playing");

        Notification notification = builder.build();
        notification.contentView = remoteViews;
        notification.bigContentView = remoteViews_expand;

        mNotificationManager.notify(102, notification);
    }


    public static final String REMOTE_PLAY = "remote play";
    public static final String REMOTE_PREVIOUS = "remote previous";
    public static final String REMOTE_NEXT = "remote next";

    private BroadcastReceiver receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (action.equals(REMOTE_PLAY)) {
                System.out.println("REMOTE_PLAY");
            } else if (action.equals(REMOTE_NEXT)) {
                System.out.println("REMOTE_NEXT");
            } else if (action.equals(REMOTE_PREVIOUS)) {
                System.out.println("REMOTE_PREVIOUS");
            }
        }
    };

    @Override
    public void onDestroy() {
        super.onDestroy();
        unregisterReceiver(receiver);
    }

    class MyBinder extends Binder {
        MyService getService() {
            return MyService.this;
        }
    }

    @Override
    public IBinder onBind(Intent intent) {
        return new MyBinder();
    }


    public static Bitmap resource2Bitmap(Context context, int drawId) {
        return BitmapFactory.decodeResource(context.getResources(), drawId);
    }

}

下載

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章