2011-02-17 105 views
24

我到处搜索过,但无法在SDK或Google上找到关于如何执行此操作的任何内容。我知道这是可能的,因为所有的自定义发射器都可以通过按钮按钮(LauncherPro,ADW等)来完成。如何以编程方式在Android中打开/关闭通知?

谢谢。

+0

不getSystemService( “状态栏”)返回一个对象? – 2011-02-17 14:04:09

+0

是的,它的确如此。但是我不能将它映射到StatusBarManager,因为它不是公共API的一部分。所以,现在我只是把它当作“Object”类型。我可以做些什么来使其可用? – user496854 2011-02-17 15:25:42

回答

17

answer from Ashwin作品的Android版本低于4.2.2(即低于17版)。在4.2.2中,“expand”方法更改为“expandNotificationsPanel”。如果您不使用4.2.2及更高版本的方法名称,您将得到一个空指针异常。因此,代码应该是:

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的一部分,所以这不能保证在今后的工作中,很多人会建议对这样做。

-1

下面是从Android的Launcher的showNotifications方法:

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

(其中,因为罗比表示,是 “状态栏” 系统服务)。

+0

这不是Android SDK的一部分。 – CommonsWare 2011-02-17 14:24:28

+2

这不起作用,因为公共API – user496854 2011-02-17 15:26:43

+0

中没有StatusBarManager类。 CommonsWare是对的;我只是在浏览源代码而不是相关的SDK,对不起。 – 2011-02-17 15:39:09

4

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

你想要的东西无法使用Android SDK完成。

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

所有的“自定义启动程序”都绕过了SDK,使用@Yoni Samlan在其他问题的答案中提出的技术变体。不属于SDK的东西可以由设备制造商移除,由未来版本的核心Android团队取代等。

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

14

是的,你可以添加以下代码到你需要的地方执行

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" /> 
21

你可以编程方式关闭通知抽屉通过广播ACTION_CLOSE_SYSTEM_DIALOGS意图。

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

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

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

下面的代码对我的作品上运行Android 5.0的Nexus 4:

Intent closeIntent = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); 
context.sendBroadcast(closeIntent); 
相关问题