Как определить, является ли это кнопкой «Недавние», многооконным режимом или кнопкой «Домой» onUserLeaveHint()

В моем приложении я полагаюсь на метод onUserLeaveHint(), когда пользователь нажимает кнопку «Домой», но этот метод также вызывается, когда вы запускаете многооконный режим в Android 7.0, долго нажимая «кнопку недавних» (чего я не хочу). выполнить то же самое, что и я, когда нажата кнопка «Домой»). Поэтому я хочу знать, есть ли способ определить, что есть что. Ваше здоровье!

Примечание. onMultiWindowModeChanged() вызывается после onUserLeaveHint()


person Ercan    schedule 04.10.2016    source источник
comment
Если он не устарел в 7.0, он все равно будет работать   -  person Zoe    schedule 07.10.2016
comment
Это все еще работает, но это не помогает мне достичь моей цели. Я не хочу, чтобы он вызывался, когда пользователь активирует многооконный режим.   -  person Ercan    schedule 07.10.2016
comment
Что возвращает вызов isInMultiWindowMode() из onUserLeaveHint(), даже если onMultiWindowModeChanged() еще не вызывался   -  person JLamkin    schedule 12.10.2016
comment
Он возвращает текущий режим как логическое значение, о котором мы в то время не знаем, переходим ли мы в многооконный режим или в однооконный режим. @Скротос   -  person Ercan    schedule 13.10.2016


Ответы (1)


Я думаю, это то, что вы ищете.

HomeWatcher mHomeWatcher = new HomeWatcher(this);
mHomeWatcher.setOnHomePressedListener(new OnHomePressedListener() {
    @Override
    public void onHomePressed() {
        // do something here...
    }
    @Override
    public void onHomeLongPressed() {
    }
});
mHomeWatcher.startWatch();
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.util.Log;

public class HomeWatcher {

    static final String TAG = "hg";
    private Context mContext;
    private IntentFilter mFilter;
    private OnHomePressedListener mListener;
    private InnerRecevier mRecevier;

    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() {
        if (mRecevier != null) {
            mContext.registerReceiver(mRecevier, mFilter);
        }
    }

    public void stopWatch() {
        if (mRecevier != null) {
            mContext.unregisterReceiver(mRecevier);
        }
    }

    class InnerRecevier extends BroadcastReceiver {
        final String SYSTEM_DIALOG_REASON_KEY = "reason";
        final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions";
        final String SYSTEM_DIALOG_REASON_LONG_PRESS = "assist";
        final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";

        @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_LONG_PRESS)) {
                            mListener.onHomeLongPressed();
                        }
                    }
                }
            }
        }
    }
}



public interface OnHomePressedListener {
    public void onHomePressed();

    public void onHomeLongPressed();
}
person norcal johnny    schedule 14.10.2016
comment
Я могу слушать домашний ключ только в том случае, если у меня есть активность на главном экране (android.intent.category.HOME), а также ваш ответ представляет собой копию 1-го ответа на этот вопрос: stackoverflow.com/questions/22952794/ вы следует поделиться ссылкой на ответы, чтобы отдать должное, а не копировать вставку. Я не могу принять этот ответ. - person Ercan; 14.10.2016