2

ユーザーがアプリを初めて起動するときに、パスワードの設定を強制する必要があります。したがって、をlaunchMode=singleTask使用してパスワード設定アクティビティを開始する主なアクティビティがありますstartActivityForResult

onActivityResultまた、ユーザーがパスワード設定ページからタップして戻ってきた場合に自宅に戻るようにするため、RESULT_CANCELLED. ただし、ユーザーがホームをタップしてアプリを再起動した場合は、パスワード設定ページを再度表示する必要があります。ただし、この場合、それは破棄され (メイン アクティビティがlaunchModeであるためsingleTask)、メイン アクティビティに戻っRESULT_CANCELLEDて終了します。

したがって、問題は主なアクティビティからのものであり、タップして戻ることとホームをタップしてからアプリに再入力することを区別できません。

launchModeasを維持しながら、この要件を満たす方法はありますsingleTaskか?

4

2 に答える 2

0

タップバック用の 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 を使用して、アプリが初めて実行され、パスワード/残りのフィールドが設定されているかどうかを確認してください。

于 2012-09-07T07:08:03.580 に答える
0

最近、非常によく似た問題がありました。

私が提案するのは、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
    ...

これはあなたの問題に対する封筒の裏側のアプローチですが、このパターンは私にとってはうまくいきました。

私にとって、私の認証/登録はすべてAbstarct Class拡張された で行われますActivity。私の各アクティビティは、このクラスを拡張します。この の に Auth/Reg メソッド呼び出しを配置しonResume()​​ますAbstarct Class

メソッドでastartActivityForResultが起動されてonResume()失敗した場合、私はアクティビティを実行しませんfinish()が、アプリを続行させて、どの Reg/Auth フォームを提示するかをクラスに処理させます。さまざまなフラグをチェックして、実行することを意図したアクションを判断します。

このアプローチの追加の利点は、Activityこの抽象クラスを拡張する可能性のあるすべてのものが、使用されるたびにセキュリティ チェックの追加の利点を得るということです。

于 2012-11-07T01:24:11.957 に答える