0

アクティビティ間のフローを適切に処理するためのアドバイスを探しています。LoginActivityとMainActivityの2つのアクティビティがあるとしましょう。

<activity
android:name=".LoginActivity"
android:configChanges="keyboardHidden|orientation"
android:label="@string/app_name"
android:launchMode="singleTop"
android:screenOrientation="portrait">
<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<activity
android:name=".MainActivity"
android:configChanges="keyboardHidden|orientation"
android:label="@string/app_name"
android:launchMode="singleTop"
android:screenOrientation="portrait" />

ここで、アプリケーションが起動すると、LoginActivityを起動し、ログインが成功した場合はMainActivityを表示します。

ここで、特定のタイプのインテントを処理したいときに問題が発生します。アプリにカスタムスキーマを追加したいとします。

<intent-filter>
    <data android:scheme="customschema" />
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.BROWSABLE" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

これをどのアクティビティに追加しますか?理想的には、MainActivityに追加して、onNewIntentメソッドで処理したいのですが、アプリが起動していない可能性があります。その場合は、最初にLoginActivityを実行する必要があります。一方、LoginActivityに追加する場合は、ユーザーが正常にログインしたときにそのインテントをMainActivityに渡す方法が必要です。または、アプリが既に起動している場合は、フォーカスをLoginActivityからMainActivityに切り替えて、インテントデータをすぐに渡す必要があります。

この問題は以前に解決されたに違いないと思います。自分で解決策を考案するのではなく、ベストプラクティスに従うほうがよいと思います。そのため、アドバイスを求めています。

4

2 に答える 2

1

私が最初に言ったことを忘れて、私は放送受信機について考えていました。

代わりに、Commonswareによるこのソリューションを使用してください。

プログラム可能な方法でインテントフィルターを作成/無効化する方法は?

于 2013-03-25T23:36:27.983 に答える
1

LoginActivityインスタンスを1つ以上持つことはできませ

「メインアクティビティ」のインテントを受け取ったら、onCreateメソッドでログインを確認し、ユーザーがログインしていない場合は、インテントをLoginActivityに戻します。

ユーザーがLoginActivityに到達したが、すでにログインしている場合は、メインアクティビティにインテントをスローします。

これによりUIに不具合が発生する可能性がありますが、ログインしていないアプリケーションにはいかなる種類のイベントも到着しないため、設計に問題があることを示しているにすぎません。

于 2013-03-25T23:52:23.940 に答える