(轉載請註明來源:cnblogs coder-fang)html
實踐介紹:使用VUE+cordova進行android app設計(webapp),實例中包括四個本地功能:獲取地理位置,手機振動,調取手機圖片,掃描二給碼。vue
系統要求安裝:npm,jdk,android-sdk.android
npm i cordova -g,npm i -g vue-cli
。
使用命令行進入開發目錄: 執行: cordova create vueapp
此命令會生成vueapp目錄,vueapp便是完整的cordova項目 進入vueapp目錄: 執行:cordova platform add android
執行 cordova build android,
會將項目默認的示例打包成apk,目錄在 vueapp\platforms\android\build\outputs\apk下,直接copy到手機進行安裝便可。
注:在進行build過程當中,會用到sdk相關平臺包,按要求進行安裝。
在vueapp目錄下執行安裝插件命令: cordova plugin add cordova-plugin-geolocation #支持手機位置獲取 cordova plugin add cordova-plugin-camera #支持手機相機與相冊調用 cordova plugin add cordova-plugin-vibration #支持調用手機振動 cordova plugin add phonegap-plugin-barcodescanner #支持手機掃描二維碼
在vueapp目錄下:
執行 vue init webpack src
此命令會生成src目錄,進入src目錄:
執行 npm i
項目總體目錄結構以下:webpack
修改src下的index.html,加入cordova.js git
修改src下config目錄下index.js,使其build生成到www目錄下,由於cordova生成app時是讀取www目錄的內容:web
將src下默認生成的HelloWord.Vue中的顯示內容刪除,直接修改App.vue,代碼以下:vue-cli
<template> <div id="app"> <img :src="imgsrc" width="64" height="64"><br/> <button @click="getposition(1)">獲取位置</button> <span>{{msg}}</span><br/> <button @click="getimage()">顯示本地圖片</button> <button @click="getcode()">獲取二維碼</button><br/> <span>{{codeinfo}}</span> <router-view/> </div> </template> <script> export default { name: 'App', data:function(){ return { imgsrc:'./static/logo.png', msg:'cordova not init', codeinfo:'' } }, methods:{ getcode() { var me = this; cordova.plugins.barcodeScanner.scan( function (result) { me.codeinfo="We got a barcode\n" + "Result: " + result.text + "\n" + "Format: " + result.format + "\n" + "Cancelled: " + result.cancelled; }, function (error) { alert("Scanning failed: " + error); } ); }, getimage() { var me= this; navigator.camera.getPicture(onSuccess, onFail, { quality: 50, destinationType: Camera.DestinationType.FILE_URI,sourceType:0 }); function onSuccess(imageURI) { me.imgsrc = imageURI; } function onFail(message) { alert('Failed because: ' + message); } }, getposition:function(val) { navigator.vibrate(500); var me = this; var onSuccess = function(position) { me.msg='Latitude:\t' + position.coords.latitude + '\n' + 'Longitude:\t' + position.coords.longitude + '\n' + 'Altitude:\t' + position.coords.altitude + '\n' + 'Accuracy:\t' + position.coords.accuracy + '\n' + 'Altitude Accuracy:\t' + position.coords.altitudeAccuracy + '\n' + 'Heading:\t' + position.coords.heading + '\n' + 'Speed:\t' + position.coords.speed + '\n' + 'Timestamp:\t' + position.timestamp + '\n'; }; // onError Callback receives a PositionError object // var error= function(error) { me.msg='code: ' + error.code + '\n' + 'message: ' + error.message + '\n'; } navigator.geolocation.getCurrentPosition(onSuccess, error,{maximumAge: 30000, timeout: 30000, enableHighAccuracy: val}); } }, mounted(){ document.addEventListener("deviceready", onDeviceReady, false); var me = this; function onDeviceReady() { me.msg="cordova is ready"; } } } </script> <style> #app { font-family: 'Avenir', Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; margin-top: 60px; } </style>