私のアプリケーションでは、iosched 2012 アプリのコードをいくつか使用しました。具体的には、開始ワークフローは次のとおりです。
1.ユーザーがアプリのランチャーアイコンを押す
2.HomeActivity は、ユーザーが認証されているかどうかを確認します。そうでない場合は、認証アクティビティを開始し、インテントを渡して終了します。
3.ログイン プロセスが成功すると、認証アクティビティは HomeActivity を開始するためにアクティビティを開始し、それ自体を終了します。
4.HomeActivity は、ユーザーが認証されているかどうかを再度確認し、アプリケーションのホーム画面を表示します。
次のコードは、API レベル > 11 で魅力的に機能します。今日、Gingerbread でアプリを試してみましたが、失敗しました。ステップ 3 は機能しますが、HomeActivity は開始されますが、前面に表示されません。ホームアクティビティと現在表示されているコンテンツを表示するには、最近のリストを使用してアプリケーションを選択する必要があります。
oncCreate メソッドの HomeActivity からのコードとチェックは次のとおりです。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(!AccountUtils.isSystemAuthenticated(this)) {
AccountUtils.startSystemAuthentication(this, getIntent());
finish();
} else if(!AccountUtils.isAppAuthenticated(this)) {
AccountUtils.startAppAuthentication(this, getIntent());
finish();
}
if(isFinishing()) {
return;
}
setContentView(R.layout.activity_main);
...
}
}
ログイン プロセスの完了後に Authentication アクティビティで呼び出されるメソッド
protected void handleLoginSuccess(LoginServiceResponse response, String username, String password) {
if(....) {
if(mFinishIntent != null) {
mFinishIntent.addCategory(Intent.CATEGORY_LAUNCHER);
mFinishIntent.setAction(Intent.ACTION_MAIN);
mFinishIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(mFinishIntent);
}
finish();
} else {
super.handleLoginSuccess(response, username, password);
}
}
mFinishIntent メンバー変数は、HomeActivity から渡されたインテントです (getIntent() を使用)。
前述したように、API レベル > 11 ではこれはうまく機能し、HomeActivity の onCreted メソッドのブレークポイントは 2 回ヒットしますが、Gingerbread フォンでは 1 回だけヒットします (アプリケーションの起動時のみ)。
別のフラグを使用する必要がありますか、それとも何が起こっているかについて他に考えがありますか?
ありがとう