Android - 检测应用程序从家庭或历史启动

Posted

技术标签:

【中文标题】Android - 检测应用程序从家庭或历史启动【英文标题】:Android - detecting application launch from home or history 【发布时间】:2011-07-23 19:19:19 【问题描述】:

检测 android“应用程序”何时从主屏幕/历史屏幕启动的最佳方法是什么?

基本上,我想要实现的是强制用户每次返回应用程序时登录到某些屏幕(即他们一旦登录就可以完全访问所有活动,但基本上我希望他们重新 -当他们通过在主屏幕上启动返回应用程序时进行身份验证)。

我知道之前有人问过类似的问题(即如何记录应用程序的启动)-但我所见过的还没有一个能够解决我的问题。欢迎所有想法...

【问题讨论】:

【参考方案1】:

怎么样

    if((getIntent().getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY )!=0) 
        Log.d(TAG, "Called from history");
    

? 这使用了simple Intent flag。

【讨论】:

有人可以评论这个答案的有效性吗?这对其他比我更有经验的 Android 开发人员有意义吗? 您可以简单地对其进行测试 - 可在我们所有的设备上运行。如果没有,请告诉我。 请注意,这涉及应用程序启动,而不是从后台获取正在运行的应用程序。 FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY 标志在从最近或历史启动后重新创建活动时设置,但如果仅恢复活动,则不会设置 FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY。以上代码将返回 false ***.com/questions/24065146/…【参考方案2】:

检测 Android“应用程序”何时从主屏幕/历史屏幕启动的最佳方法是什么?

你不能,AFAIK。

基本上,我想要实现的是强制用户每次返回应用程序时登录到某些屏幕(即他们一旦登录就可以完全访问所有活动,但基本上我希望他们重新 -当他们通过在主屏幕上启动返回应用程序时进行身份验证)。

请使用合理、用户友好的登录系统。例如,如果您觉得他们的登录凭据根据时间已过时,则强制他们再次登录。您可以通过检查 onCreate() 中的凭据来执行此操作,如果它们已过时,请致电 startActivity() 以启动您的登录活动(或弹出登录对话框,或以任何方式登录)。

当然,更好的方法是完全跳过登录。除非这是“密码保险箱”、银行应用程序或其他需要高于平均安全性的东西,否则您不需要他们登录,如果他们认为您的登录要求没有必要,您的用户会感到恼火。大多数移动应用程序不需要身份验证。

根据他们到达活动的方式强制登录是用户敌对的。您是在告诉那些屈尊将手机用于您的应用以外的事情的用户,他们是二等公民。

【讨论】:

感谢您的回复 - 不幸的是,这是针对客户的,它需要相当高的安全级别(数据非常敏感)。我认为我的搜索没有办法,而基于时间的会话正是我要去的地方。 客户又一次用飞溅的方式毁了一天>_ 你可以在activity暂停的时候关闭session,打开一个flag来关闭activity,在暂停的时候关闭activity。 我也担心客户不会接受 CommonWare 的回答。@Warpzit【参考方案3】:

只需创建一个没有内容视图的树桩活动,并在应用程序启动时启动其他活动

例如将以下内容放入 onCreate:

Class<?> myclass;

if(isTimeForActivity1)
    myclass = Activity1.class;
else if(isTimeForActivity2)
    myclass = Activity2.class;


startActivity(new Intent(this, myclass));
finish();

【讨论】:

【参考方案4】:

尝试查看具有设计良好解决方案的“OI Safe”应用程序(我不知道代码是否也设计得很好,但是,你会看:p)

【讨论】:

以上是关于Android - 检测应用程序从家庭或历史启动的主要内容,如果未能解决你的问题,请参考以下文章

如何检测哪个活动导致服务在 Android 中启动?

清除整个历史堆栈并在 Android 上启动一个新活动

如何记录在Android中打开相机的历史记录

Android性能优化第(八)篇---App启动速度优化之耗时检测处理

缓存的 Android 蓝牙设备

如何从 android 活动启动 Unity 应用程序?