【问题标题】:How To Handle Home Button In Android如何在 Android 中处理主页按钮
【发布时间】:2012-06-03 11:12:59
【问题描述】:

我是一名新的 Android 开发者, 我知道处理后退按钮但我不知道如何处理主页按钮, 当我点击主页按钮时, 我尝试了很多方法, 但未使用, 请任何人帮助我并解决我的问题。 我使用了以下代码,

 @Override
  public boolean onKeyDown(int keyCode, KeyEvent event) 
  {
    if(keyCode==KeyEvent.KEYCODE_HOME)
    {
        Toast.makeText(this, "Click Home ", Toast.LENGTH_LONG).show();
    }
    return super.onKeyDown(keyCode, event);
   }

【问题讨论】:

  • 我不是 shure,但在我看来,没有办法控制主页按钮,因为恶意软件应用程序可能会禁用用户退出应用程序的最后一种方式。

标签: android android-homebutton


【解决方案1】:

Does not get Home Button click event。但是当你按下主页按钮时 调用这个方法

  @Override
        protected void onStop() {

            super.onStop();
        }

【讨论】:

  • @parag 这可能会给我带来问题。当我当时去另一个活动时,第一个活动的 onstop 方法是调用和代码第二次执行。所以,这是一个临时解决方案,而不是一个完美的工作解决方案。
【解决方案2】:

您无法判断是否单击了 HOME 按钮,并且您无法在按下 HOME 按钮时阻止您的应用程序被隐藏, 但您可以判断您的应用是否不再可见(BACK 键、HOME 键或其他应用进入前台)。

只需覆盖 onPauseonStop,并在此处添加日志。

【讨论】:

【解决方案3】:

我找到了答案,请添加下面给出的代码-

public boolean isApplicationSentToBackground(final Context context) 
   {
    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(1);
    if (!tasks.isEmpty()) {
        ComponentName topActivity = tasks.get(0).topActivity;
        if (!topActivity.getPackageName().equals(context.getPackageName())) {
            return true;
        }
    }
    return false;
}





@Override
public void onStop() {
    if (isApplicationSentToBackground(this)){
        //put your code here what u want to do

    }
    super.onStop();
}

更改清单文件-

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

【讨论】:

    【解决方案4】:

    Android Home Key 由框架层处理,您无法在应用程序层级别处理它。因为主页按钮动作已经在下面的级别中定义了。但是如果您正在开发您的自定义 ROM,那么它可能是可能的。出于安全原因,Google 限制了 HOME BUTTON 覆盖功能。

    【讨论】:

      【解决方案5】:

      您无法再检测到主页新闻事件。 但是你可以通过其他方式获得家庭新闻事件逻辑上它对我有用,希望对你也有用。

      在活动中定义这个

      public static boolean OnPause = false;
      public static boolean OnResume = false;
      

      把这个方法放到activity中

       @Override 
        protected void onPause() 
        { 
            // TODO Auto-generated method stub
            super.onPause(); 
      
             OnPause  = true;
      
        }
      
      @Override
      protected void onResume() {
          // TODO Auto-generated method stub
          super.onResume();
      
          OnResume = true;        
      
      }
      @Override
      protected void onStop() {
          // TODO Auto-generated method stub
          super.onStop();
      
          if(OnPause == true && OnResume == false)
          {
              Log.e("My activity ", " **** home is press *** ");
              //Do Your Home press code Here.
      
          }
      
          OnPause = false;
          OnResume = false;
      
      }
      

      【讨论】:

      • 您启动应用程序,该应用程序调用 onResume 并设置 OnResume = true。然后按下主页按钮并调用 onPause 并设置 OnPause = true。然后它进入 OnStop 并且永远不会进入 IF 条件,因为两个成员都是 true。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多