我正在为Android创建一种Kiosk application
,但我必须禁用通知栏以避免客户访问Wifi
, Bluetooth
或GPS
快速访问。
到目前为止,我已经扎根设备并禁用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);
}
}