美文网首页
Vue集成Cordova的Navtive功能:获取地理位置,手机

Vue集成Cordova的Navtive功能:获取地理位置,手机

作者: 37度开水 | 来源:发表于2020-11-07 12:57 被阅读0次

    一、安装Cordova及Vue-cli

    首先确保本地需要有Android运行环境
    安装Cordova:
    npm i cordova -g
    
    安装Vue-cli:
    npm i -g vue-cli
    

    二、使用cordova初始化项目并安装android平台

    使用命令行进入开发目录后执行:
    cordova create vueapp
    

    此命令会生成vueapp目录,vueapp即是完整的cordova项目,新建目录时该路径不要存在中文命名

    进入vueapp目录后执行:
    cordova platform add android
    
    完成后执行
    cordova build android
    

    会将项目默认的示例打包成apk,目录在 vueapp\platforms\android\build\outputs\apk下,直接copy到手机进行安装即可。

    注:在进行build过程中,会用到sdk相关平台包,按要求进行安装。

    三、使用cordova初始化项目并安装android平台

    使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 #支持手机扫描二维码
    

    四、创建Vue项目

    在vueapp目录下执行:
    vue init webpack vuesrc
    
    此命令会生成vuesrc目录,进入vuesrc目录后执行:
    npm i
    

    完成后的整个项目结构如下


    Screen Shot 2020-11-07 at 12.42.38 PM.png

    vuesrc是我们的vue-cli整个项目的文件夹
    www是cordova创建时生成的cordova的web文件夹

    五、修改src下的index.html,加入cordova.js

    <script src="cordova.js"></script>
    
    Screen Shot 2020-11-07 at 12.44.10 PM.png

    六、修改src下config

    找到src里面config目录下index.js,使其build生成到www目录下
    Screen Shot 2020-11-07 at 12.43.39 PM.png

    这么做是因为cordova生成app时是读取www目录的内容。现在开始我们就可以正常的把src目录当成我们一般的vue项目进行开发了。

    七、App.vue中业务的编写

    <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>
    import logo from './assets/logo.png'
    export default {
      name: 'App',
      data:function(){
        return {
          imgsrc:logo,
          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>
    
    
    

    八、编译

    在src目录下执行
    npm run build 
    

    打包vue项目,所生成的相关文件会全部进入www目录下。

    进入vueapp目录执行
    cordova build android
    

    生成相关APK

    使用USB连接你的手机执行
    cordova run android
    
    运行结果
    Screenshot_20201107-124433.jpg

    相关文章

      网友评论

          本文标题:Vue集成Cordova的Navtive功能:获取地理位置,手机

          本文链接:https://www.haomeiwen.com/subject/rgbfbktx.html