繁体   English   中英

带有startActivityForResult的android launchMode singleTask

[英]android launchMode singleTask with startActivityForResult

我们有一项强制要求用户在首次启动应用程序时设置密码。 因此,我们的主要活动是launchMode=singleTask ,它使用startActivityForResult启动密码设置活动。

如果用户从密码设置页面上点击回来,我们还希望用户返回自己的家,因此,如果代码收到RESULT_CANCELLED ,我们会将代码放入其主要活动中的onActivityResult 但是,如果用户点击家并重新进入我们的应用,我们想再次显示密码设置页面。 但是在这种情况下,它将被销毁(因为主要活动的launchModesingleTask ),并且还向我们的主要活动返回RESULT_CANCELLED使其完成。

因此,问题出在主要活动上,我们无法区分是点击还是点击,然后重新进入应用。

无论如何要满足此要求,同时仍将launchMode保持为singleTask

onBackPressed()用于回击

当活动检测到用户按下返回键时调用。 默认实现只是完成当前活动,但是您可以覆盖此活动以执行所需的任何操作。

http://developer.android.com/reference/android/app/Activity.html#onBackPressed%28%29

&& onPause()用于主屏幕

(尽管可能是由于其他原因(例如您的下一个活动或切换到另一个应用程序)引起的) http://developer.android.com/reference/android/app/Activity.html#onPause%28%29

更新:

为什么不使用Sharedpreferences并检查应用程序是否是首次运行且是否设置了密码/剩余字段,而不是使用当前使用的方法。

我最近有一个非常相似的问题。

我的建议是,当您获得RESULT_CANCELLED时,您实际上并没有完成应用程序。

而是执行以下操作:

protected void onActivityResult(int requestCode, int resultCode, Intent intent) {   

    if (resultCode == Activity.RESULT_CANCELED) {

        if (/*TEST IF A USER IS SIGNED IN*/) {

            //IF SIGNED IN PROCEED TO MAIN ACTIVITY
        }
    // OTHERWISE FORCE THEM TO SIGNIN/REGISTER/WHATEVER AGAIN 
    // WITH ANOTHER CALL TO startActivityForResult
    ...

这是解决您的问题的解决方法的后盾,但是这种模式对我有用。

对我来说,我的身份验证/注册都是在扩展ActivityAbstarct Class中完成的。 然后,我的每项活动都会扩展该课程。 我将Auth / Reg方法调用放在此Abstarct ClassonResume()中。

当在onResume()方法中启动startActivityForResult并失败时,我没有finish()活动,只是让应用继续进行,让类处理要呈现的Reg / Auth表单。 它会通过检查各种标志来确定它打算执行的操作,从而执行该操作。

这种方法的附加好处是,可能扩展此抽象类的每个Activity每次使用时都会获得安全检查的附加好处。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM