我知道我可以通过反思扩展通知栏
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( getSystemService( "statusbar" ) );
但是,如果它已折叠,有没有办法展开它,如果它已经展开则会折叠它?
在android文档中有一个StatusBarManager的切换功能,但它对我不起作用。
EDITED
我从绑定服务中调用此函数。
答案 0 :(得分:2)
我认为您可能缺少所需的权限。确保您的Manifest.xml中具有EXPAND_STATUS_BAR权限:
<uses-permission android:name="android.permission.EXPAND_STATUS_BAR" />
环顾四周,我找到了这段代码:
Object sbservice = getSystemService( "statusbar" );
Class<?> statusbarManager = Class.forName( "android.app.StatusBarManager" );
Method showsb = statusbarManager.getMethod( "expand" );
showsb.invoke( sbservice );
您可能想尝试一下。
编辑:
要实际检测它是否已关闭,请参阅this answer。这是它的样子:
使用以下代码覆盖活动中的onWindowFocusChanged()方法:
在权限中:
<uses-permission android:name="android.permission.EXPAND_STATUS_BAR" />
压倒一切:
@Override
public void onWindowFocusChanged(boolean hasFocus)
{
try
{
if(!hasFocus)
{
Object service = getSystemService("statusbar");
Class<?> statusbarManager = Class.forName("android.app.StatusBarManager");
Method collapse = statusbarManager.getMethod("collapse");
collapse .setAccessible(true);
collapse .invoke(service);
}
}
catch(Exception ex)
{
if(!hasFocus)
{
try {
Object service = getSystemService("statusbar");
Class<?> statusbarManager = Class.forName("android.app.StatusBarManager");
Method collapse = statusbarManager.getMethod("collapse");
collapse .setAccessible(true);
collapse .invoke(service);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ex.printStackTrace();
}
}
}
答案 1 :(得分:0)
以下代码适用于新旧Android操作系统。
您需要在EXPAND_STATUS_BAR
中启用AndroidManifest.xml
权限。
try {
Object sbservice = getSystemService("statusbar");
Class<?> statusbarManager = Class.forName("android.app.StatusBarManager");
Method expandMethod;
expandMethod = statusbarManager.getMethod(Build.VERSION.SDK_INT >= 17 ? "expandNotificationsPanel" : "expand");
expandMethod.invoke(sbservice);
} catch (Exception ex) {
ex.printStackTrace();
}