我已经到处搜索了,但在SDK或Google上找不到如何做到这一点的任何信息。我知道通过按按钮(LauncherPro、ADW等)可以实现,所以这是可能的。
谢谢。
我已经到处搜索了,但在SDK或Google上找不到如何做到这一点的任何信息。我知道通过按按钮(LauncherPro、ADW等)可以实现,所以这是可能的。
谢谢。
ACTION_CLOSE_SYSTEM_DIALOGS
意图来以编程方式关闭通知抽屉。Intent closeIntent = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
context.sendBroadcast(closeIntent);
adb
:adb shell am broadcast -a android.intent.action.CLOSE_SYSTEM_DIALOGS
- jonleightonAshwin的答案 对于4.2.2以下版本的Android(即17版本以下)有效。在4.2.2中,“expand”方法已更改为“expandNotificationsPanel”。如果您不使用该方法名称用于4.2.2及以上版本,则会收到Null Pointer 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的一部分,因此未来不能保证其可用性,很多人会建议不要这样做。
是的,您可以将此代码添加到您希望执行的任何位置
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" />
很遗憾,目前还没有官方的API(在这里提出了请求,请考虑给它点赞),但现在您可以使用我从所有答案中归纳总结出来的代码:
// 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()
}
}
编辑:同时还有 adb 命令,这可能是另一种替代方法(摘自 这里):
折叠:
adb shell service call statusbar 2
扩展:
adb shell service call statusbar 1
Launcher
的showNotifications方法:private void showNotifications() {
final StatusBarManager statusBar = (StatusBarManager) getSystemService(STATUS_BAR_SERVICE);
if (statusBar != null) {
statusBar.expand();
}
}