2014-09-25 4 views
4

Как отключить панель закрывающего уведомления после того, как пользователь нажмет на мое уведомление (на теле, а не на кнопках действий)?Как отключить закрытие панели уведомлений после нажатия на собственное уведомление

Я использую notificationBuilder.setOngoing(true) и notificationBuilder.setAutoCancel(false), но панель продолжает закрываться. Что я делаю неправильно?

Добавить: Я также использую этот код:

Intent intentNotification intentNotification = new Intent(contextApplication, MyBroadcast.class); 
    intentNotification.putExtra("reload", "1"); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(contextApplication, 0, intentNotification, PendingIntent.FLAG_UPDATE_CURRENT); 
    notificationBuilder.setContentIntent(pendingIntent); 

    notificationBuilder.setAutoCancel(false); // this not work because setContentIntent work 

Если удалить эту панель пребывания уведомления код, показывающий на экране. Когда я добавляю эту скрытую панель кода. Но мне нужно создать звонок в MyBroadcast, щелкнув по телу уведомления. Любой способ вызвать мою трансляцию, нажав на орган уведомления?

add2: На @NIPHIN ответ я пытаюсь восстановить natification панель внутри моего BroadcastReceiver:

if(android.os.Build.VERSION.SDK_INT <= 16) Class.forName("android.app.StatusBarManager").getMethod("expand").invoke(contextApplication.getSystemService("statusbar")); 
else Class.forName("android.app.StatusBarManager").getMethod("expandNotificationsPanel").invoke(contextApplication.getSystemService("statusbar")); 
// manifest need <uses-permission android:name="android.permission.EXPAND_STATUS_BAR"/> 

Эта работа правильна, но не ясно: панель первого близко и через несколько мгновений (секунд) восстановления.

Любой способ отключения закрывающей панели?

+0

Не могли бы вы найти способ решить эту проблему, не закрывая панель? – PedroD

+1

Нет, я не нашел решения, не закрывая панель :( –

+0

Я нашел, что вы можете использовать RemoteView для этого. Tomahawk Player имеет открытый исходный код и может это сделать. Посмотрите на файл PlaybackService.java, чтобы см., как они это делают. https://github.com/tomahawk-player/tomahawk-android.git https://github.com/tomahawk-player/tomahawk-android/blob/master/src/org /tomahawk/tomahawk_android/services/PlaybackService.java – PedroD

ответ

2

Используйте следующий код в строителю: -

setAutoCancel(false)

+0

Я пробую это, без успеха ... –

+0

Попробуйте этот путь http://developer.android.com/reference/android/app/Notification.html#FLAG_AUTO_CANCEL – nister

+0

Я добавляю выше информацию в вопросе –

2

использование notificationBuilder.setAutoCancel(false)

Чтобы закрыть строку состояния использовать этот

private int currentApiVersion = android.os.Build.VERSION.SDK_INT; 
Object sbservice = context.getSystemService("statusbar"); 

try { 
    Class<?> statusbarManager = Class.forName("android.app.StatusBarManager"); 
    if (currentApiVersion <= 16) { 
     Method collapse = statusbarManager.getMethod("collapse"); 
     collapse.invoke(sbservice); 
    } else { 
     Method collapse2 = statusbarManager.getMethod("collapsePanels"); 
     collapse2.invoke(sbservice); 
    } 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

согласно этому ответу Close status bar when button notification is clicked

+0

Я пробую это, не удастся ... –

+0

Мне нужно защитить панель от закрытия. Я добавляю выше информации в вопрос –

+0

use addAction() – NIPHIN

3

Я не думаю, что вы можете это сделать. Если вы видите AOSP код Notification мыши, сразу после щелчок обрабатывается в ClickHandler, Группа закрывается

Код ниже от BaseStatusBar.java

 try { 
      mBarService.onNotificationClick(mPkg, mTag, mId); 
     } catch (RemoteException ex) { 
     } 

     // close the shade if it was open 
     animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE); 
+0

Это возможно, потому что приложение Google Music может это сделать! http://i.stack.imgur.com/B5qh7.jpg – PedroD

+1

@PedroD в случае музыкального приложения, это не уведомление, которое нажимается, его удаленные представления. Вопрос был для всего уведомления – nandeesh

-1
nm.cancel(uniqueID); 

где нм ваш объект NotoficationManager

+0

Мне нужно отключить уведомление о закрытии, но вы включите и сделаете закрывающее уведомление. –

Смежные вопросы