Android 让后退按钮转到发射器

Android 让后退按钮转到发射器,android,android-intent,splash-screen,Android,Android Intent,Splash Screen,我有一个SplashActivity,当我第一次打开应用程序时,它会打开,这会导致应用程序的maintactivity我想对后退按钮进行编程,使其进入启动器,而不是SplashActivity public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {

我有一个
SplashActivity
,当我第一次打开应用程序时,它会打开,这会导致应用程序的
maintactivity
我想对后退按钮进行编程,使其进入启动器,而不是SplashActivity

   public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
        
        //what goes here??
    }
    return super.onKeyDown(keyCode, event);
}
或者在从
SplashActivity
启动
MainActivity
时设置正确的标志来实现这一点

编辑: 我找到了答案的一部分,为了确保SplashActivity永远不会启动,我使用

  Intent i=new Intent(SplashActivity.this,MainActivity.class);
                i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
                startActivity(i);
我还有三个重定向到MainActivity的
Activities
,我想提供一个一致的行为,每次都可以从
MainActivity
重定向回启动器

编辑2
MainActivity-->Camera/Gallery-->ImagePreview-->ScannedResults-->图像删除对话框-->MainActivity


我从
MainActivity
back
,它无法返回到
ScannedResults
Camera
ImagePreview
,因为用户可能也从
ImagePreview
中删除了图像。

如果您只有两个activity和MainActivity。在这种情况下,在从SplashActivity启动MainActivity之后,如果只有两个activity SplashActivity和MainActivity,则在MainActivity中调用finish()并重写onBackPressed()。

。在这种情况下,在从SplashActivity启动MainActivity之后,如果只有两个activity SplashActivity和MainActivity,则在MainActivity中调用finish()并重写onBackPressed()。

。在这种情况下,在从SplashActivity启动MainActivity之后,如果只有两个activity SplashActivity和MainActivity,则在MainActivity中调用finish()并重写onBackPressed()。

。在这种情况下,在从SplashActivity call finish()启动MainActivity并覆盖MainActivity中的onBackPressed()和call finish()之后,本质上,您需要从每个活动转到Launcher(我假设它不是主活动,如果不是,请说明)。在这种情况下,每当您出于某个目的启动任何活动时,请在之后立即调用finish(),例如

Intent intent = new Intent(this, WhateverActivityYouWantToCall.class);
startActivity(intent)

//call finish() to end current activity
finish();
编辑:也就是说,如果您希望在按下后退按钮时发生这种情况,您可以覆盖onBackPressed:

@Override
public void onBackPressed() {
    Intent quit = new Intent(Intent.ACTION_MAIN);
    quit.addCategory(Intent.CATEGORY_HOME);
    quit.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(quit);
    finish();
}

从本质上讲,您希望从每个活动中转到Launcher(我假设它不是主要活动,如果不是,请说明)。在这种情况下,每当您出于某个目的启动任何活动时,请在之后立即调用finish(),例如

Intent intent = new Intent(this, WhateverActivityYouWantToCall.class);
startActivity(intent)

//call finish() to end current activity
finish();
编辑:也就是说,如果您希望在按下后退按钮时发生这种情况,您可以覆盖onBackPressed:

@Override
public void onBackPressed() {
    Intent quit = new Intent(Intent.ACTION_MAIN);
    quit.addCategory(Intent.CATEGORY_HOME);
    quit.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(quit);
    finish();
}

从本质上讲,您希望从每个活动中转到Launcher(我假设它不是主要活动,如果不是,请说明)。在这种情况下,每当您出于某个目的启动任何活动时,请在之后立即调用finish(),例如

Intent intent = new Intent(this, WhateverActivityYouWantToCall.class);
startActivity(intent)

//call finish() to end current activity
finish();
编辑:也就是说,如果您希望在按下后退按钮时发生这种情况,您可以覆盖onBackPressed:

@Override
public void onBackPressed() {
    Intent quit = new Intent(Intent.ACTION_MAIN);
    quit.addCategory(Intent.CATEGORY_HOME);
    quit.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(quit);
    finish();
}

从本质上讲,您希望从每个活动中转到Launcher(我假设它不是主要活动,如果不是,请说明)。在这种情况下,每当您出于某个目的启动任何活动时,请在之后立即调用finish(),例如

