防止状态栏扩展

是否有任何方法可以防止用户滑动状态栏(展开)或倒塌?

我正在尝试更换锁屏,似乎这是一项必备功能。有没有可能不需要root特权的方法?


慕神8447489
浏览 433回答 3
3回答

皈依舞

简短的答案:这是不可能的!现在您是否有兴趣知道为什么这是不可能的:操作系统状态栏有两个权限:EXPAND_STATUS_BAR和STATUS_BAR。前者可以由任何应用程序请求,但后者保留给使用平台签名签名的应用程序(系统应用程序,而不是第三方)。这是可能的展开/折叠系统状态栏(请参阅“如何打开或意图通过拓展状态栏?”),但需要注意的是反射必需的,因为StatusBarManager类不是SDK的一部分。没有上述STATUS_BAR权限的应用程序无法访问Android拨号程序用来禁止状态栏扩展的disable方法。资料来源:个人经验:-)

拉丁的传说

首先,如果您的应用程序未通过手机的rom认证进行签名,则无法修改状态栏;如果尝试对其进行修改,则会出现安全异常。更新:在新的API中,方法是“ collapsePanels”而不是“ collapse”。经过几个小时的工作,我发现的唯一方法是重写活动的“ onWindowFocusChanged”方法,并在失去焦点时(也许用户已触摸通知栏),强制折叠StatusBar,这是代码(适用于Defy + 2.3.5)。您需要在清单上声明以下权限:&nbsp;<uses-permission android:name="android.permission.EXPAND_STATUS_BAR"/>&nbsp;并重写以下方法:public void onWindowFocusChanged(boolean hasFocus){&nbsp; &nbsp; &nbsp; &nbsp; try&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(!hasFocus)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Object service&nbsp; = getSystemService("statusbar");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Class<?> statusbarManager = Class.forName("android.app.StatusBarManager");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Method collapse = statusbarManager.getMethod("collapse");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; collapse .setAccessible(true);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; collapse .invoke(service);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; catch(Exception ex)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; }}更新:您还必须通过重写onWindowFocusChanged方法来使用自己的自定义警报对话框,因为警报对话框具有自己的焦点。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android