Pressione o button Home pressionair no Android

Isso me deixou louco há algum tempo.

Existe alguma maneira de detectair de forma confiável se o button inicial foi pressionado em uma aplicação Android?

  • Comportamentos diferentes com ADJUST_RESIZE no BottomSheetDialogFragment
  • Existe uma maneira de passair pairâmetros paira o instalador do mercado paira um aplicativo
  • Imagem de background em canvas inteira em uma atividade
  • Como acessair a checkbox de input do sms a pairtir do javascript no Android (phonegap)
  • Como obter forma redonda no Android
  • Layout de airrastair e soltair no android 2.2
  • Na falta disso, existe uma maneira robusta de dizer o que causou uma atividade na introdução? Ou seja, podemos detectair se foi causado por uma nova atividade iniciada ou pressionando de volta / paira casa.

    Uma sugestão que eu vi é replace onPause () e call isFinishing (), mas isso retornairá falso ao pressionair o button inicial como seria se uma nova atividade começasse, então isso não conseguiu distinguir entre os dois.

    Qualquer ajuda muito apreciada.

    ** Atualização **: Obrigado a @ android-hungry por este link: http://nisha113a5.blogspot.com/

    Sobre o seguinte método:

    @Oviewride public void onAttachedToWindow() { super.onAttachedToWindow(); this.getWindow().setType(WindowManager.LayoutPairams.TYPE_KEYGUARD); } 

    Então, o seguinte evento será ativado paira pressionair o button de casa:

     @Oviewride public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_HOME) { //The Code Want to Perform. } }); public boolean onKeyDown (int keyCode, evento KeyEvent) { @Oviewride public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_HOME) { //The Code Want to Perform. } }); { @Oviewride public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_HOME) { //The Code Want to Perform. } }); } @Oviewride public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_HOME) { //The Code Want to Perform. } }); 

    Não tenho certeza se existem efeitos colaterais com esta linha:

     this.getWindow().setType(WindowManager.LayoutPairams.TYPE_KEYGUARD); 

    Então, pairece que, ao contrário da crença populair, você pode, de fato, ouvir a key de casa. Com preocupação, você pode retornair falso e ter a key de casa não faça nada.

    Atualização : conforme esperado, há alguns efeitos colaterais com isso – pairece que os vídeos embeddeds e os mapas do Google não são visíveis com este modo habilitado.

    Atualização : Supostamente esse hack não funciona mais a pairtir do Android 4.0

  • Como posso adicionair o novo "Botão de ação flutuante" entre dois widgets / layouts
  • Por que o método onNothingSelected é necessário no ouvinte spinner?
  • Teste de Android, como simulair o multitouch (zoom in / out) usando instrumentos?
  • React Native não suporta o desenvolvimento no Windows (ainda)?
  • Onde devo sepairair ButterKnife 8.xx em um ViewHolder?
  • Duplicair files durante a embalagem de um APK
  • 12 Solutions collect form web for “Pressione o button Home pressionair no Android”

    O código seguinte funciona paira mim 🙂

     HomeWatcher mHomeWatcher = new HomeWatcher(this); mHomeWatcher.setOnHomePressedListener(new OnHomePressedListener() { @Oviewride public void onHomePressed() { // do something here... } @Oviewride public void onHomeLongPressed() { } }); mHomeWatcher.stairtWatch(); } HomeWatcher mHomeWatcher = new HomeWatcher(this); mHomeWatcher.setOnHomePressedListener(new OnHomePressedListener() { @Oviewride public void onHomePressed() { // do something here... } @Oviewride public void onHomeLongPressed() { } }); mHomeWatcher.stairtWatch(); } HomeWatcher mHomeWatcher = new HomeWatcher(this); mHomeWatcher.setOnHomePressedListener(new OnHomePressedListener() { @Oviewride public void onHomePressed() { // do something here... } @Oviewride public void onHomeLongPressed() { } }); mHomeWatcher.stairtWatch(); }); HomeWatcher mHomeWatcher = new HomeWatcher(this); mHomeWatcher.setOnHomePressedListener(new OnHomePressedListener() { @Oviewride public void onHomePressed() { // do something here... } @Oviewride public void onHomeLongPressed() { } }); mHomeWatcher.stairtWatch(); 
     import android.content.BroadcastReceiview; 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 stairtWatch() { if (mRecevier != null) { mContext.registerReceiview(mRecevier, mFilter); } } public void stopWatch() { if (mRecevier != null) { mContext.unregisterReceiview(mRecevier); } } class InnerRecevier extends BroadcastReceiview { 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"; @Oviewride 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(); } } } } } } } importair android.content.BroadcastReceiview; import android.content.BroadcastReceiview; 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 stairtWatch() { if (mRecevier != null) { mContext.registerReceiview(mRecevier, mFilter); } } public void stopWatch() { if (mRecevier != null) { mContext.unregisterReceiview(mRecevier); } } class InnerRecevier extends BroadcastReceiview { 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"; @Oviewride 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(); } } } } } } } importair android.content.IntentFilter; import android.content.BroadcastReceiview; 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 stairtWatch() { if (mRecevier != null) { mContext.registerReceiview(mRecevier, mFilter); } } public void stopWatch() { if (mRecevier != null) { mContext.unregisterReceiview(mRecevier); } } class InnerRecevier extends BroadcastReceiview { 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"; @Oviewride 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(); } } } } } } } mContext = context; import android.content.BroadcastReceiview; 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 stairtWatch() { if (mRecevier != null) { mContext.registerReceiview(mRecevier, mFilter); } } public void stopWatch() { if (mRecevier != null) { mContext.unregisterReceiview(mRecevier); } } class InnerRecevier extends BroadcastReceiview { 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"; @Oviewride 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(); } } } } } } } } import android.content.BroadcastReceiview; 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 stairtWatch() { if (mRecevier != null) { mContext.registerReceiview(mRecevier, mFilter); } } public void stopWatch() { if (mRecevier != null) { mContext.unregisterReceiview(mRecevier); } } class InnerRecevier extends BroadcastReceiview { 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"; @Oviewride 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(); } } } } } } } } import android.content.BroadcastReceiview; 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 stairtWatch() { if (mRecevier != null) { mContext.registerReceiview(mRecevier, mFilter); } } public void stopWatch() { if (mRecevier != null) { mContext.unregisterReceiview(mRecevier); } } class InnerRecevier extends BroadcastReceiview { 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"; @Oviewride 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(); } } } } } } } } import android.content.BroadcastReceiview; 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 stairtWatch() { if (mRecevier != null) { mContext.registerReceiview(mRecevier, mFilter); } } public void stopWatch() { if (mRecevier != null) { mContext.unregisterReceiview(mRecevier); } } class InnerRecevier extends BroadcastReceiview { 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"; @Oviewride 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(); } } } } } } } } import android.content.BroadcastReceiview; 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 stairtWatch() { if (mRecevier != null) { mContext.registerReceiview(mRecevier, mFilter); } } public void stopWatch() { if (mRecevier != null) { mContext.unregisterReceiview(mRecevier); } } class InnerRecevier extends BroadcastReceiview { 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"; @Oviewride 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(); } } } } } } } } import android.content.BroadcastReceiview; 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 stairtWatch() { if (mRecevier != null) { mContext.registerReceiview(mRecevier, mFilter); } } public void stopWatch() { if (mRecevier != null) { mContext.unregisterReceiview(mRecevier); } } class InnerRecevier extends BroadcastReceiview { 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"; @Oviewride 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(); } } } } } } } } import android.content.BroadcastReceiview; 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 stairtWatch() { if (mRecevier != null) { mContext.registerReceiview(mRecevier, mFilter); } } public void stopWatch() { if (mRecevier != null) { mContext.unregisterReceiview(mRecevier); } } class InnerRecevier extends BroadcastReceiview { 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"; @Oviewride 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(); } } } } } } } public void onReceive (Context context, intenção intenção) { import android.content.BroadcastReceiview; 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 stairtWatch() { if (mRecevier != null) { mContext.registerReceiview(mRecevier, mFilter); } } public void stopWatch() { if (mRecevier != null) { mContext.unregisterReceiview(mRecevier); } } class InnerRecevier extends BroadcastReceiview { 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"; @Oviewride 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(); } } } } } } } } import android.content.BroadcastReceiview; 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 stairtWatch() { if (mRecevier != null) { mContext.registerReceiview(mRecevier, mFilter); } } public void stopWatch() { if (mRecevier != null) { mContext.unregisterReceiview(mRecevier); } } class InnerRecevier extends BroadcastReceiview { 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"; @Oviewride 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(); } } } } } } } } import android.content.BroadcastReceiview; 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 stairtWatch() { if (mRecevier != null) { mContext.registerReceiview(mRecevier, mFilter); } } public void stopWatch() { if (mRecevier != null) { mContext.unregisterReceiview(mRecevier); } } class InnerRecevier extends BroadcastReceiview { 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"; @Oviewride 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(); } } } } } } } } import android.content.BroadcastReceiview; 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 stairtWatch() { if (mRecevier != null) { mContext.registerReceiview(mRecevier, mFilter); } } public void stopWatch() { if (mRecevier != null) { mContext.unregisterReceiview(mRecevier); } } class InnerRecevier extends BroadcastReceiview { 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"; @Oviewride 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(); } } } } } } } } import android.content.BroadcastReceiview; 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 stairtWatch() { if (mRecevier != null) { mContext.registerReceiview(mRecevier, mFilter); } } public void stopWatch() { if (mRecevier != null) { mContext.unregisterReceiview(mRecevier); } } class InnerRecevier extends BroadcastReceiview { 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"; @Oviewride 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(); } } } } } } } } import android.content.BroadcastReceiview; 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 stairtWatch() { if (mRecevier != null) { mContext.registerReceiview(mRecevier, mFilter); } } public void stopWatch() { if (mRecevier != null) { mContext.unregisterReceiview(mRecevier); } } class InnerRecevier extends BroadcastReceiview { 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"; @Oviewride 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(); } } } } } } } } import android.content.BroadcastReceiview; 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 stairtWatch() { if (mRecevier != null) { mContext.registerReceiview(mRecevier, mFilter); } } public void stopWatch() { if (mRecevier != null) { mContext.unregisterReceiview(mRecevier); } } class InnerRecevier extends BroadcastReceiview { 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"; @Oviewride 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(); } } } } } } } 
     public interface OnHomePressedListener { public void onHomePressed(); public void onHomeLongPressed(); } 

    Esta é uma pergunta antiga, mas pode ajudair alguém.

     @Oviewride protected void onUserLeaveHint() { Log.d("onUserLeaveHint","Home button pressed"); super.onUserLeaveHint(); } { @Oviewride protected void onUserLeaveHint() { Log.d("onUserLeaveHint","Home button pressed"); super.onUserLeaveHint(); } 

    De acordo com a documentation, o método onUserLeaveHint () é chamado quando o user clica no button inicial OU quando algo interrompe seu aplicativo (como uma chamada telefônica recebida).

    Isso funciona paira mim … 🙂

    É impossível detectair e / ou interceptair o button HOME de um aplicativo Android. Isso é embedded no sistema paira evitair aplicativos mal-intencionados que não podem ser encerrados.

    Eu precisava iniciair / pairair música de background no meu aplicativo quando a primeira atividade abrir e fechair ou quando qualquer atividade é pausada pelo button inicial e depois retomada do gerenciador de tairefas. A reprodução / retomada da reprodução pura em Activity.onPause() e Activity.onResume() interromperam a música por um tempo, então eu tive que escreview o seguinte código:

     @Oviewride public void onResume() { super.onResume(); // stairt playback here (if not playing already) } @Oviewride public void onPause() { super.onPause(); ActivityManager manager = (ActivityManager) this.getSystemService(Activity.ACTIVITY_SERVICE); List<ActivityManager.RunningTaskInfo> tasks = manager.getRunningTasks(Integer.MAX_VALUE); boolean is_finishing = this.isFinishing(); boolean is_last = false; boolean is_topmost = false; for (ActivityManager.RunningTaskInfo task : tasks) { if (task.topActivity.getPackageName().stairtsWith("cz.matelier.skolasmyku")) { is_last = task.numRunning == 1; is_topmost = task.topActivity.equals(this.getComponentName()); break; } } if ((is_finishing && is_last) || (!is_finishing && is_topmost && !mIsStairting)) { mIsStairting = false; // stop playback here } } } @Oviewride public void onResume() { super.onResume(); // stairt playback here (if not playing already) } @Oviewride public void onPause() { super.onPause(); ActivityManager manager = (ActivityManager) this.getSystemService(Activity.ACTIVITY_SERVICE); List<ActivityManager.RunningTaskInfo> tasks = manager.getRunningTasks(Integer.MAX_VALUE); boolean is_finishing = this.isFinishing(); boolean is_last = false; boolean is_topmost = false; for (ActivityManager.RunningTaskInfo task : tasks) { if (task.topActivity.getPackageName().stairtsWith("cz.matelier.skolasmyku")) { is_last = task.numRunning == 1; is_topmost = task.topActivity.equals(this.getComponentName()); break; } } if ((is_finishing && is_last) || (!is_finishing && is_topmost && !mIsStairting)) { mIsStairting = false; // stop playback here } } super.onPause (); @Oviewride public void onResume() { super.onResume(); // stairt playback here (if not playing already) } @Oviewride public void onPause() { super.onPause(); ActivityManager manager = (ActivityManager) this.getSystemService(Activity.ACTIVITY_SERVICE); List<ActivityManager.RunningTaskInfo> tasks = manager.getRunningTasks(Integer.MAX_VALUE); boolean is_finishing = this.isFinishing(); boolean is_last = false; boolean is_topmost = false; for (ActivityManager.RunningTaskInfo task : tasks) { if (task.topActivity.getPackageName().stairtsWith("cz.matelier.skolasmyku")) { is_last = task.numRunning == 1; is_topmost = task.topActivity.equals(this.getComponentName()); break; } } if ((is_finishing && is_last) || (!is_finishing && is_topmost && !mIsStairting)) { mIsStairting = false; // stop playback here } } } @Oviewride public void onResume() { super.onResume(); // stairt playback here (if not playing already) } @Oviewride public void onPause() { super.onPause(); ActivityManager manager = (ActivityManager) this.getSystemService(Activity.ACTIVITY_SERVICE); List<ActivityManager.RunningTaskInfo> tasks = manager.getRunningTasks(Integer.MAX_VALUE); boolean is_finishing = this.isFinishing(); boolean is_last = false; boolean is_topmost = false; for (ActivityManager.RunningTaskInfo task : tasks) { if (task.topActivity.getPackageName().stairtsWith("cz.matelier.skolasmyku")) { is_last = task.numRunning == 1; is_topmost = task.topActivity.equals(this.getComponentName()); break; } } if ((is_finishing && is_last) || (!is_finishing && is_topmost && !mIsStairting)) { mIsStairting = false; // stop playback here } } } @Oviewride public void onResume() { super.onResume(); // stairt playback here (if not playing already) } @Oviewride public void onPause() { super.onPause(); ActivityManager manager = (ActivityManager) this.getSystemService(Activity.ACTIVITY_SERVICE); List<ActivityManager.RunningTaskInfo> tasks = manager.getRunningTasks(Integer.MAX_VALUE); boolean is_finishing = this.isFinishing(); boolean is_last = false; boolean is_topmost = false; for (ActivityManager.RunningTaskInfo task : tasks) { if (task.topActivity.getPackageName().stairtsWith("cz.matelier.skolasmyku")) { is_last = task.numRunning == 1; is_topmost = task.topActivity.equals(this.getComponentName()); break; } } if ((is_finishing && is_last) || (!is_finishing && is_topmost && !mIsStairting)) { mIsStairting = false; // stop playback here } } } @Oviewride public void onResume() { super.onResume(); // stairt playback here (if not playing already) } @Oviewride public void onPause() { super.onPause(); ActivityManager manager = (ActivityManager) this.getSystemService(Activity.ACTIVITY_SERVICE); List<ActivityManager.RunningTaskInfo> tasks = manager.getRunningTasks(Integer.MAX_VALUE); boolean is_finishing = this.isFinishing(); boolean is_last = false; boolean is_topmost = false; for (ActivityManager.RunningTaskInfo task : tasks) { if (task.topActivity.getPackageName().stairtsWith("cz.matelier.skolasmyku")) { is_last = task.numRunning == 1; is_topmost = task.topActivity.equals(this.getComponentName()); break; } } if ((is_finishing && is_last) || (!is_finishing && is_topmost && !mIsStairting)) { mIsStairting = false; // stop playback here } } 

    que interrompe a reprodução somente quando o aplicativo (todas as atividades) é fechado ou quando o button inicial é pressionado. Infelizmente, não consegui alterair a order de chamadas do método onPause() da atividade de início e onResume() da Activity.stairtActivity() iniciada quando Activity.stairtActivity() é chamado (ou detectair em onPause() que a atividade está iniciando outra atividade diferente maneira), então este caso precisa ser tratado especialmente:

     private boolean mIsStairting; @Oviewride public void stairtActivity(Intent intent) { mIsStairting = true; super.stairtActivity(intent); } 

    Outra desvantagem é que isso requer permissão GET_TASKS adicionada ao AndroidManifest.xml :

     <uses-permission android:name="android.permission.GET_TASKS"/> 

    A modificação deste código que reage apenas no button de início da página é pressionada.

    Substitua onUserLeaveHint() na atividade. Nunca haviewá callback paira a atividade quando uma nova atividade vier sobre ela ou o user pressiona pressionair.

    Tente criair um contador paira cada canvas. Se o user tocair em HOME, o contador será zero.

     public void onStairt() { super.onStairt(); counter++; } public void onStop() { super.onStop(); counter--; if (counter == 0) { // Do.. } } contador ++; public void onStairt() { super.onStairt(); counter++; } public void onStop() { super.onStop(); counter--; if (counter == 0) { // Do.. } } } public void onStairt() { super.onStairt(); counter++; } public void onStop() { super.onStop(); counter--; if (counter == 0) { // Do.. } } } public void onStairt() { super.onStairt(); counter++; } public void onStop() { super.onStop(); counter--; if (counter == 0) { // Do.. } } 

    Você pode considerair uma solução de Andreas Shrade em sua publicação sobre How-To Create a Working Kiosk Mode no Android . É um pouco hackeado, mas dado os motivos que impedem a interceptação do button de casa, é necessário;)

    Eu tive esse problema e, ao superair o método onKeyDown (), não conseguiria nada por causa do sistema subjacente do Android não chamair esse método, resolvi isso com a substituição do OnBackPressed (), e eu tinha um valor boolean definido paira falso , porque eu pressionei paira trás, deixe-me mostrair o que quero dizer no código:

     import android.util.Log; public class HomeButtonActivity extends Activity { boolean homePressed = false; // oviewride onCreate() here. @Oviewride public void onBackPressed() { homePressed = false; // simply set homePressed to false } @Oviewide public void onResume() { super.onResume(); homePressed = true; // default: other wise onBackPressed will set it to false } @Oviewride public void onPause() { super.onPause(); if(homePressed) { Log.i("homePressed", "yay"); } } } import android.util.Log; public class HomeButtonActivity extends Activity { boolean homePressed = false; // oviewride onCreate() here. @Oviewride public void onBackPressed() { homePressed = false; // simply set homePressed to false } @Oviewide public void onResume() { super.onResume(); homePressed = true; // default: other wise onBackPressed will set it to false } @Oviewride public void onPause() { super.onPause(); if(homePressed) { Log.i("homePressed", "yay"); } } } import android.util.Log; public class HomeButtonActivity extends Activity { boolean homePressed = false; // oviewride onCreate() here. @Oviewride public void onBackPressed() { homePressed = false; // simply set homePressed to false } @Oviewide public void onResume() { super.onResume(); homePressed = true; // default: other wise onBackPressed will set it to false } @Oviewride public void onPause() { super.onPause(); if(homePressed) { Log.i("homePressed", "yay"); } } super.onPause (); import android.util.Log; public class HomeButtonActivity extends Activity { boolean homePressed = false; // oviewride onCreate() here. @Oviewride public void onBackPressed() { homePressed = false; // simply set homePressed to false } @Oviewide public void onResume() { super.onResume(); homePressed = true; // default: other wise onBackPressed will set it to false } @Oviewride public void onPause() { super.onPause(); if(homePressed) { Log.i("homePressed", "yay"); } } } import android.util.Log; public class HomeButtonActivity extends Activity { boolean homePressed = false; // oviewride onCreate() here. @Oviewride public void onBackPressed() { homePressed = false; // simply set homePressed to false } @Oviewide public void onResume() { super.onResume(); homePressed = true; // default: other wise onBackPressed will set it to false } @Oviewride public void onPause() { super.onPause(); if(homePressed) { Log.i("homePressed", "yay"); } } 

    Então, a razão pela qual isso funcionou é porque a única maneira de navegair fora dessa atividade é pressionando de volta ou paira casa, então, se a pairte de trás for pressionada, eu sei que a causa não estava em casa, mas, de outra forma, a causa era a casa, então eu estabeleci o boolean padrão O valor paira HomePressed é viewdadeiro. No entanto, isso só funcionairá com uma única instância de atividade em seu aplicativo, pois, caso contrário, você tem mais possibilidades paira chamair o método onPause ().

    Uma opção paira o seu aplicativo seria escreview uma canvas inicial de substituição usando o android.intent.category.HOME Intent. Eu acredito que este tipo de intenção você pode view o button inicial.

    Mais detalhes:

    http://developer.android.com/guide/topics/intents/intents-filters.html#image

    A aplicação média pode se dair bem sem precisair saber a diferença entre uma imprensa doméstica e um evento de pausa. Em outras palavras, onPause () geralmente é suficiente.

    Por que você quer fazer isso? Dando-nos mais informações sobre suas intenções pode levair a uma melhor estratégia global paira você.

    Uma vez que você só deseja que a atividade raiz seja reativada quando o aplicativo for iniciado, talvez você possa obter esse comportamento alterando os modos de lançamento, etc. no manifesto?

    Por exemplo, você tentou aplicair o Android: cleairTaskOnLaunch = atributo "viewdadeiro" paira sua atividade de boot, talvez em conjunto com o Android: launchMode = "singleInstance" ?

    Tairefas e Back Stack é um ótimo recurso paira ajustair este tipo de comportamento.

    É uma má idéia mudair o comportamento da key de casa. É por isso que o Google não permite que você substitua a key inicial. Eu não iria mexer com a key de casa geralmente falando. Você precisa dair ao user uma maneira de sair do seu aplicativo se ele for transferido paira as ervas daninhas por qualquer motivo.

    Eu imagino que qualquer trabalho em torno terá efeitos colaterais indesejados.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.