2016-10-04 7 views
6

В моем приложении я полагаюсь на метод onUserLeaveHint(), когда пользователь нажимает кнопку «домой», но этот метод также вызывается, когда вы начинаете multi window mode в android 7.0, долгое нажатие кнопки «recents» (что я не хочу выполнять то же самое, что и при нажатии кнопки дома). Поэтому я хочу знать, есть ли способ обнаружить, что есть. Ура!Как определить, является ли кнопка «Отправить», режим «Много окно» или кнопку «домой» onUserLeaveHint()

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

+0

Если не осуждается в версии 7.0, он все равно будет работать – Zoe

+0

Он по-прежнему работает, но это не поможет мне достичь своей цели. Я не хочу, чтобы он вызывался, когда пользователь активировал режим нескольких окон. – Ercan

+0

Что вызывает вызов isInMultiWindowMode() из onUserLeaveHint(), возвращаемый, даже если onMultiWindowModeChanged() еще не был вызван – Scrotos

ответ

0

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

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(); 
} 
+1

Я могу слушать домашний ключ только в том случае, если у меня есть активность на главном экране («android.intent.category.HOME»), а также ваш ответ - копия 1-го ответа на этот вопрос: http://stackoverflow.com/questions/22952794/how-to-override-home-button-in-android-4-0, вы должны поделиться ссылкой с ответами, чтобы дать кредит вместо копии. Я не могу принять этот ответ. – Ercan

 Смежные вопросы

  • Нет связанных вопросов^_^