Intereting Posts

Как я могу программно открывать / закрывать уведомления в Android?

Я искал везде, но не могу найти что-либо в SDK или в Google о том, как это сделать. Я знаю, что это возможно, потому что все пользовательские пусковые установки могут сделать это с помощью нажатия кнопки (LauncherPro, ADW и т. Д.).

Благодарю.

Solutions Collecting From Web of "Как я могу программно открывать / закрывать уведомления в Android?"

Ответ от Ashwin работает для версий Android ниже 4.2.2 (т.е. ниже версии 17). В 4.2.2 метод «expand» был изменен на «expandNotificationsPanel». Если вы не используете это имя метода для 4.2.2 и выше, вы получите исключение Null Pointer. Таким образом, код должен быть:

Object sbservice = getSystemService( "statusbar" ); 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( sbservice ); 

И соответствующее разрешение должно быть добавлено в AndroidManifest .

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

Очевидно, что это не является частью опубликованного API, поэтому в будущем это не гарантируется, и многие люди не советуют это делать.

Вы можете программно закрыть ящик уведомлений, передавая намерение ACTION_CLOSE_SYSTEM_DIALOGS .

Это приводит к увольнению «временных системных диалогов». Из документации:

Некоторые примеры временных системных диалогов – это окно окна уведомлений и диалог последних задач.

Это не требует никаких разрешений и, по-видимому, доступно с Android 1.0.

Следующий код работает для меня на Nexus 4 под управлением Android 5.0:

 Intent closeIntent = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); context.sendBroadcast(closeIntent); 

Да, вы можете добавить этот код туда, куда хотите его выполнить.

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

И добавьте это разрешение

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

Как я могу программно открывать / закрывать уведомления в Android?

То, что вы хотите, не может быть выполнено с помощью Android SDK.

Я знаю, что это возможно, потому что все пусковые установки cuustome могут сделать это с помощью нажатия кнопки (LauncherPro, ADW и т. Д.).

Все «пользовательские пусковые установки» обходят SDK, используя вариацию техники, которую @Yoni Samlan предложил в другом ответе на ваш вопрос. Вещи, которые не являются частью SDK, могут быть удалены производителями устройств, заменены основной командой Android в будущих выпусках и т. Д.

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

Вот метод showNotifications от Android Launcher :

 private void showNotifications() { final StatusBarManager statusBar = (StatusBarManager) getSystemService(STATUS_BAR_SERVICE); if (statusBar != null) { statusBar.expand(); } } 

(Который, как указал Робби, является системной службой «statusbar»).