在weex上了市场这后,反馈出现应用打开之后,在进行二级界面跳转时,会选择多个应用跳转,查看资料 xie.infoq.cn/article/f09… 等处理之后,找到了一些解决思路
- 文章中解决的方法是新建一个Module类,重新写Push方法,weex界面通过新module的新方法来实现跳转,但这样,就需要修改js界面的调用方法,升级成本偏高,而且ios端也需要修改。
最终考虑通过重写原生push方法解决,通过3步走,解决跳转选择应用问题
1.新建一NavigatorModule 继承自 WXNavigatorModule
public class JlpayWXNavigatorModule extends WXNavigatorModule {
//定制CATEGORY 解决手机装其他Weex应用,会选择跳转的问题
private final String CATEGORY_WEEX = "com.company.android.intent.category.WEEX";
@JSMethod(
uiThread = true
)
public void push(String param, JSCallback callback) {
if (!TextUtils.isEmpty(param)) {
if (WXSDKEngine.getActivityNavBarSetter() != null && WXSDKEngine.getActivityNavBarSetter().push(param)) {
if (callback != null) {
callback.invoke("WX_SUCCESS");
}
return;
}
if (this.mWXSDKInstance.getContext() instanceof Activity) {
Activity activity = (Activity) this.mWXSDKInstance.getContext();
if (WXSDKEngine.getNavigator() != null && WXSDKEngine.getNavigator().push(activity, param)) {
if (callback != null) {
callback.invoke("WX_SUCCESS");
}
return;
}
}
try {
JSONObject jsonObject = JSON.parseObject(param);
String url = jsonObject.getString("url");
if (!TextUtils.isEmpty(url)) {
Uri rawUri = Uri.parse(url);
String scheme = rawUri.getScheme();
Uri.Builder builder = rawUri.buildUpon();
if (TextUtils.isEmpty(scheme)) {
builder.scheme("http");
}
Intent intent = new Intent("android.intent.action.VIEW", builder.build());
intent.addCategory(CATEGORY_WEEX);
intent.putExtra("instanceId", this.mWXSDKInstance.getInstanceId());
this.mWXSDKInstance.getContext().startActivity(intent);
if (callback != null) {
callback.invoke("WX_SUCCESS");
}
}
} catch (Exception var9) {
WXLogUtils.eTag("Navigator", var9);
if (callback != null) {
callback.invoke("WX_FAILED");
}
}
} else if (callback != null) {
callback.invoke("WX_FAILED");
}
}
}
2. 在WxSDKEngine中注册这个Module
WXSDKEngine.registerModule("navigator", JlpayWXNavigatorModule.class);
3. 在AndroidManifest文件中,更新响应WeexPageAcitvity的Category.
<activity
android:name=".weex.WXPageActivity"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="com.alibaba.weex.protocol.openurl" />
<action android:name="com.taobao.android.intent.action.WEEX" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="com.company.android.intent.category.WEEX" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:scheme="file" />
<data android:scheme="wxpage" />
</intent-filter>
</activity>
运行,顺利解决。 注意 1.中的CATEGORY_WEEX 和3.中的category 要匹配