Intent intent = new Intent(this, WhateverActivityYouWantToCall.class);
startActivity(intent)

//call finish() to end current activity
finish();
编辑:也就是说,如果您希望在按下后退按钮时发生这种情况,您可以覆盖onBackPressed:

@Override
public void onBackPressed() {
    Intent quit = new Intent(Intent.ACTION_MAIN);
    quit.addCategory(Intent.CATEGORY_HOME);
    quit.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(quit);
    finish();
}

如果您使用
android:excludeFromRecents
将活动从最近的活动中排除,它也将不在后堆栈中,因此用户将无法使用“后退”按钮或从最近的活动手动返回到它。只需编辑您的清单:

 <activity android:name=".SplashActivity" android:excludeFromRecents="true" />

编辑


您始终可以摆脱多个活动并切换到片段,这样您将只有一个活动,在最近的时间段中始终可见,但如果使用
android:excludeFromRecents
将活动从最近的时间段中排除,则仍然可以将ie.SplashFragment从后堆栈中删除,所以,用户将无法手动返回到它,既不返回按钮,也不从最近。只需编辑您的清单:

 <activity android:name=".SplashActivity" android:excludeFromRecents="true" />

编辑


您始终可以摆脱多个活动并切换到片段,这样您将只有一个活动,在最近的时间段中始终可见,但如果使用
android:excludeFromRecents
将活动从最近的时间段中排除,则仍然可以将ie.SplashFragment从后堆栈中删除,所以,用户将无法手动返回到它,既不返回按钮,也不从最近。只需编辑您的清单:

 <activity android:name=".SplashActivity" android:excludeFromRecents="true" />

编辑


您始终可以摆脱多个活动并切换到片段,这样您将只有一个活动,在最近的时间段中始终可见,但如果使用
android:excludeFromRecents
将活动从最近的时间段中排除,则仍然可以将ie.SplashFragment从后堆栈中删除,所以,用户将无法手动返回到它,既不返回按钮,也不从最近。只需编辑您的清单:

 <activity android:name=".SplashActivity" android:excludeFromRecents="true" />

编辑


您始终可以摆脱多个活动并切换到片段,这样您将只有一个活动,在最近的活动中始终可见,但如果在后台堆栈中将此代码添加到清单上的SplashActivity中,仍然可以删除ie.SplashFragment:

<activity
android:name=".SplashActivity"
android:noHistory="true" >

将此代码添加到清单上的Splash活动:

<activity
android:name=".SplashActivity"
android:noHistory="true" >

将此代码添加到清单上的Splash活动:

<activity
android:name=".SplashActivity"
android:noHistory="true" >

将此代码添加到清单上的Splash活动:

<activity
android:name=".SplashActivity"
android:noHistory="true" >

如果您想关闭应用程序,您可以使用

 public boolean onKeyDown(int keyCode, KeyEvent event) {
     if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
         finish();
     }
     return super.onKeyDown(keyCode, event);
 }
但是,如果您只想隐藏应用程序(仍在后台运行),可以使用

 public boolean onKeyDown(int keyCode, KeyEvent event) {
     if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
         finish();
     }
     return super.onKeyDown(keyCode, event);
 }
 public boolean onKeyDown(int keyCode, KeyEvent event) {
     if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
         moveTaskToBack(true);
     }
     return super.onKeyDown(keyCode, event);
 }

希望这会有帮助

如果要关闭应用程序,您可以使用

 public boolean onKeyDown(int keyCode, KeyEvent event) {
     if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
         finish();
     }
     return super.onKeyDown(keyCode, event);
 }
但是,如果您只想隐藏应用程序(仍在后台运行),可以使用

 public boolean onKeyDown(int keyCode, KeyEvent event) {
     if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
         finish();
     }
     return super.onKeyDown(keyCode, event);
 }
 public boolean onKeyDown(int keyCode, KeyEvent event) {
     if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
         moveTaskToBack(true);
     }
     return super.onKeyDown(keyCode, event);
 }

希望这会有帮助

如果要关闭应用程序,您可以使用

 public boolean onKeyDown(int keyCode, KeyEvent event) {
     if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
         finish();
     }
     return super.onKeyDown(keyCode, event);
 }
但如果你只是想