android 工具栏隐藏,ANDROID 隐藏 任务栏 systemui systembar 全屏显示

说说自己的经历吧:

(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管理

Listinfos=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();

}@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

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

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

代码参照:

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");

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

直接代码参考吧:

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);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值