Я долгое время разрабатывал приложение для Android для своего бизнеса, и оно работало нормально, используя веб-просмотр и перезванивая между нативными функциями.Если это уместно, вот точка входа Java для моего приложения:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setContentView(R.layout.activity_main);
myWebView = (WebView) findViewById(R.id.webview);
final Context that = this;
myWebView.addJavascriptInterface(new WebAppInterface(this, this), "Android");
myWebView.setWebViewClient(new WebViewClient(){
public void onPageFinished(WebView view, String url) {
myWebView.evaluateJavascript("pageFinished()", null);
}
});
pm = this.getPackageManager();
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setAllowUniversalAccessFromFileURLs(true);
webSettings.setDomStorageEnabled(true);
WebView.setWebContentsDebuggingEnabled(true);
Window window = getWindow();
//window.setStatusBarColor(Color.parseColor("#3596d4"));
myWebView.loadUrl("file:///android_asset/index.html");
IntentFilter filter = new IntentFilter();
filter.addCategory(Intent.CATEGORY_DEFAULT);
filter.addAction(getResources().getString(R.string.activity_intent_filter_action));
registerReceiver(myBroadcastReceiver, filter);
mDetector = new GestureDetectorCompat(that, this);
myWebView.setOnTouchListener(touchListener);
}
Теперь, когда я установил минимальную версию 18 в своем файле Gradle, некоторые строки были помечены Android Studio как «не поддерживаемые API».18 ', прежде всего мои myWebView.evaluateJavascript
звонки, но также и некоторые другие вещи, такие как WebView.setWebContentsDebuggingEnabled
.
Как я могу сделать evaluateJavascript
в API 18?
Также в некоторых местах, когда я звоню evaluateJavascript
, я ожидаю ответ, например:
myWebView.evaluateJavascript("Back.go()", new ValueCallback<String>() {
@Override
public void onReceiveValue(String canGoBack) {
if (canGoBack.equals("false")) {
moveTaskToBack(true);
} else {
// don't need to do anything, already called Back.go()
// that means the javascript already handled navigation
}
}
});
Это будет возможно с API 18?