我为Android创建了一种Kiosk application
,但我必须停用通知栏,以避免客户快速访问Wifi
,Bluetooth
或GPS
访问。
到目前为止,我已经根据设备生根并禁用了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;纽扣。但是,我并不认为这将是最好和最干净的解决方案。
非常感谢任何帮助。
答案 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);
}
}