如何以编程方式在Android中打开/closures通知?

我到处search,但无法find任何在SDK或谷歌上如何做到这一点。 我知道这是可能的,因为所有的自定义发射器都可以通过button按下(LauncherPro,ADW等)。

谢谢。

Solutions Collecting From Web of "如何以编程方式在Android中打开/closures通知?"

Ashwin的答案适用于低于4.2.2的Android版本(即低于版本17)。 在4.2.2中,“expand”方法改为“expandNotificationsPanel”。 如果您不使用4.2.2及以上版本的方法名称,您将得到一个空指针exception。 所以代码应该是:

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的一部分,所以这不能保证在将来工作,许多人会build议不要这样做。

您可以通过广播ACTION_CLOSE_SYSTEM_DIALOGS意图以编程方式closures通知抽屉。

这导致“临时系统对话”被解雇。 从文档:

临时系统对话框的一些示例是通知窗口阴影和最近的任务对话框。

这不需要任何权限,并且自Android 1.0以来显然已经可用。

以下代码适用于运行Android 5.0的Nexus 4:

 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中打开/closures通知?

你想要的东西不能用Android SDK完成。

我知道这是可能的,因为所有的cuustome发射器都可以通过button按下(LauncherPro,ADW等)。

所有的“自定义发射器”绕过SDK,使用@Yoni Samlan在另一个回答你的问题时提出的技术。 不属于SDK的东西可以由设备制造商移除,在未来的版本中由Android核心团队取代。

我会争辩说,你想要的应该可以通过SDK; 否则,它真的限制了可选的主屏幕实现。 然而,你和我想要什么都不算什么。

以下是Android的Launcher的showNotifications方法:

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

(正如Robby指出的那样,它是“状态栏”系统服务)。