Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android中处理Home按钮_Android_Android Homebutton - Fatal编程技术网

如何在Android中处理Home按钮

如何在Android中处理Home按钮,android,android-homebutton,Android,Android Homebutton,我是一名新的Android开发者, 我知道如何操作后退按钮,但我不知道如何操作主页按钮, 当我点击主页按钮时, 我尝试了很多方法, 但是没有使用, 请任何人帮我解决我的问题。 我使用了以下代码 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode==KeyEvent.KEYCODE_HOME) { Toast.makeText(this, "C

我是一名新的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);
   }
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();
}

您无法判断是否单击了主页按钮,也无法在按下主页按钮时阻止应用程序隐藏, 但你可以判断你的应用程序是否不再可见(后退键、主键或另一个应用程序已进入前台)

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

只需覆盖暂停时的
onPause
或停止时的
onStop
,并在那里添加日志。

您的
未返回主页按钮,请单击事件。
。但当您按下主页按钮时
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();
}
调用此方法

  @Override
        protected void onStop() {

            super.onStop();
        }
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();
}

您再也检测不到home press事件。 但你们也可以通过另一种方式获得新闻发布会,从逻辑上讲,这对我来说很有用,希望对你们也有用

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();
}
在活动中定义此项

public static boolean OnPause = false;
public static boolean OnResume = false;
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();
}
将此方法付诸实践

 @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;

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

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

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();
}
public boolean isApplicationSentToBackground(最终上下文)
{
ActivityManager am=(ActivityManager)context.getSystemService(context.ACTIVITY_服务);
列表任务=am.getRunningTasks(1);
如果(!tasks.isEmpty()){
ComponentName topActivity=tasks.get(0).topActivity;
如果(!topActivity.getPackageName().equals(context.getPackageName())){
返回true;
}
}
返回false;
}
@凌驾
公共void onStop(){
如果(是应用程序入口背景(本)){
//把你的代码放在这里你想做什么
}
super.onStop();
}
更改清单文件-

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" />


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

我不是舒尔,但我认为没有办法控制HOME BUTTON,因为恶意软件应用程序可能会阻止用户退出应用程序的最后一条路。请告诉我如何在暂停或停止时呼叫我你不在暂停/停止时呼叫,Android为您调用它,您只需覆盖其中一个方法,请参见此处:@parag这可能会给我带来问题。当我当时转到另一个活动时,第一个活动的顶部方法是第二次调用并执行代码。因此,这是一个暂时的解决方案,不是一个完美的工作解决方案。您启动应用程序,它调用onResume并将onResume设置为true。然后按下home按钮,调用onPause并设置onPause=true。然后它转到OnStop,永远不会进入IF条件,因为两个成员都是true。
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();
}