android在创建新任务时在web视图上丢失上下文

android在创建新任务时在web视图上丢失上下文,android,android-intent,Android,Android Intent,我有两份申请。第一个具有web视图,其中包含指向另一个应用程序的链接和时间戳。 在这个web视图中,我有一个打开另一个应用程序B的链接。在B中,我有一个按钮。点击按钮会让我回到应用程序A, 不需要重新加载它,也不需要执行javascript代码来填充web视图中的其他字段。 因此,应用程序a应该被带回,时间戳不应该被更改,javascript被调用,字段被正确填充 问题是,如果我执行此方案,并且仅使用StartActivity()从A启动应用程序B,它将不起作用。我可以做A-B和B-A,但我的j

我有两份申请。第一个具有web视图,其中包含指向另一个应用程序的链接和时间戳。 在这个web视图中,我有一个打开另一个应用程序B的链接。在B中,我有一个按钮。点击按钮会让我回到应用程序A, 不需要重新加载它,也不需要执行javascript代码来填充web视图中的其他字段。 因此,应用程序a应该被带回,时间戳不应该被更改,javascript被调用,字段被正确填充

问题是,如果我执行此方案,并且仅使用StartActivity()从A启动应用程序B,它将不起作用。我可以做A-B和B-A,但我的javascript没有被调用 因为调用A的目的不正确。换句话说,当从B调用A时,我应该在intent对象中找到将我带到A的操作和数据,但是intent中的操作为NULL

如果在另一方面,我在启动B上的活动时添加了一个标志:flag_Activity_NEW_TASK。它只工作一次。A->B->A但是在那之后我不能再给B打电话了。 我做的另一个测试是:如果我从主屏幕开始呼叫B,然后再呼叫A和B,它就可以工作了。所以,我想这与这样一个事实有关,即如果从A或主屏幕使用意图调用B,则B是不同的

无论如何,我无法让它同时打开应用程序、调用js和保持上下文

我只在模拟器上试过

这是应用程序A的清单

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.cgi.csb.launcher"
          android:versionCode="1"
          android:versionName="1.0">
    <uses-sdk android:minSdkVersion="12"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
        <activity android:name=".Activity1" launchMode="singleTask">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:host="localhost" android:scheme="myactivity"></data>
            </intent-filter>
        </activity>
    </application>
</manifest>
从B呼叫A:

case R.id.button:
                   Intent intent = new Intent();
                   intent.setData(Uri.parse("myactivity://localhost"));
                   intent.putExtra("firstKeyName","FirstKeyValue");
                   intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
                   intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                   intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
                   startActivity(intent);
                   finish();
                   break;
我用来区分何时从home调用A或何时从AppB调用javascript的代码

    Intent intent = getIntent();

    if ("myactivity://localhost".equals(intent.getDataString())) {
        Log.d(TAG, "*** Call JS with action : " + intent.getAction());
        _jsHandler.javaFnCall("Hardcoded params");
    } else {
        Log.d(TAG, "***Just call the app with action :" + intent.getAction());
    }
非常感谢

case R.id.button:
                   Intent intent = new Intent();
                   intent.setData(Uri.parse("myactivity://localhost"));
                   intent.putExtra("firstKeyName","FirstKeyValue");
                   intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
                   intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                   intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
                   startActivity(intent);
                   finish();
                   break;
    Intent intent = getIntent();

    if ("myactivity://localhost".equals(intent.getDataString())) {
        Log.d(TAG, "*** Call JS with action : " + intent.getAction());
        _jsHandler.javaFnCall("Hardcoded params");
    } else {
        Log.d(TAG, "***Just call the app with action :" + intent.getAction());
    }