说说自己的经历吧:

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

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

代码:

  1. @Override

  2. publicvoidonCreate(BundlesavedInstanceState){

  3. super.onCreate(savedInstanceState);

  4. setContentView(R.layout.main);

  5. ActivityManageram=(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);//获得activity管理

  6. List<RunningAppProcessInfo>infos=am.getRunningAppProcesses();

  7. for(RunningAppProcessInforunningAppProcessInfo:infos){

  8. System.out.println("processName:====================:"+runningAppProcessInfo.processName);

  9. if(runningAppProcessInfo.processName.equals("com.android.systemui")){

  10. System.out.println("processpid:"+runningAppProcessInfo.pid);

  11. Stringstr="/system/bin/kill"+runningAppProcessInfo.pid;

  12. System.out.println("str:"+str);

  13. Processprocess;

  14. Runtimeruntime;

  15. try{

  16. runtime=Runtime.getRuntime();

  17. process=runtime.exec("su");

  18. System.out.println("01010101010");

  19. process=runtime.exec(str);

  20. intexitVal=process.waitFor();

  21. System.out.println("66666666666666666666666");

  22. break;

  23. }catch(IOExceptione){

  24. System.out.println(e);

  25. }catch(InterruptedExceptione){

  26. //TODOAuto-generatedcatchblock

  27. e.printStackTrace();

  28. }

@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这个服务

代码参照:

  1. FilesystemUIapkFile=newFile("/system/app/SystemUI.apk");

  2. @Override

  3. publicvoidonCreate(BundlesavedInstanceState){

  4. super.onCreate(savedInstanceState);

  5. setContentView(R.layout.main);

  6. finalToggleButtonsystemBarToggleButton=(ToggleButton)findViewById(R.id.systemBarToggleButton);

  7. systemBarToggleButton.setChecked(systemUIapkFile.exists());

  8. systemBarToggleButton.setOnCheckedChangeListener(newOnCheckedChangeListener(){

  9. @Override

  10. publicvoidonCheckedChanged(CompoundButtonbuttonView,booleanisChecked){

  11. systemBarToggleButton.setChecked(isChecked);

  12. switchSystemUI();

  13. if(isChecked){

  14. Intentintent=newIntent();

  15. intent.setComponent(newComponentName(

  16. "com.android.systemui",

  17. "com.android.systemui.SystemUIService"));

  18. startService(intent);

  19. }

  20. }

  21. });

  22. }

  23. privatevoidswitchSystemUI(){

  24. try{

  25. Processp;

  26. p=Runtime.getRuntime().exec("su");

  27. //Attempttowriteafiletoaroot-only

  28. DataOutputStreamos=newDataOutputStream(p.getOutputStream());

  29. os.writeBytes("mount-oremount,rw/dev/block/stl6/system\n");

  30. if(systemUIapkFile.exists()){

  31. os.writeBytes("mv/system/app/SystemUI.apk/system/SystemUI.apk\n");

  32. }else{

  33. os.writeBytes("mv/system/SystemUI.apk/system/app/SystemUI.apk\n");

  34. }

  35. os.writeBytes("mount-oremount,ro/dev/block/stl6/system\n");

  36. //Closetheterminal

  37. os.writeBytes("exit\n");

  38. os.flush();

  39. p.waitFor();

  40. }catch(Exceptione){

  41. ShowErrorGlobal(e);

  42. }

  43. }

  44. protectedvoidShowErrorGlobal(Exceptione){

  45. ByteArrayOutputStreambaos=newByteArrayOutputStream();

  46. PrintStreamstream=newPrintStream(baos);

  47. e.printStackTrace(stream);

  48. stream.flush();

  49. newAlertDialog.Builder(this)

  50. .setIconAttribute(android.R.attr.alertDialogIcon)

  51. .setTitle("Epicfail")

  52. .setMessage("Error:"+newString(baos.toByteArray())).show();

  53. }

 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给咱提供的有接口直接用就行啊

直接代码参考吧:

  1. intflag=context.getWindow().getDecorView().getSystemUiVisibility();

  2. //intfullScreen=View.SYSTEM_UI_FLAG_SHOW_FULLSCREEN;

  3. intfullScreen=0x8;

  4. if(visible){

  5. if((flag&fullScreen)!=0){

  6. context.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);

  7. }

  8. }else{

  9. if((flag&fullScreen)==0){

  10. context.getWindow().getDecorView().setSystemUiVisibility(flag|fullScreen);

  11. }

  12. }