編輯:關於Android編程
應用項目需要要屏蔽HOME鍵。項目本身的要求是讓按下HOME鍵後程序不做任何響應,就像按下返回鍵一樣在onBackPressed 方法中直接return啥都不做。緊跟著去google,百度翻了個遍也沒有找到解決的方法,最坑爹的是一些無良的網友在沒有自己親自測試的情況下轉發許多不靠譜的解決方式,浪費了大家好多時間。而且自己剛接觸Android兩三個月也不太了解不同的版本之前權限是不一樣的。
前言也算說得多了,屏蔽HOME鍵確實是做不到的,但我想到了另外一種方式,就是讓自己的Activity不會被退出,所以標題才加了“流氓式”,哈哈。
究竟如何做?相信這個是大家最關心的。其實在按下HOME鍵的時候當前Activity的onStop方法會被調用,可以在onStop方法中讓後台的Service再把自己給重新接起來。
先上一張圖然後再詳細解釋

這裡涉及四個類(涉及安卓專業術語可能會表達有誤,靠大家智慧理解)
MainActivity 主程序的桌面
MonitorService 後台運行的Service
MyBinder 用於Activity 和Service 聯系的Binder
ActivityChecker 用於檢查Activity 是不是在最前端的自定義線程類
接下來上相關類的關鍵代碼
MainActivity.java
@Override
protected void onStop() {
// ams 是一個 MyBinder 對象
ams.startIntent();
super.onStop();
}
MonitorService.java (MyBinder 和 ActivityChecker 也包含在這個java文件中)
package com.example.xxx;
import com.example.xxx.MainActivity;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.Service;
import android.content.ComponentName;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;
public class MonitorService extends Service {
private String tag = MonitorService.class.getSimpleName();
@Override
public IBinder onBind(Intent intent) {
return new MyBinder();
}
@Override
public void onDestroy() {
super.onDestroy();
}
public void startMain() {
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
class ActivityChecker extends Thread{
@Override
public void run(){
Log.d(tag, start check);
while(true){
ActivityManager am = (ActivityManager)MonitorService.this.getSystemService(Activity.ACTIVITY_SERVICE);
ComponentName cn = am.getRunningTasks(1).get(0).topActivity;
String toActivityName = cn.getClassName();
if (!toActivityName.equals(MainActivity.class.getName())){
startMain();
}else{
Log.d(tag, check finished);
break;
}
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class MyBinder extends Binder implements ActivityMonitorService {
@Override
public void startIntent() {
new ActivityChecker().start();
}
}
}
全部就這些,已經在項目運行著,大家不防試試看。
Android三句代碼使用沉浸式狀態欄
用過android手機的人都知道android使用app的時候屏幕上方的狀態欄都是黑色的,就算不是黑色的都與正在打開的app顏色不同。有一種灰常不搭調的感覺。
Android-PullToRefresh下拉刷新庫基本用法
PullToRefresh是一套實現非常好的下拉刷新庫,它支持: ListView ExpandableListView GridView WebView ScrollV
struts2的Action(四)
實現ActionAction是struts2應用的核心,開發中需要大量的Action類,並在struts.xml中配置Action。Action中包含了對用戶請求的處理邏
Android實現獲取SD卡總容量,可用大小,機身內存總容量及可用大小的方法
本文實例講述了Android實現獲取SD卡總容量,可用大小,機身內存總容量及可用大小的方法。分享給大家供大家參考,具體如下:可能有的同學不知道系統已經提供了獲取獲取SD卡