使用setVisibility(NotificationCompat.VISIBILITY_SECRET) & setPriority(Notification.PRIORITY_MIN):
mNotification = new Notification.Builder(getApplicationContext())
.setContentTitle("Title")
.setContentText("Subtitle")
.setSmallIcon(R.mipmap.ic_launcher)
.setContentIntent(contentIntent)
.setOngoing(true)
.setVisibility(NotificationCompat.VISIBILITY_SECRET)
.setPriority(Notification.PRIORITY_MIN)
.build();
对于VISIBILITY_SECRET:
通知可见性:不要在安全的锁屏上显示此通知的任何部分。
对于PRIORITY_MIN:
最低优先级;这些项目可能不会显示给用户,除非在特殊情况下,例如详细的通知日志。
如果您仍想在状态栏中显示图标,则没有此选项,但您可以通过订阅 USER_PRESENT 和 SCREEN_OFF 事件来构建一个简单的解决方法:
- 收到
SCREEN_OFF 事件时取消通知
- 收到
USER_PRESENT时重新通知
注册BroadcastReceiver并通知默认通知:
mNotificationmanager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.USER_PRESENT");
filter.addAction("android.intent.action.SCREEN_OFF");
registerReceiver(mBroadcastReceiver, filter);
Intent notificationIntent = new Intent(this, YourActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
mNotification = new Notification.Builder(getApplicationContext())
.setContentTitle("Title")
.setContentText("Subtitle")
.setSmallIcon(R.mipmap.ic_launcher)
.setContentIntent(contentIntent)
.setOngoing(true)
.build();
mNotificationmanager.notify(NOTIF_ID, mNotification);
在BroadcastReceiver 取消SCREEN_OFF,通知USER_PRESENT:
private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.v("test", intent.getAction());
if (intent.getAction().equals("android.intent.action.SCREEN_OFF")) {
mNotificationmanager.cancel(NOTIF_ID);
} else if (intent.getAction().equals("android.intent.action.USER_PRESENT")) {
mNotificationmanager.notify(NOTIF_ID, mNotification);
}
}
};