Android: 创建具有多个应用程序活动的单个任务(Lauchmode问题)

7
我不知道如何解决这个Android问题。简单来说,我两个应用之间的流程如下:
流程
1. 将“应用程序A”绑定到“市场应用程序”中的服务(AIDL)。 2. 注册BroadcastReceiver并调用一个服务方法,该方法返回一个pendingIntent。 3. 启动PendingIntent(包含BillingActivity实例)。 4. 使用“startActivityForResult()”启动PaymentActivity。 5. 做一些事情,然后结束(finish())。 6. 在onActivityResult()方法中,发送广播并终止。 7. 获取广播信息。
问题:
我想创建一个包括以下组件的任务:
- Top1Activity(应用程序A) - BillingActivity(市场应用程序) - PaymentActivity(市场应用程序)
我试图更改BillingActivity + PaymentActivity的“launchMode”:
singleInstance 其中两者都会创建一个新的任务。当按返回按钮(或调用finish()方法)时,用户会按预期被重定向到上一个活动。问题:StartActivityForResult不能在多个任务之间使用(onActivityResult立即被调用)。
SingleTask
当按返回按钮(或调用finish()方法)时,在BillingActivity中,用户被重定向到Top2Activity(它是在后台任务中的)。我已经浪费了超过48个小时来解决它。如果需要,我可以发布代码。
谢谢
<activity
    android:name=".activities.MainActivity"
    android:configChanges="orientation|keyboardHidden"
    android:label="@string/title_activity_main"
    android:screenOrientation="portrait"
    android:windowSoftInputMode="stateAlwaysHidden|adjustPan" >
    <meta-data
        android:name="android.app.searchable"
        android:resource="@xml/searchable" />

    <intent-filter>
        <action android:name="android.intent.action.VIEW" />

        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />

        <data android:scheme="xxx" />
        <data android:host="xxx" />
    </intent-filter>
</activity>

我的Top1Activity(前台):

<activity
    android:name="activities.MainActivity"
    android:label="@string/app_name"
    android:screenOrientation="portrait" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

BillingActivity(前台):

<activity
    android:name=".activities.BillingActivity"
    android:configChanges="orientation|keyboardHidden"
    android:excludeFromRecents="true"
    android:label="@string/title_activity_billing"

    android:screenOrientation="portrait" >
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
    </intent-filter>
</activity>

PaymentActivity:

<activity
    android:name=".activities.PaymentActivity"
    android:configChanges="orientation|keyboardHidden"
    android:label="@string/title_activity_payment"
    android:screenOrientation="portrait"

    android:windowSoftInputMode="stateHidden" >
</activity>

AIDL服务返回pendingIntent:

Intent intent = new Intent();
intent.setClass(InBillingService.this, jp.xxx.activities.BillingActivity.class);
intent.putExtra(Consts.PENDING_INTENT_INFO, result);
intent.putExtra(Consts.RESULT_KEY, nextSession);


PendingIntent pendingIntent;                    
pendingIntent = PendingIntent.getActivity(InBillingService.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

bundle.putParcelable(Consts.PENDING_INTENT, pendingIntent);

从BillingActivity(或PaymentActivity)按返回按钮时,我仍然被重定向到Top2Activity...没有头绪吗?谢谢。

看起来你不需要任何特殊设置。移除所有特殊的启动模式。如果它不能按照你的期望工作,请解释一下发生了什么。 - David Wasser
谢谢David。我已更新我的消息(添加了一些代码)。我按照你告诉我的更改了启动模式,但它没有解决问题。没有想法?谢谢。 - johann
请解释一下Top2Activity是什么,并发布该活动的清单文件。并指出它如何进入任务栈。听起来你的问题可能与taskAffinity有关。 - David Wasser
Top2Activity是我“市场应用程序”的主要活动(在闪屏后)。这是在启动应用程序A之前显示的最后一个活动。清单信息在我的消息中可用。如果您需要更多详细信息,请告诉我。谢谢。 - johann
1个回答

2
BillingActivityPaymentActivity<activity>定义中添加android:taskAffinity=""

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接