Tôi có câu trả lời rất hay cho câu hỏi này :) Tôi đã cố gắng trong 1 năm qua lol và tôi vừa phát hiện ra giải pháp 3 ngày trước đó.Vui lòng xem câu trả lời. Bạn cần phải thực hiện một lớp nhà theo dõi septate. Sử dụng chính xác mã bên dưới với tên của HomeWatcher.
public class HomeWatcher {
static final String TAG = "HomeWatcher";
private Context mContext;
private IntentFilter mFilter;
private OnHomePressedListener mListener;
private InnerRecevier mRecevier;
public interface OnHomePressedListener {
public void onHomePressed();
public void onHomeLongPressed();
//public void onLockLongPressed();
}
public HomeWatcher(Context context) {
mContext = context;
mFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
}
public void setOnHomePressedListener(OnHomePressedListener listener) {
mListener = listener;
mRecevier = new InnerRecevier();
}
public void startWatch() {
try{
if (mRecevier != null) {
mContext.registerReceiver(mRecevier, mFilter);
}
}catch(Exception e){}
}
public void stopWatch() {
try{
if (mRecevier != null) {
mContext.unregisterReceiver(mRecevier);
}
}catch(Exception e){}
}
class InnerRecevier extends BroadcastReceiver {
final String SYSTEM_DIALOG_REASON_KEY = "reason";
final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions";
final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";
final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";
//final String SYSTEM_DIALOG_REASON_Lock = "lock";
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {
String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);
if (reason != null) {
Log.e(TAG, "action:" + action + ",reason:" + reason);
if (mListener != null) {
if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) {
mListener.onHomePressed();
} else if (reason
.equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {
mListener.onHomeLongPressed();
}
/* else if (reason
.equals(SYSTEM_DIALOG_REASON_Lock)) {
mListener.onLockLongPressed();
}*/
}
}
}
}
}
}
Sau khi tạo lớp HomeWatcher. Bạn cần khai báo Homewatcher trên lớp mong muốn của bạn, nơi bạn muốn phát hiện nút Home và nút Recent apps.
public class MainActivity extends Activity {
private HomeWatcher mHomeWatcher;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
mHomeWatcher = new HomeWatcher(this);
mHomeWatcher.setOnHomePressedListener(new OnHomePressedListener() {
@Override
public void onHomePressed() {
Log.e(TAG, "onHomePressed");
}
@Override
public void onHomeLongPressed() {
Log.e(TAG, "recent apps");
}
});
mHomeWatcher.startWatch();
} catch (Exception e) {
}
}
Cuối cùng, bạn chỉ cần thêm onPause và onResume Phương thức ghi đè như thế này.
@Override
protected void onResume() {
super.onResume();
try {
mHomeWatcher.startWatch();
} catch (Exception e) {
}
}
@Override
protected void onPause() {
super.onPause();
try {
mHomeWatcher.stopWatch();
} catch (Exception e) {
}
}
Câu trả lời rất đơn giản và đẹp mắt. Đang đợi phiếu bầu và câu trả lời được chấp nhận: p
Nguồn
2015-04-15 11:00:33
Sẽ rất tuyệt nếu bạn có thể chấp nhận câu trả lời vì câu hỏi này được trả lời kỹ lưỡng ngay bây giờ. – SK9