私はAndroidプログラミングに比較的慣れていません。仕事で、カスタム ホーム アクティビティ ランチャーを作成する必要があるタスクを与えられました。少し調べてみたところ、Android 開発者の Web サイト ( home sample ) で例を見つけました。これが私のプロトタイプの始まりでした。
カスタム ホーム アクティビティでは、ユーザーに認証を要求する必要があります (いくつかの簡単な資格情報を入力します)。私が考えたのは、ホーム アクティビティからサブ アクティビティを起動し、インテントの結果をホーム アクティビティに戻すことでした。これらの資格情報に関する情報をキャプチャできるようにする必要があり、その情報は Home アクティビティに戻される予定でした。ただし、これを試すと問題が発生します。LogCat に、「アクティビティが新しいタスクとして起動されているため、アクティビティ結果をキャンセルしています」というログが表示されます。
startActivityForResult メソッドについては認識していますが、うまく機能していないようです。ここで、ホーム アクティビティからアクティビティを起動します。
@Override
protected void onResume() {
super.onResume();
bindRecents();
Intent iii = new Intent(this, Login.class);
startActivityForResult(iii, STATIC_LOGIN_INTEGER_VALUE);
}
そのコードが実行されると、ActivityManager タグから上記のログを取得します。
My Login アクティビティには、ユーザーが資格情報を入力した後に押すボタンがあります。資格情報に問題がなければ、次のことを試みます (何が起こっているのかを把握できるように、いくつかのログを記録します)。
public void onClick(View src) {
// check for authentic credentials
if(IsValid())
{
Intent loginAuth = new Intent("Login");
loginAuth.putExtra("userRole", userRole);
Log.d("LOGIN", "Setting result...");
if (getParent() == null) {
Log.d("LOGIN", "Parent was null");
setResult(Activity.RESULT_OK, loginAuth);
}
else {
Log.d("LOGIN", "setting result on parent...");
getParent().setResult(Activity.RESULT_OK, loginAuth);
}
Log.d("LOGIN", "Finishing the activity");
finish();
}
}
これらのアクティビティをマニフェスト ファイルで次のように定義しました。
<activity android:name="Home"
android:theme="@style/Theme"
android:launchMode="singleInstance"
android:stateNotNeeded="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity android:name="Login"
android:label="Login"
android:launchMode="singleInstance">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
</intent-filter>
</activity>
Login アクティビティのインテント フィルターをいじっていました。私はもともとそれを何も設定していませんでした。また、launchMode を空白にしました (これはデフォルトで標準になっていると思います)。私はこれらのオプションのほとんどをいじってみましたが、ActivityManager が新しいタスクとしてアクティビティを起動しようとしているようで、返されたインテント (私が必要とする) を無視したいという事実を変えるものは何もないようです。