最近在做一個項目的時候,進入一個 Activity后需要暫時屏蔽掉home鍵和recent鍵(back鍵可以在onKeyDown里面處理),網上找了半天,都是針對舊版本android的方法,android5.0以后就不能生效了。
看了半天的SDK和資料,發現有一種方法可以暫時屏蔽掉home鍵和recent鍵,如果有辦法獲取到高級的系統權限,還可以正在的屏蔽掉。廢話不多說,直接上代碼:
其實代碼就一句話:startLockTask,整段代碼如下:
package utils.bobo.com.boboutils.App;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import utils.bobo.com.boboutils.R;
public class ScreenPinningActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_screen_pinning);
}
@Override
public void onResume(){
super.onResume();
this.startLockTask();
}
@Override
public boolean onKeyDown(int keyCode,KeyEvent event){
if(keyCode==KeyEvent.KEYCODE_BACK)
return true;
return super.onKeyDown(keyCode, event);
}
}
啟動后,會出現如下圖的提示,用戶點擊知道了,home鍵和recent鍵就被屏蔽掉了,只有長按back鍵才能解除這個狀態:
再來說說高級的接口,這個高級的接口需要android.permission.STATUS_BAR的permission,這個permission定義如下:
<permission android:name="android.permission.STATUS_BAR"
android:protectionLevel="signature|privileged" />
這個定義決定了你的apk必須是platform簽名或者預制在system/priv-app下,
所以這個方法對普通的開發者無效,但是如果你是做rom的,就可以采用這個方法。代碼也很簡單,這邊就不貼完整代碼了
mStatusBarManager = (StatusBarManager) getApplicationContext()
.getSystemService(Context.STATUS_BAR_SERVICE);
mStatusBarManager.disable(StatusBarManager.DISABLE_HOME | StatusBarManager.DISABLE_RECENT | StatusBarManager.DISABLE_EXPAND);
在activity 退出的時候要執行下
mStatusBarManager.disable(StatusBarManager.DISABLE_NONE);
恢復home鍵和recent鍵
其實還有一種比較流氓的方法:
就是不用activity實現,而是添加一個TYPE_SYSTEM_ALERT的view到window上,這個網上的代碼也挺多的,這邊貼小部分代碼,有興趣的同學自己再去百度下
WindowManager wm = (WindowManager)getApplicationContext().getSystemService(WINDOW_SERVICE);
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT | WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
params.flags = LayoutParams.FLAG_NOT_FOCUSABLE;
params.width = WindowManager.LayoutParams.FILL_PARENT;
params.height = WindowManager.LayoutParams.FILL_PARENT;
params.format = PixelFormat.TRANSPARENT;
params.gravity=Gravity.LEFT|Gravity.TOP;
params.x = 0;
params.y = 0;
wm.addView(mView, params);
源代碼可以從 https://github.com/bobohuang1985/android-utils-api 下載,
————————————————
版權聲明:本文為CSDN博主「zhenbohuang」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/zhenbohuang/article/details/72722247
