您的位置:首页 > 产品设计 > UI/UE

ANDROID 隐藏 任务栏 systemui systembar 全屏显示

2013-03-12 10:40 519 查看
说说自己的经历吧:

(1)开始为了隐藏systemui利用过 kill com.android.systemui线程进行的隐藏,但是总有一个com.android.systemui.SystemUIService进行启动

                          我开始还是比较的坏的就弄了一个监听每500毫秒进行检测一次进行查杀

 

代码:

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);// 获得activity管理

List<RunningAppProcessInfo> infos = am.getRunningAppProcesses();
for (RunningAppProcessInfo runningAppProcessInfo : infos) {
System.out.println("processName:====================:"+runningAppProcessInfo.processName);
if(runningAppProcessInfo.processName.equals("com.android.systemui")){
System.out.println("processpid: "+runningAppProcessInfo.pid);
String str = "/system/bin/kill "+runningAppProcessInfo.pid;
System.out.println("str:  "+str);
Process process;
Runtime runtime;
try {
runtime = Runtime.getRuntime();
process = runtime.exec("su");
System.out.println("01010101010");
process = runtime.exec(str);
int exitVal = process.waitFor();
System.out.println("66666666666666666666666");
break;
} catch (IOException e) {
System.out.println(e);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


 

(2)通过长时间研究我研究到了SystemUI.apk,我就就想对这个东西进行操作了。开始我删除掉后,systeui还是运行着,我就用kill命令直接杀掉这个线程,然后就开始报错了。说找不到SystemUI什么的。及其的烦人,不过重新启动就可以了。就没有那个错误了。

苍天真的不负有心人,本人找到一个更好的方法,原来大概是这样的:通过命令移除SystemUI.apk放到一个文件夹中,然后重新启动com.systemui.SystemUIService这个服务

就可以了。如果想恢复就把SystemUI.apk移到/system/app/下并且重新启动com.systemui.SystemUIService这个服务

代码参照:

File systemUIapkFile = new File("/system/app/SystemUI.apk");

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

final ToggleButton systemBarToggleButton = (ToggleButton) findViewById(R.id.systemBarToggleButton);
systemBarToggleButton.setChecked(systemUIapkFile.exists());
systemBarToggleButton.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
systemBarToggleButton.setChecked(isChecked);
switchSystemUI();
if (isChecked) {
Intent intent = new Intent();
intent.setComponent(new ComponentName(
"com.android.systemui",
"com.android.systemui.SystemUIService"));
startService(intent);
}
}
});
}

private void switchSystemUI() {
try {
Process p;
p = Runtime.getRuntime().exec("su");

// Attempt to write a file to a root-only
DataOutputStream os = new DataOutputStream(p.getOutputStream());
os.writeBytes("mount -o remount,rw /dev/block/stl6 /system\n");
if (systemUIapkFile.exists()) {
os.writeBytes("mv /system/app/SystemUI.apk /system/SystemUI.apk\n");
}else {
os.writeBytes("mv /system/SystemUI.apk /system/app/SystemUI.apk\n");
}
os.writeBytes("mount -o remount,ro /dev/block/stl6 /system\n");

// Close the terminal
os.writeBytes("exit\n");
os.flush();
p.waitFor();
} catch (Exception e) {
ShowErrorGlobal(e);
}
}

protected void ShowErrorGlobal(Exception e) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream stream = new PrintStream(baos);
e.printStackTrace(stream);
stream.flush();

new AlertDialog.Builder(this)
.setIconAttribute(android.R.attr.alertDialogIcon)
.setTitle("Epic fail")
.setMessage("Error: " + new String(baos.toByteArray())).show();
}


(3)

这种更牛逼,什么还自己通过命令操作。都是也路子。人家google给咱提供的有接口直接用就行啊

直接代码参考吧:

int flag = context.getWindow().getDecorView().getSystemUiVisibility();
//		int fullScreen = View.SYSTEM_UI_FLAG_SHOW_FULLSCREEN;
int fullScreen = 0x8;
if(visible) {
if((flag & fullScreen) != 0) {
context.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
}
} else {
if((flag & fullScreen) == 0) {
context.getWindow().getDecorView().setSystemUiVisibility(flag | fullScreen);
}
}


如果有什么疑问可以留下,尽量解决。

点击打开链接

源码下载地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: