gpt4 book ai didi

android - PhoneGap/Android,从 .shouldOverrideUrlLoading() 打开 ChildBrowser

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:05:31 25 4
gpt4 key购买 nike

我正在 PhoneGap 中打包一个移动网站(通过网络),我想拦截某些链接并使用 ChildBrowser 打开它们插入。是否可以从 native 代码触发ChildBrowser(我已经确定要拦截哪些链接)

我试过下面的代码,但它导致了 NULLPointerException:

ChildBrowser childBrowser = new ChildBrowser();
childBrowser.openExternal(url, true);

异常详情:

07-29 10:49:52.632      947-947/com.abc.androidTablet E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.NullPointerException
at com.phonegap.plugins.childBrowser.ChildBrowser.openExternal(ChildBrowser.java:127)
at com.mygola.androidTablet.abc_android$1.shouldOverrideUrlLoading(abc_android.java:96)
at android.webkit.CallbackProxy.uiOverrideUrlLoading(CallbackProxy.java:270)
at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:372)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)

最佳答案

如果没有您的 logcat,就很难为您提供使用该插件的进一步建议,但如果您从 native 层调用 openExternal,则没有理由使用该插件。如果你看一下 the source code您会看到它所做的一切就是获取您的 url 并将其加载到新的 DroidGap 页面中。

如果您只采取必要的部分,它可能有助于追踪异常发生的位置。

function void openExternalUrl() { 

intent = new Intent().setClass(this.ctx.getContext(), org.apache.cordova.DroidGap.class);
intent.setData(Uri.parse(url)); // This line will be removed in future.
intent.putExtra("url", url);
this.ctx.startActivity(intent);

}

编辑

上下文变量出现空异常。我当时不知道为什么它为空,但您可以轻松修复修改方法并传递当前上下文的问题。将 this.cordova 替换为上下文,你应该没问题。从你的 Activity 中调用这个,将 this 作为最后一个参数 (例如:childBrowser.openExternal("http://www.google.com", true,this)) .

public String openExternal(String url, boolean usePhoneGap,Context context) {
...
intent = new Intent().setClass(context, org.apache.cordova.DroidGap.class);
...
context.startActivity(intent);
}

同时为了防止其他调用此函数的错误,添加另一个带有原始参数的方法:

public String openExternal(String url, boolean usePhoneGap) {
openExternal(url,usePhoneGap,this.cordova.getActivity());
}

关于android - PhoneGap/Android,从 .shouldOverrideUrlLoading() 打开 ChildBrowser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17917344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com