如果Android应用程序在后台运行,如何在不将应用程序带到前面的情况下将其引入前端?

时间:2017-03-26 23:46:58

标签: android background mobile-application

我有一个可以在后台运行的应用。在它运行时,它可能会带来一定的活动。但是,当应用程序将活动带到前台时,如果应用程序当前正在后台运行,我不希望Android将应用程序本身带到前面,只需在后台执行即可。原因是我不希望我的应用程序中断客户当前正在做的事情。

以下是启动活动的代码。

Intent intentLogin = new Intent(getApplicationContext(), LoginActivity.class);
intentLogin.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intentLogin);

以上代码的问题是每次调用它时,即使应用程序在后台运行,也总是将我的应用程序带到前面,即烦恼我的客户。

我的问题是,有没有办法让我可以悄悄地将活动带到前线?如果我的应用程序在前面运行,那很好 - 客户可以立即看到新的活动。如果我的应用程序在后台运行,我想在应用程序在后台运行时悄悄地将活动带到前面,下次当我的客户恢复应用程序时,他们将看到我提出的新活动。

我该怎么做?

非常感谢!

2 个答案:

答案 0 :(得分:1)

如果我没理解错的话:

  • 应用程序背景和常用播放器。

当用户退出时,您可以清除保存在本地的用户数据并显示通知。点击通知后,启动LoginActivity

  • 应用背景和不寻常的播放器。

当通知显示时,用户不会点击它而不是运行应用。您可以onResume()中的BaseActivity检查用户数据是否存在。如果没有,请启动{{1 }}

  • App前景。

清除用户数据并强制启动LoginActivity

如果你不喜欢上面的解决方案(我认为最好的用户体验),试试这个:

  • 在特定活动的LoginActivity中,使用onCreate()隐藏意图。但请记住检查应用是否正在运行后台或前景。您可以参考this

答案 1 :(得分:0)

如果理解正确,我建议: 用户离开您的应用,当用户返回您的应用时,您希望显示其他活动,而不是.MainActivity 将另一个活动定义为Main并使用NoDisplay主题。

<activity
android:name=".MainActivity"
android:theme="@android:style/Theme.NoDisplay">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>

<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>

然后定义您的正常活动。在MainActivity类中定义static variable。例如

public static boolean appRun = false;
SecondActivity

onCreate()将其值更改为 true

class SecondActivity extends Activity{
@Override
protected void onCreate(Bundle Saved){
super.onCreate(Saved);
MainActivity.appRun = true;
}
}

和onPause设置this.finish();以避免不恢复到SecondActivity并强制从MainActivity启动。 然后,MainActivity的onCreate()或onResume()检查它的值并导航到另一个活动。

  if(appRun == true){
    /*it means user went to SecondActivity and you want to display another*/
    startActivity(new Intent(context, NewActivity.class));
    }
else{
//this is first time so navigate to SecondActivity
}

此外,如果您可以使用Fragments,此解决方案也可以使用它。