我有两个申请。第一个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());
}
非常感谢!