Вы можете вызвать собственный метод из контроллера JS, используя мост интерфейса JS:
- Определите класс JavaScriptHandler в вашей MainActivity и определите
метод JavascriptInterface в этом классе. Этот интерфейс теперь будет действовать
как мост между вашим веб-представлением и собственным контейнером.
- Добавьте этот обработчик Javascript в веб-приложение.
- Определите метод, который вам нужно вызвать из вашего контроллера.
Ниже приведен код для MainActivity, который расширяет CordovaActivity:
public class MainActivity extends CordovaActivity {
public static Context mContext;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = MainActivity.this;
mLoader = new ProgressDialog(mContext);
// enable Cordova apps to be started in the background
Bundle extras = getIntent().getExtras();
if (extras != null && extras.getBoolean("cdvStartInBackground", false)) {
moveTaskToBack(true);
}
// Set by <content src="index.html" /> in config.xml
loadUrl(launchUrl);
final WebView webView = (WebView) appView.getEngine().getView();
webView.addJavascriptInterface(this.getJavaScriptHandler(), "NativeCall");
}
public JavaScriptHandler getJavaScriptHandler() {
return new JavaScriptHandler(this.getApplicationContext());
}
public class JavaScriptHandler {
CordovaActivity parentActivity;
private Context mContext;
public JavaScriptHandler(final Context context) {
this.mContext = context;
}
@JavascriptInterface
public String mNativeFunction() {
return getDeviceName;
}
}
public static String getDeviceName() {
String brand = Build.BRAND;
String manufacturer = Build.MANUFACTURER;
String model = Build.MODEL;
if (model.startsWith(brand)) {
return (model);
}
return (brand) + " " + model;
}
}
Вызовите этот собственный метод из вашего контроллера Javascript следующим образом:
MyDemoApp.controller('SomePageController', function ($scope) {
$scope.deviceName = "";
$scope.getDeviceName = function () {
$scope.deviceName = NativeCall.mNativeFunction();
}
})
Вы можете использовать любое имя, которое вам нравится, для демонстрации JavaScriptHandler в javascript. В моем случае я использовал «NativeCall».