2014-10-28 4 views
4

Я знаю, что я могу расширить панель уведомлений при отраженииПереключите панель уведомлений в андроиде

Class<?> statusbarManager = Class.forName("android.app.StatusBarManager"); 
    Method showsb; 
    if (Build.VERSION.SDK_INT >= 17) { 
     showsb = statusbarManager.getMethod("expandNotificationsPanel"); 
    } 
    else { 
     showsb = statusbarManager.getMethod("expand"); 
    } 
    showsb.invoke(getSystemService("statusbar")); 

Однако, есть способ, чтобы развернуть его, если он свернут, и свернуть его, если он уже развернут?

Существует функция переключения для StatusBarManager в документах android, но для меня это не работает.

EDITED

Я называю эту функцию из внутри связанной службы.

+0

Daniel, извините, что мой (неправильный) ответ закончился тем, что получил щедрость здесь. Я оглядывался, и я не мог найти ответ на это в любом месте в Интернете. Я продолжу смотреть! –

+0

Нет публичного API, чтобы делать то, что вы хотите. Даже если вы используете отражение, оно все еще ограничено, как вы выяснили. –

ответ

2

Я думаю, что у вас могут отсутствовать необходимые разрешения. Убедитесь, что у вас есть разрешение EXPAND_STATUS_BAR в вашем Manifest.xml:

<uses-permission android:name="android.permission.EXPAND_STATUS_BAR" /> 

Оглядевшись, я нашел этот код:

Object sbservice = getSystemService("statusbar"); 
Class<?> statusbarManager = Class.forName("android.app.StatusBarManager"); 
Method showsb = statusbarManager.getMethod("expand"); 
showsb.invoke(sbservice); 

Вы можете захотеть попробовать.

EDIT:

Для обнаружения на самом деле, если он выключен или нет, см this answer. Вот как это выглядит:

Override метод onWindowFocusChanged() в вашей деятельности на код ниже:

В разрешениях:

<uses-permission android:name="android.permission.EXPAND_STATUS_BAR" /> 

Первостепенной:

@Override 
public void onWindowFocusChanged(boolean hasFocus) 
{ 
    try 
    { 
     if(!hasFocus) 
     { 
      Object service = getSystemService("statusbar"); 
      Class<?> statusbarManager = Class.forName("android.app.StatusBarManager"); 
      Method collapse = statusbarManager.getMethod("collapse"); 
      collapse .setAccessible(true); 
      collapse .invoke(service); 
     } 
    } 
    catch(Exception ex) 
    { 
     if(!hasFocus) 
     { 
      try { 
       Object service = getSystemService("statusbar"); 
       Class<?> statusbarManager = Class.forName("android.app.StatusBarManager"); 
       Method collapse = statusbarManager.getMethod("collapse"); 
       collapse .setAccessible(true); 
       collapse .invoke(service); 

      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace();     
      } 
      ex.printStackTrace(); 
     } 
    } 
} 
+0

У меня уже есть правильные разрешения и вы можете успешно расширить панель. Однако мне нужен способ узнать, расширена ли панель или нет. – daniely

+1

Спасибо Alex, я на самом деле вызываю эту функцию из связанной службы. Поэтому я мог просматривать любое приложение, пока этот код запускается. Я обновил исходный вопрос, сожалею о недостающих деталях. – daniely

+0

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

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