我在我的应用程序中打开一个链接,一旦按下后我想显示HomePage以保留用户更多时间。我一直在努力实现这一目标但却无法做到这一点。我将homeLauncher活动作为我的top和baseActivity。
DeepLink Tap>打开所需的活动>用户按下后退按钮>检查它的最后一个活动但不是homeActivity>如果是,请将用户导航到homeActivity。
尝试以下代码:
@Override
public void onBackPressed() {
ActivityManager mngr = (ActivityManager) getSystemService( ACTIVITY_SERVICE );
List<ActivityManager.RunningTaskInfo> taskList = mngr.getRunningTasks(10);
if(taskList.get(0).numActivities == 1 && taskList.get(0).topActivity.getClassName().equals(this.getClass().getName())){
//// This is last activity
}
else{
//// There are more activities in stack
}
super.onBackPressed();
}
我也尝试过isTaskRoot但结果是一样的。它没有给出正确的答案。请帮助
答案 0 :(得分:3)
使用isTaskRoot()方法。 (来自h9kdroid评论 - here)
@Override
public void onBackPressed() {
ActivityManager mngr = (ActivityManager) getSystemService( ACTIVITY_SERVICE );
List<ActivityManager.RunningTaskInfo> taskList = mngr.getRunningTasks(10);
if(isTaskRoot()){
//// This is last activity
} else{
//// There are more activities in stack
}
super.onBackPressed();
}
答案 1 :(得分:0)
请注意,以下解决方案仅适用于API14 +。
创建自定义应用程序类;
public class App extends Application {
private int created;
@Override
public void onCreate() {
registerActivityLifecycleCallbacks(new Callbacks());
}
public int getCreated() {
return created;
}
private class Callbacks implements ActivityLifecycleCallbacks {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
created++;
}
@Override
public void onActivityDestroyed(Activity activity) {
created--;
}
}
}
在应用程序元素的AndroidManifest.xml中注册它;
<application name=".App"/>
在通过深层链接打开的活动中,使用以下代码;
@Override
public void onBackPressed() {
if (((App) getApplicationContext()).getCreated() == 1) {
// start your home activity
}
super.onBackPressed();
}
我把它写在了我的头顶,所以我没有机会测试它,但理论上它应该有效。
答案 2 :(得分:0)
指定所需活动的父活动,例如:
<activity
android:name=".DesiredActivity"
android:parentActivityName="com.packagename.HomePage" >
<!-- The meta-data element is needed for versions lower than 4.1 -->
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.packagename.HomePage" />
</activity>
声明父活动后,您可以使用NavUtils API 通过识别哪个活动来合成新的后栈 适合每项活动的父母。
将onBackPressed覆盖为:
@Override
public void onBackPressed() {
Intent intent = NavUtils.getParentActivityIntent(this);
startActivity(intent);
super.onBackPressed();
}
Android开发者网站有相同问题的非常好的资源。请参阅链接http://developer.android.com/training/implementing-navigation/temporal.html#SynthesizeBackStack
答案 3 :(得分:0)
引自 ActivityManager.RunningTaskInfo
您可以检索有关当前特定任务的信息 &#34;运行&#34;在系统中。请注意,正在运行的任务并不意味着 给定任务实际上有一个正在运行的进程;它很简单 表示用户已经转到它并且从未关闭它,但是当前 系统可能已经杀死了它的进程而只是坚持它的进程 最后一个状态,以便在用户返回时重新启动它。
String getLastOpenClass ;// Global
ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
List< ActivityManager.RunningTaskInfo > taskInfo = am.getRunningTasks(1);
ComponentName componentInfo = taskInfo.get(0).topActivity;
componentInfo.getPackageName();
getLastOpenClass=taskInfo.get(0).topActivity.getClassName();
if(getLastOpenClass.equals("Your_Class_Name"))
{
}else{
}
给予许可
<uses-permission android:name="android.permission.GET_TASKS" />
ActivityManager 会记录 正在运行的任务 和最顶层的任务。
ActivityManager mngr = (ActivityManager) getSystemService( ACTIVITY_SERVICE );
List<ActivityManager.RunningTaskInfo> taskList = mngr.getRunningTasks(10);
if(taskList.get(0).numActivities == 1 && taskList.get(0).topActivity.getClassName().equals(this.getClass().getName()))
{
Log.i(TAG, "This is Last activity in the stack");
}
礼貌How to check if an activity is the last one in the activity stack for an application?
请检查 How can I get the current foreground activity package name
答案 4 :(得分:0)
你可以简单地使用ActivityManager
它跟踪哪个活动是什么,而不是这里是我偶然发现的一段代码:
ActivityManager mngr = (ActivityManager) getSystemService( ACTIVITY_SERVICE );
List<ActivityManager.RunningTaskInfo> taskList = mngr.getRunningTasks(10);
if(taskList.get(0).numActivities == 1 &&
taskList.get(0).topActivity.getClassName().equals(this.getClass().getName())) {
Log.i(TAG, "This is last activity in the stack");
}