其他程序中禁止或者自动下拉状态栏

来源:互联网 发布:网络水军联系方式 编辑:程序博客网 时间:2024/04/28 04:30

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—状态栏对外”

0 0
原创粉丝点击