为了账号安全,请及时绑定邮箱和手机立即绑定

防止状态栏扩展

防止状态栏扩展

慕神8447489 2019-11-28 12:50:05
是否有任何方法可以防止用户滑动状态栏(展开)或倒塌?我正在尝试更换锁屏,似乎这是一项必备功能。有没有可能不需要root特权的方法?
查看完整描述

3 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

简短的答案:这是不可能的!


现在您是否有兴趣知道为什么这是不可能的:


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


资料来源:个人经验:-)


查看完整回答
反对 回复 2019-11-28
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

首先,如果您的应用程序未通过手机的rom认证进行签名,则无法修改状态栏;如果尝试对其进行修改,则会出现安全异常。


更新:在新的API中,方法是“ collapsePanels”而不是“ collapse”。


经过几个小时的工作,我发现的唯一方法是重写活动的“ onWindowFocusChanged”方法,并在失去焦点时(也许用户已触摸通知栏),强制折叠StatusBar,这是代码(适用于Defy + 2.3.5)。


您需要在清单上声明以下权限:


 <uses-permission android:name="android.permission.EXPAND_STATUS_BAR"/> 

并重写以下方法:


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)

        {

        }

}

更新:您还必须通过重写onWindowFocusChanged方法来使用自己的自定义警报对话框,因为警报对话框具有自己的焦点。


查看完整回答
反对 回复 2019-11-28
  • 3 回答
  • 0 关注
  • 432 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信