技術っぽいことを書いてみるブログ

PythonとかVue.jsとか技術的なことについて書いていきます。

Android用のハイブリッドアプリを構築してみる。。。~Cordovaプラグインの追加・実装~

はじめに

前回の記事(こちら)でvueプロジェクトにcordovaを追加するプロジェクトを作成しました。
今回は、そのプロジェクトでcordovaのプラグインでダイアログ・トースター表示・カメラなどを試してみたいと思います。

使うcordovaプラグイン

環境のおさらい

メインのvueプロジェクト

f:id:where-is-wally:20200509150357p:plain

  • メインとなるvueのプロジェクトは、「vuecordova」フォルダにあります。
  • 「vuecordova」プロジェクト配下には、「src-cordova」フォルダがあり、このフォルダがcordovaプロジェクトのルートフォルダとなります。
    vuecordovaプロジェクトをビルドすると、「src-cordova/www」フォルダにビルドされたリソースが格納されます。

cordovaプロジェクト

f:id:where-is-wally:20200509150438p:plain

  • cordovaプロジェクトフォルダになります。

cordovaプラグインの追加

cordova plugin addプラグインを追加する

cordovaプロジェクトのフォルダで実行する必要があります

>cd src-cordova
>cordova plugin add cordova-plugin-dialogs
>cordova plugin add cordova-plugin-camera
>cordova plugin add cordova-plugin-toaster

cordovaプラグインの確認

>cordova plugin ls
cordova-plugin-camera 4.1.0 "Camera"
cordova-plugin-dialogs 2.0.2 "Notification"
cordova-plugin-toaster 0.0.1 "Toaster Plugin"
cordova-plugin-whitelist 1.3.4 "Whitelist"

プラグインを呼び出す実装を行う

<template>
  <div class="home">
    <sui-button primary @click="javascriptAlert">javascript alert</sui-button>
    <br><br>
    <sui-button primary @click="cordovaAlert">cordova plugin dialog alert</sui-button>
    <br><br>
    <sui-button primary @click="javascriptConfirm">javascript confirm</sui-button>
    <br><br>
    <sui-button primary @click="cordovaConfirm">cordova plugin dialog Confirm</sui-button>
    <br><br>
    <sui-button primary @click="cordovaToaster">cordova plugin dialog Toaster</sui-button>
    <br><br>
    <sui-button primary @click="cordovaCamera">cordova plugin dialog Camera</sui-button>
    <img :src="imgData" />
  </div>
</template>

<script>
// @ is an alias to /src
import HelloWorld from '@/components/HelloWorld.vue'

export default {
  name: 'Home',
  data: function(){
    return {
      imgData : ""
    }
  },
  components: {
    HelloWorld
  },
  methods: {
    javascriptAlert: function() {
      alert("hogehoge");
    },
    cordovaAlert: function(){
      navigator.notification.alert("aaa", function(){}, "タイトル", "OK!");
    },
    javascriptConfirm: function(){
      const ret = confirm("○○ですか?");
      alert(ret);
    },
    cordovaConfirm: function(){
      navigator.notification.confirm("××ですか?", function(result){alert(result)}, "タイトル", "OK!, No!");
    },
    cordovaToaster: function(){
      navigator.showToast('CordovaToasterでshowTast');
    },
    cordovaCamera: function(){
      navigator.camera.getPicture((imageData) => {this.imgData = "data:image/jpeg;base64," + imageData;}, function(message){alert(message)}, {});
    }
  }
}
</script>
  • ボタンを押下した際に、notificationやshowToastやcameraを呼び出すようにしています。
  • 画面表示のイメージの比較のため、JavaScriptのalertとconfirmも呼び出す実装を入れています。
  • sui-buttonは、semantic UIのボタンを表示するコンポーネントです。

ビルド&実機デバッグの実行

vueプロジェクトのビルド

これはvueプロジェクト直下で実行する。 ビルドをすることで、「src-cordova/www」にビルド結果が格納されます。

npm run build

実機デバッグの実行

ちょっと時間がかかりますが、USB接続しているAndroid端末にアプリがインストールされて、実行されます。

cd src-cordova
cordova run android --device

実行結果

  • 画面表示
    f:id:where-is-wally:20200509152303p:plain

  • JavaScriptのalert関数を実行
    f:id:where-is-wally:20200509152345p:plain

  • Cordovaプラグインのnavigator.notification.alertを実行
    f:id:where-is-wally:20200509152438p:plain

  • JavaScriptのconfirm関数を実行
    f:id:where-is-wally:20200509152545p:plain

  • Cordovaプラグインのnavigator.notification.confirmを実行
    f:id:where-is-wally:20200509152633p:plain

  • Cordovaプラグインのnavigator.showToastを実行

    • 画面の下にメッセージが表示されます f:id:where-is-wally:20200509152729p:plain
  • Cordovaプラグインのnavigator.camera.getPictureを実行

    • カメラが起動します。
      f:id:where-is-wally:20200509152827p:plain

まとめ・・・

navigator.notification.alertとnavigator.notification.confirmは、JavaScriptのalertとconfirmと見た目はあまり変わりませんね。。。
navigator.showToastを使うことで、アプリっぽい表示ができますね。