按下设备的主页键后,如何始终在图标按下时打开当前活动
Posted
技术标签:
【中文标题】按下设备的主页键后,如何始终在图标按下时打开当前活动【英文标题】:How to always open current activity on icon press , after pressing the home key of device 【发布时间】:2014-01-15 19:49:50 【问题描述】:按下主页键后,我真的有 Activity 启动的东西。假设我有三个 A、B、C 活动,并且我禁用了设备上的后按。假设 A 是我的主要启动器活动,我从 A 移动到 B 和 B 到 C 并按下主页键并再次单击图标然后它总是启动作为启动器的 A。但是我不希望这样,当在 C 上按 home 键然后单击图标应该总是以 C Activity 开始。如果我在 B Activity 上按 Home 键,那么总是想在单击图标时打开 B Activity。这个怎么做。
关于安装完成时我不明白的另一件事,它有两个选项 DONE 和 OPEN。因此,当按下 Done 时,它可以在当前 Activity 的 home 按键上正常工作,但是当以 OPEN 启动时,它总是启动 A Activity,在任何 Current Activity 按下 home 键后,它总是启动 A Activity。
如何解决这个问题?谢谢大家
Manifest.xml 文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.sunil.apiv2map"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.sendmyposition.A"
android:configChanges="orientation|keyboardHidden|screenSize" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.example.sendmyposition.B"
android:configChanges="orientation|keyboardHidden|screenSize" >
</activity>
<activity
android:name="com.example.sendmyposition.C"
android:configChanges="orientation|keyboardHidden|screenSize" >
</activity>
</application>
</manifest>
调用活动 A 到 B
Intent intent = new Intent(A.this, B.class)
startActivity(intent);
finish()
并调用 B 到 C
Intent intent = new Intent(B.this, C.class)
startActivity(intent);
【问题讨论】:
您在应用中使用“singleinstance”还是“singletask”启动模式?如果是,它会导致您的主要活动,在您的情况下为 A 活动,将始终被带到活动的顶部。 无论如何都不行 您在 B 或 C 活动中调用完成吗?以及您提到的第二件事,如果您在安装后单击“打开”,它会打开您的应用程序的一个实例,然后当您打开活动时通过启动器图标,它会打开您应用程序的不同实例.. 显示您的清单文件和一些代码,也许它是您代码中的内容.. 如果在 B 和 C 中调用完成会发生什么,如果在 B 和 C 中没有调用完成会发生什么 如果您调用完成,该活动,例如 B,将被杀死/结束,因此当您打开应用程序时,A 活动将出现,因为 B 已经被杀死。如果您不使用完成,则应将您的活动放在前面。 【参考方案1】:您可以使用Preferences 来执行此操作...包
android.preference
提供管理应用程序首选项和实现首选项 UI 的类。使用这些可确保以相同方式维护每个应用程序中的所有首选项,并且用户体验与系统和其他应用程序的用户体验一致。
您可以在SharedPreferences
中保存当前的活动名称(字符串),然后在应用程序启动后读取MainActivity
中的此字符串以打开上次打开的活动。
看jukas在这里回答:How to start another Activity as main and launcher after Deploying the application into device
或者您可以从这里使用这个 PoC:How to return to the latest launched activity when re-launching application after pressing HOME?
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0)
// Activity was brought to front and not created,
// Thus finishing this will get us to the last viewed activity
finish();
return;
// Regular activity creation code...
【讨论】:
我们如何在 Laucnher 活动中启动打开的最后一个活动假设我的启动器活动是 MainActivity 那么如何在 MainActivity 中打开最后一个打开的活动,你能给我需要的代码吗?写在mainactivty中以上是关于按下设备的主页键后,如何始终在图标按下时打开当前活动的主要内容,如果未能解决你的问题,请参考以下文章