2016-07-31 2 views
3

Как я могу скрыть постоянное уведомление в своем приложении?Скрыть постоянное уведомление

В настоящее время мое уведомление показано также на заблокированном экране, но я не хочу. Я хочу, чтобы уведомление появлялось только при прокрутке меню уведомлений.

Я знаю, что это возможно, потому что у меня есть приложение под названием WiFi ADB, и он делает именно это. (TouchWiz Android 5.0.1)

Это код моего уведомления (он находится в обслуживании):

@Override 
public int onStartCommand(Intent intent, int _flags, int _startId) { 
    Intent notificationIntent = new Intent(this, MainActivity.class); 
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); 

    noti = new Notification.Builder(getApplicationContext()) 
      .setContentTitle("Title") 
      .setContentText("Subtitle") 
      .setSmallIcon(R.mipmap.ic_launcher) 
      .setContentIntent(contentIntent) 
      .build(); 
    startForeground(1234, noti); 
    mLocalBroadcastManager.sendBroadcast(new Intent(SERVICE_STARTED)); 
    return Service.START_STICKY; 
} 
+0

Возможный дубликат [Как подавить уведомление на экране блокировки в Android 5 (Lollipop), но пусть это в области уведомлений?] (http://stackoverflow.com/questions/27035202/how-to-suppress-notification-on-lock-screen-in-android-5-lollipop-but-let-it- i) –

ответ

2

Использование 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); 
     } 

    } 
}; 
+0

Чем К вам! это работает! Но есть ли способ показать значок в строке состояния? – Fr0z3n

+0

Я обновил альтернативное решение, если вы хотите иметь значок уведомлений в строке состояния, запись уведомлений в меню уведомлений, не имея его в lockscreen –