4.3android源码
需求一:在其他程序中通过触发使状态栏自动下拉
解决:在触发事件中
mStatusBarManager = (StatusBarManager)this.getSystemService(Context.STATUS_BAR_SERVICE);
mStatusBarManager.expandNotificationsPanel();
解析:
mStatusBarManager.expandNotificationsPanel()方法最终会调用CommandQueue.Callbacks接口的animateExpandNotificationsPanel()在PhoneStatusBar中实现通知栏自动下拉。
Context.STATUS_BAR_SERVICE =“statusbar”;
需求二:在其他程序中通过触发禁止状态栏下拉功能
int flags = StatusBarManager.DISABLE_NONE;
mStatusBarManager = (StatusBarManager)this.getSystemService(Context.STATUS_BAR_SERVICE);
flags |= StatusBarManager.DISABLE_EXPAND;
mStatusBarManager.disable(flags);
若要再恢复下拉,只需public static final int DISABLE_NONE = 0x00000000;将flags置为此。
OTHER 1:
StatusBarManager.DISABLE_RECENT
StatusBarManager.DISABLE_NOTIFICATION_TICKER
StatusBarManager.DISABLE_SEARCH
OTHER 2:
自写个activity,通过其button组件的onClick方法出发状态栏自动下拉:
核心代码:
private void openExpand() {
try{
Object statuabarService = getSystemService("statusbar");
Class<?> statusbarManager = Class.forName(“android.app.StatusBarManager”);
Method expandStatusbar = null;
if (statuabarService !=null){
expandStatusbar=statusbarManager.getMethod("expandNotificationsPanel");
expandStatusbar.setAccessible(true);
expandStatusbar.invoke(statuabarService);
}
}catch(Exception e){
e.printStackTrace();
}
}
实际code时误写:
。。。。。
if (statuabarService !=null){
expandStatusbar=statusbarManager.getMethod("expandNotificationsPanel");
}
expandStatusbar.setAccessible(true);
expandStatusbar.invoke(statuabarService);
。。。。这样statuabarService =null,在expandStatusbar.setAccessible(true)会报空指针异常!
StatusBarManager类中提供的其他可调用方法:
collapsePanels() : 调用CommandQueue.Callbacks接口的animateCollapsePanels()在PhoneStatusBar中实现收起下拉的通知栏。
另外API>=4.3以上增加了expandSettingsPanel()方法用于实现设置通知栏的显示。
相关链接文章“statusbar—状态栏对外”