说说自己的经历吧:
(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); } }
如果有什么疑问可以留下,尽量解决。
点击打开链接
源码下载地址