我有两个设备,三星平板电脑GT-P3113和Mini-PC rk31 sdk(都是android 4.2.2),运行我的应用程序。我的应用程序使用javascript界面来访问java方法。在其中一个设备工作正常(三星),但另一个没有。
public class BrowsableView extends WebView {
@SuppressLint("SetJavaScriptEnabled")
public BrowsableView(Context context, AttributeSet attrs) {
super(context, attrs);
/// configurações para permitir execução de javascript
WebSettings webSettings = getSettings();
webSettings.setPluginState(PluginState.ON);
webSettings.setJavaScriptEnabled(true);
setClickable(true);
setKeepScreenOn(true);
setBackgroundColor(Color.TRANSPARENT);
setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
addJavascriptInterface(new WebAppInterface(Config.getContext()), "Android");
setWebViewClient(new BrowsableViewClient());
setWebChromeClient(new BrowsableViewChromeClient());
}
public void prepareNextHtml(String url){
loadUrl(url);
}
public class BrowsableViewClient extends WebViewClient{
@Override
public void onReceivedError(WebView view, int errorCode,String description, String failingUrl) {
Log.d(TAG, "EVENTO ONERROR DENTRO DO BROWSABLE");
_dispatchBrowsableViewErrorEvent();
}
}
public class BrowsableViewChromeClient extends WebChromeClient{
@Override
public boolean onConsoleMessage(ConsoleMessage cm){
Log.d("WebView", String.format("%s @ %d: %s", cm.message(), cm.lineNumber(), cm.sourceId()));
Toast.makeText(getContext(), "WebViewConsole: " + String.format("%s @ %d: %s", cm.message(), cm.lineNumber(), cm.sourceId()), Toast.LENGTH_LONG).show();
return true;
}
}
public class WebAppInterface {
Context mContext;
public WebAppInterface(Context c){
mContext = c;
}
@JavascriptInterface
public void finish(){
handler.removeCallbacksAndMessages(null);
Toast.makeText(getContext(), "Evento onCompletion no BrowsableView - Android.finish().", Toast.LENGTH_LONG).show();
_dispatchBrowsableViewCompletionEvent();
}
}
}
<html>
<head>
<script type="text/javascript">
setTimeout("Android.finish()",8000);
</script>
</head>
<body width="100%" height="100%">
<img width="100%" height="100%" src="654138997615629/teste.jpg" />
</body>
</html>
在Mini-Pc设备中无法识别javascript界面的方法并返回错误
未捕获的TypeError:对象[object Object]没有方法&#34;完成&#34;
答案 0 :(得分:-1)
我有类似的问题。在一些4.4.2设备上进行了回调,有些则没有。我发现降级'AndroidManifest.xml'中的SDK有助于:
<uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="16"
/>
而不是19和19.现在,即使在忽略它的设备上,也会发生从JavaScript到@JavascriptInterface方法的回调。