Android 用广播监听home键
最近有需求要监听home,网上找了几个方法都不行,不知道是不是过时了。只有用广播监听的才可以,但是好像只能监听,不能拦截。
1.新建广播类HomeKeyReceiver.java;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
/**
* @author fenghaitao
* @time 2021/7/29 20:41
*/
public class HomeKeyReceiver extends BroadcastReceiver {
private static final String TAG = "HomeKeyReceiver";
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {
String reason = intent.getStringExtra("reason");
if (reason != null) {
if (reason.equals("homekey")) { // 短按
Log.d(TAG,"短按home键");
} else if (reason.equals("recentapps")) { //长按
Log.d(TAG,"长按home键");
}
}
}
}
}
2.注册广播。
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
/**
* @author fenghaitao
* @time 2021年07月29日20:47:15
*/
public class TestActivity extends AppCompatActivity {
private HomeKeyReceiver homeKeyReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
homeKeyReceiver = new HomeKeyReceiver();
//添加action
IntentFilter intentFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
//注册监听
registerReceiver(homeKeyReceiver,intentFilter);
}
@Override
protected void onDestroy() {
//反注册
unregisterReceiver(homeKeyReceiver);
super.onDestroy();
}
}
3.验证结果,长按home键的没有模拟到==;