android在创建新任务时丢失Web视图上的内容

时间:2013-09-12 14:07:55

标签: android android-intent

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

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

如果另一方面,我在B上启动Activity时添加一个标志:FLAG_ACTIVITY_NEW_TASK。它工作一次。 A-> B-> A但在此之后我无法再次呼叫B. 我做的另一个测试:如果我从主屏幕开始呼叫B而不是A而不是B.它可以工作。所以我想这与B使用A或主屏幕中的意图调用不同有关。

无论如何,我无法打开应用程序,调用js并同时保留上下文。

我只试过模拟器。

这是App 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>

以下是App B的清单

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.CallerApp"
          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">
        <activity android:name=".Activity2" 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="dummy"
                        android:scheme="testintentapp"/>
            </intent-filter>
        </activity>

    </application>
</manifest>

从A:

呼叫B
@Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                intent.addCategory("android.intent.category.DEFAULT");
                startActivity(intent);

                return true;
            }

从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;

我用来区分何时从家中调用A或从App B调用以调用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());
    }

非常感谢!

0 个答案:

没有答案