實作方式
監聽BroadcastReceiver
事件
- Intent.ACTION_CLOSE_SYSTEM_DIALOGS
具體實作
- 1、建立監聽接口
public interface HomeStatusListener {
void onHomeKey();
void onRecentApps();
}
複制代碼
實作兩個方法:home鍵、最近app
- 2、建立工具類
public class HomeStatusController {
//定義監聽傳回常量
private static final String SYSTEM_DIALOG_REASON_KEY = "reason";
private static final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";
private static final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";
private Context mContext;
private IntentFilter mHomeStatusFilter = null;
private HomeStatusListener mHomeStatusListener;
/**
* 構造函數執行個體IntentFilter對象
* @param context
*/
public HomeStatusController(Context context) {
mContext = context;
mHomeStatusFilter = new IntentFilter();
mHomeStatusFilter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
}
private BroadcastReceiver mHomeStatusReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(action)) {
String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);
if (TextUtils.isEmpty(reason)) {
return;
}
if (SYSTEM_DIALOG_REASON_HOME_KEY.equals(reason)) {
if(mHomeStatusListener!=null){
mHomeStatusListener.onHomeKey();
}
} else if (reason.equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {
if(mHomeStatusListener!=null){
mHomeStatusListener.onRecentApps();
}
}
}
}
};
//設定監聽
public void setHomeStatusListener(HomeStatusListener l) {
mHomeStatusListener = l;
}
//開始監聽
public void startListen() {
if (mContext != null) {
mContext.registerReceiver(mHomeStatusReceiver, mHomeStatusFilter);
}
}
//結束監聽
public void stopListen() {
if (mContext != null) {
mContext.unregisterReceiver(mHomeStatusReceiver);
}
}
}
複制代碼
控制工具主要是實作了廣播的注冊和回收,并處理廣播事件
- 3、廣播實作
public class MainActivity extends Activity{
private HomeStatusController mHomeStatusController = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
//TODO
mHomeStatusController = new HomeStatusController(this);
mHomeStatusController.setHomeStatusListener(new HomeStatusListener() {
@Override
public void onHomeKey() {
}
@Override
public void onRecentApps() {
}
});
mHomeStatusController.startListen();
}
@Override
protected void onDestroy() {
mHomeStatusController.stopListen();
super.onDestroy();
}
}
複制代碼
實作按下Home鍵的效果
Intent intent= new Intent(Intent.ACTION_MAIN);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //如果是服務裡調用,必須加入new task辨別
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
複制代碼