我到处搜索,但在SDK或Google上找不到任何关于如何执行此操作的内容。我知道这是可能的,因为所有自定义发射器都可以通过按钮按下(LauncherPro,ADW等)来完成。
谢谢。
您可以通过广播ACTION_CLOSE_SYSTEM_DIALOGS
意图以编程方式关闭通知抽屉。
这导致“临时系统对话”被驳回。从文档:
临时系统对话框的一些示例是通知窗口阴影和最近的任务对话框。
这不需要任何权限,并且自Android 1.0以来显然已经可用。
以下代码适用于运行Android 5.0的Nexus 4:
Intent closeIntent = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
context.sendBroadcast(closeIntent);
answer from Ashwin适用于低于4.2.2的Android版本(即低于版本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的一部分,因此不保证将来可以使用,许多人会建议不要这样做。
是的,您可以将此代码添加到您希望它执行的任何位置
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;否则,它确实限制了替代的主屏幕实现。但是,你和我想要的并不是那么重要。
遗憾的是,仍然没有官方API(请求here),但是现在,您可以使用此代码,我已经从我找到的所有答案中概括了:
// based on https://gist.github.com/XinyueZ/7bad2c02be425b350b7f
// requires permission: "android.permission.EXPAND_STATUS_BAR"
@SuppressLint("WrongConstant", "PrivateApi")
fun setExpandNotificationDrawer(context: Context, expand: Boolean) {
try {
val statusBarService = context.getSystemService("statusbar")
val methodName =
if (expand)
if (Build.VERSION.SDK_INT >= 17) "expandNotificationsPanel" else "expand"
else
if (Build.VERSION.SDK_INT >= 17) "collapsePanels" else "collapse"
val statusBarManager: Class<*> = Class.forName("android.app.StatusBarManager")
val method: Method = statusBarManager.getMethod(methodName)
method.invoke(statusBarService)
} catch (e: Exception) {
e.printStackTrace()
}
}
这是Android qazxsw poi中的show Notifications方法:
Launcher
(正如Robby所说,这是“状态栏”系统服务)。