Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Andorid4.x 流氓式屏蔽HOME鍵

Andorid4.x 流氓式屏蔽HOME鍵

編輯:關於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();
		}
	}
	
	
	
}

這樣就可以達到按下Home鍵後Activity再次被拉起來的展示的效果了。

 

全部就這些,已經在項目運行著,大家不防試試看。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved