Доступ к Android-нативный код от Ionic - PullRequest
0 голосов
/ 06 июля 2018

Я создал свое приложение для Android Ionic, но позже понял, что хочу получить доступ к некоторому оборудованию с моего устройства Android, что возможно с помощью собственного кода Android, поэтому есть ли способ получить доступ к коду Android из приложения Ionic (Apache Кордова)?

1 Ответ

0 голосов
/ 06 июля 2018

Вы можете вызвать собственный метод из контроллера JS, используя мост интерфейса JS:

  1. Определите класс JavaScriptHandler в вашей MainActivity и определите метод JavascriptInterface в этом классе. Этот интерфейс теперь будет действовать как мост между вашим веб-представлением и собственным контейнером.
  2. Добавьте этот обработчик Javascript в веб-приложение.
  3. Определите метод, который вам нужно вызвать из вашего контроллера.

Ниже приведен код для 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».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...