Android - 隐藏通知栏但保留导航栏

时间:2014-07-29 08:04:04

标签: android reflection root android-notifications statusbar

我为Android创建了一种Kiosk application,但我必须停用通知栏,以避免客户快速访问WifiBluetoothGPS访问。

到目前为止,我已经根据设备生根并禁用了com.android.systemui包来实现这一目标。主要问题是,因为我只有虚拟按钮来导航,所以我无法返回或进入主屏幕。基本上我一直坚持申请,我无能为力。

我已使用该代码禁用SystemUI包:

pm disable com.android.systemui

然后我尝试使用notification bar停用Java reflection API。到目前为止,我已经制作了该代码,但它并没有起作用。基本上,它只会引发exception说我的申请没有获得所需的权限android.permission.STATUS_BAR,而是在我的Manifest中写的。

try
{
    Object service  = getSystemService("statusbar");
    Class<?> statusbarManager = Class.forName("android.app.StatusBarManager");
    Method collapse = statusbarManager.getMethod("disable", int.class);
    collapse.setAccessible(true);
    collapse.invoke(service, 0x00000001);
}
catch (Exception e)
{
    e.printStackTrace();
}

我是否在代码的这一部分出了问题?

另一种方法是创建一个System overlay来创建我自己的navigation bar,但我还没有找到一种正确的方法来触发KeyEvent到整个系统,就好像这是真实的&#34;纽扣。但是,我并不认为这将是最好和最干净的解决方案。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

在styles.xml中:

<resources>
   <style name="Theme.FullScreen" parent="@android:style/Theme.Holo">
   <item name="android:windowNoTitle">false</item>
   <item name="android:windowFullscreen">true</item>
   </style>
</resources>

请参阅清单中的自定义样式:

<activity android:name=".MyActivity" android:theme="@style/Theme.FullScreen"/>

或以编程方式执行

// Remove System bar (and retain title bar)
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
                 WindowManager.LayoutParams.FLAG_FULLSCREEN);
在代码中

看起来像

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;

public class ActivityName extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Remove System bar (and retain title bar)
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
        // Set your layout
        setContentView(R.layout.main);
    }
}