我有一个可以在后台运行的应用。在它运行时,它可能会带来一定的活动。但是,当应用程序将活动带到前台时,如果应用程序当前正在后台运行,我不希望Android将应用程序本身带到前面,只需在后台执行即可。原因是我不希望我的应用程序中断客户当前正在做的事情。
以下是启动活动的代码。
Intent intentLogin = new Intent(getApplicationContext(), LoginActivity.class);
intentLogin.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intentLogin);
以上代码的问题是每次调用它时,即使应用程序在后台运行,也总是将我的应用程序带到前面,即烦恼我的客户。
我的问题是,有没有办法让我可以悄悄地将活动带到前线?如果我的应用程序在前面运行,那很好 - 客户可以立即看到新的活动。如果我的应用程序在后台运行,我想在应用程序在后台运行时悄悄地将活动带到前面,下次当我的客户恢复应用程序时,他们将看到我提出的新活动。
我该怎么做?
非常感谢!
答案 0 :(得分:1)
如果我没理解错的话:
当用户退出时,您可以清除保存在本地的用户数据并显示通知。点击通知后,启动LoginActivity
。
当通知显示时,用户不会点击它而不是运行应用。您可以onResume()
中的BaseActivity
检查用户数据是否存在。如果没有,请启动{{1 }}
清除用户数据并强制启动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,此解决方案也可以使用它。