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



我正在为Android创建一种Kiosk application,但我必须禁用通知栏以避免客户访问Wifi, BluetoothGPS快速访问。

到目前为止,我已经扎根设备并禁用com.android.systemui包来实现这一点。主要问题是,由于我只有虚拟按钮来导航,我无法返回或返回主屏幕。基本上我卡在应用程序上了,什么也做不了。

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

pm disable com.android.systemui

然后我试着用Java reflection API禁用notification bar。到目前为止,我已经做了代码,但它不工作。基本上,它只是抛出一个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到整个系统,就好像它是"真正的"按钮一样。但老实说,我不认为这将是最好和最干净的解决方案。

In 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>

参考您在mainfest中的自定义样式:

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

或TODO it编程只需执行

// 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);
    }
}

相关内容

  • 没有找到相关文章

最新更新