3 回答
TA贡献1851条经验 获得超3个赞
简短的答案:这是不可能的!
现在您是否有兴趣知道为什么这是不可能的:
操作系统状态栏有两个权限:EXPAND_STATUS_BAR和STATUS_BAR。前者可以由任何应用程序请求,但后者保留给使用平台签名签名的应用程序(系统应用程序,而不是第三方)。这是可能的展开/折叠系统状态栏(请参阅“如何打开或意图通过拓展状态栏?”),但需要注意的是反射必需的,因为StatusBarManager类不是SDK的一部分。没有上述STATUS_BAR权限的应用程序无法访问Android拨号程序用来禁止状态栏扩展的disable方法。
资料来源:个人经验:-)
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方法来使用自己的自定义警报对话框,因为警报对话框具有自己的焦点。
- 3 回答
- 0 关注
- 426 浏览
添加回答
举报