说说自己的经历吧:
(1)开始为了隐藏systemui利用过killcom.android.systemui线程进行的隐藏,但是总有一个com.android.systemui.SystemUIService进行启动
我开始还是比较的坏的就弄了一个监听每500毫秒进行检测一次进行查杀
代码:
-
@Override
-
publicvoidonCreate(BundlesavedInstanceState){
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.main);
-
ActivityManageram=(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);//获得activity管理
-
List<RunningAppProcessInfo>infos=am.getRunningAppProcesses();
-
for(RunningAppProcessInforunningAppProcessInfo:infos){
-
System.out.println("processName:====================:"+runningAppProcessInfo.processName);
-
if(runningAppProcessInfo.processName.equals("com.android.systemui")){
-
System.out.println("processpid:"+runningAppProcessInfo.pid);
-
Stringstr="/system/bin/kill"+runningAppProcessInfo.pid;
-
System.out.println("str:"+str);
-
Processprocess;
-
Runtimeruntime;
-
try{
-
runtime=Runtime.getRuntime();
-
process=runtime.exec("su");
-
System.out.println("01010101010");
-
process=runtime.exec(str);
-
intexitVal=process.waitFor();
-
System.out.println("66666666666666666666666");
-
break;
-
}catch(IOExceptione){
-
System.out.println(e);
-
}catch(InterruptedExceptione){
-
//TODOAuto-generatedcatchblock
-
e.printStackTrace();
-
}
@Overridepublic 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 blocke.printStackTrace();}
(2)通过长时间研究我研究到了SystemUI.apk,我就就想对这个东西进行操作了。开始我删除掉后,systeui还是运行着,我就用kill命令直接杀掉这个线程,然后就开始报错了。说找不到SystemUI什么的。及其的烦人,不过重新启动就可以了。就没有那个错误了。
苍天真的不负有心人,本人找到一个更好的方法,原来大概是这样的:通过命令移除SystemUI.apk放到一个文件夹中,然后重新启动com.systemui.SystemUIService这个服务
就可以了。如果想恢复就把SystemUI.apk移到/system/app/下并且重新启动com.systemui.SystemUIService这个服务
代码参照:
-
FilesystemUIapkFile=newFile("/system/app/SystemUI.apk");
-
@Override
-
publicvoidonCreate(BundlesavedInstanceState){
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.main);
-
finalToggleButtonsystemBarToggleButton=(ToggleButton)findViewById(R.id.systemBarToggleButton);
-
systemBarToggleButton.setChecked(systemUIapkFile.exists());
-
systemBarToggleButton.setOnCheckedChangeListener(newOnCheckedChangeListener(){
-
@Override
-
publicvoidonCheckedChanged(CompoundButtonbuttonView,booleanisChecked){
-
systemBarToggleButton.setChecked(isChecked);
-
switchSystemUI();
-
if(isChecked){
-
Intentintent=newIntent();
-
intent.setComponent(newComponentName(
-
"com.android.systemui",
-
"com.android.systemui.SystemUIService"));
-
startService(intent);
-
}
-
}
-
});
-
}
-
privatevoidswitchSystemUI(){
-
try{
-
Processp;
-
p=Runtime.getRuntime().exec("su");
-
//Attempttowriteafiletoaroot-only
-
DataOutputStreamos=newDataOutputStream(p.getOutputStream());
-
os.writeBytes("mount-oremount,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-oremount,ro/dev/block/stl6/system\n");
-
//Closetheterminal
-
os.writeBytes("exit\n");
-
os.flush();
-
p.waitFor();
-
}catch(Exceptione){
-
ShowErrorGlobal(e);
-
}
-
}
-
protectedvoidShowErrorGlobal(Exceptione){
-
ByteArrayOutputStreambaos=newByteArrayOutputStream();
-
PrintStreamstream=newPrintStream(baos);
-
e.printStackTrace(stream);
-
stream.flush();
-
newAlertDialog.Builder(this)
-
.setIconAttribute(android.R.attr.alertDialogIcon)
-
.setTitle("Epicfail")
-
.setMessage("Error:"+newString(baos.toByteArray())).show();
-
}
File systemUIapkFile = new File("/system/app/SystemUI.apk");@Overridepublic 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() {@Overridepublic 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-onlyDataOutputStream 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 terminalos.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给咱提供的有接口直接用就行啊
直接代码参考吧:
-
intflag=context.getWindow().getDecorView().getSystemUiVisibility();
-
//intfullScreen=View.SYSTEM_UI_FLAG_SHOW_FULLSCREEN;
-
intfullScreen=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);
-
}
-
}