ionic常用api

设置沉浸式:

对于android来说 需要设置paddingtop,因为沉浸之后header的高度有一部分填充了手机导航栏,可以在global.scss中设置公共的header的样式

//app.component.ts
import { StatusBar } from '@ionic-native/status-bar/ngx';
//在方法中使用
this.statusBar.overlaysWebView(true);
退出app:
  exitApp(){
    this.platform.backButton.subscribe(()=>{
      // alert(JSON.stringify(this.router.url))
      if(this.router.url== '/'){  //判断是那个页退出
        navigator['app'].exitApp()
      }
    })
    //如果需要扩展 可以设置双击退出 这个自行扩展
  }
获取当前位置
//安装插件
ionic cordova plugin add cordova-plugin-geolocation
npm install @ionic-native/geolocation
//引用
import { Geolocation } from '@ionic-native/geolocation/ngx';
//使用
this.geolocation.getCurrentPosition().then((resp)=>{
    console.log(resp)
    let longitude = (resp.coords.longitude).toFixed(4);
    let latitude = (resp.coords.latitude).toFixed(4);
  }).catch(err=>{
    console.log(err) 
})
下拉刷新
//http://www.ionic.wang/components_doc-index-id-297.html 官网位置
//home.page.html
  <ion-refresher slot="fixed" (ionRefresh)="doRefresh($event)">
    <ion-refresher-content></ion-refresher-content>
  </ion-refresher>
//home.page.ts
doRefresh(e){
  //可以将e赋值给一个全局变量 这样可以在请求的方法回调里加上结束刷新
  e.target.complete() //加上这句话证明刷新停止
}
上拉加载
//infinite.page.html
<ion-infinite-scroll (ionInfinite)="doInfinite($event)">
    <ion-infinite-scroll-content loadingText="正在加载数据...">
    </ion-infinite-scroll-content>
</ion-infinite-scroll>
//inifnite.page.ts
//跟上拉加载一样 需要一个结束的命令
diInfinnte(e){
  e.target.complete()
}
图片压缩
  compress(img, width, height, ratio) {
    var canvas, ctx, img64;
    canvas = document.createElement('canvas');
    canvas.width = width;
    canvas.height = height;
    ctx = canvas.getContext("2d");
    ctx.drawImage(img, 0, 0, width, height);
    img64 = canvas.toDataURL("image/jpeg", ratio);
    return img64;
  }
选择图片
  pickImg(){
    const options: CameraOptions = {
      quality: 100,
      destinationType: this.camera.DestinationType.DATA_URL,
      encodingType: this.camera.EncodingType.JPEG,
      mediaType: this.camera.MediaType.PICTURE,
      sourceType: this.camera.PictureSourceType.CAMERA
    }
    this.camera.getPicture(options).then((imageData) => {
      var image = new Image();
      image.src = 'data:image/jpeg;base64,' + imageData;
      let this_ = this;
      image.onload = function(){
        var img64 = this_.compress(image, 800, 800, 0.7);
        let photoBase64 = img64.replace('data:image/jpeg;base64,', '');
        this_.uploadImg(photoBase64)
      }
    }, (err) => {
      // Handle error
    });
  }
app打开文件或者链接
//安装依赖
ionic cordova plugin add cordova-plugin-inappbrowser
npm install @ionic-native/in-app-browser

//使用
this.iab.create(url,"_system",{}) 
 //_system指的是打开手机系统的应用  _blank指打开app内部浏览器多用于打开一个网址
使用导航 打开手机自带地图
  • 判断手机是否安装
  • 打开手机自身应用
    let appAmap = "";
    let appBmap = "";
    if (this.platform.is("ios")) {
      appAmap = "iosamap://";
      appBmap = "baidumap://";
    } else if (this.platform.is("android")) {
      appAmap = "com.autonavi.minimap";
      appBmap = "com.baidu.BaiduMap";
    }

    this.appAvailability.check(appAmap).then(
      (yes: boolean) => {
        this.hasAmap = true;
      },
      (no: boolean) => {
        this.hasAmap = false;
      }
    );

    this.appAvailability.check(appBmap).then(
      (yes: boolean) => {
        this.hasBmap = true;
      },
      (no: boolean) => {
        this.hasBmap = false;
      }
    );

//打开高德地图
  openByAmap() {
    if (this.platform.is("ios")) {
      let urlAmap =
        "iosamap://viewMap?sourceApplication=applicationName&poiname=" +
        this.destinationName +
        "&lat=" +
        this.latGCJ2 +
        "&lon=" +
        this.lonGCJ2 +
        "&dev=1";
      this.iab.create(urlAmap, "_system", {});
    } else if (this.platform.is("android")) {
      let urlAmap =
        "androidamap://viewMap?sourceApplication=appname&poiname=" +
        this.destinationName +
        "&lat=" +
        this.latGCJ2 +
        "&lon=" +
        this.lonGCJ2 +
        "&dev=0";
      this.iab.create(urlAmap, "_system", {});
    }
  }

//打开百度地图
  openByBmap() {
    if (this.platform.is("ios")) {
      let urlBmap =
        '"baidumap://map/marker?location=' +
        this.latBD9 +
        "," +
        this.lonBD9 +
        "&title=" +
        this.destinationName +
        "&src=ios.baidu.openAPIdemo";
      this.iab.create(urlBmap, "_system", {});
    } else if (this.platform.is("android")) {
      let urlBmap =
        "baidumap://map/marker?location=" +
        this.latBD9 +
        "," +
        this.lonBD9 +
        "&title=" +
        this.destinationName +
        "&traffic=on&src=andr.baidu.openAPIdemo";
      this.iab.create(urlBmap, "_system", {});
    }
  }
手机预览pdf
//安装依赖
import { FileTransfer, FileTransferObject } from "@ionic-native/file-transfer/ngx";
import { File } from '@ionic-native/file/ngx';
import { FileOpener } from '@ionic-native/file-opener/ngx';

//使用
async lookView(url) {
  // this.iab.create(url,'_system',{})
  const fileTransfer: FileTransferObject = this.transfer.create();
  fileTransfer.download(url, this.file.dataDirectory + 'file.pdf').then((entry) => {
    this.fileOpener.open(this.file.dataDirectory + 'file.pdf', 'application/pdf')
      .then(() => console.log('File is opened'))
      .catch(e => console.log('Error opening file'));
  }, (error) => {
    // handle error
    console.log(JSON.stringify(error))
  });
}
生成秘钥 打包
//使用到了java-sdk的keytool jarsinger两个命令 
keytool -genkey -alias huanggang.keystore -keyalg RSA -validity 20000 -keystore huanggang.keystore

jarsigner -verbose -keystore huanggang.keystore -signedjar huanggang.apk platforms/android/app/build/outputs/apk/release/app-release-unsigned.apk huanggang.keystore
readme.md

# 沈阳生成 keystore

keytool -genkey -alias huanggang.keystore -keyalg RSA -validity 20000 -keystore huanggang.keystore

# 打包沈阳安卓命令(秘钥)

jarsigner -verbose -keystore huanggang.keystore -signedjar huanggang.apk platforms/android/app/build/outputs/apk/release/app-release-unsigned.apk huanggang.keystore

#安卓视频 build.gradle
ndk{
abiFilters "armeabi", "armeabi-v7a","x86","mips"
}

#ios info.plist
LSApplicationQueriesSchemes:[baidumap,iosamap]
NSPhotoLibraryUsageDescription: view previously-taken environment-protecting photos for uploading
NSPhotoLibraryAddUsageDescription: writing album
NSCameraUsageDescription: take photos of actions taken to protect environment
NSLocationWhenInUseUsageDescription: access bits during use

#引入第三方组件
ionic cordova plugin add cordova-plugin-appavailability
npm install --save @ionic-native/app-availability

ionic cordova plugin add cordova-plugin-inappbrowser
npm install --save @ionic-native/in-app-browser

ionic cordova plugin add cordova-plugin-camera
npm install --save @ionic-native/camera

ionic cordova plugin add cordova-plugin-file
npm install --save @ionic-native/file

ionic cordova plugin add cordova-plugin-filepath
npm install --save @ionic-native/file-path

ionic cordova plugin add cordova-plugin-file-transfer
npm install --save @ionic-native/file-transfer

ionic cordova plugin add com-sarriaroman-photoviewer
npm install --save @ionic-native/photo-viewer

ionic cordova plugin add cordova-plugin-splashscreen
npm install --save @ionic-native/splash-screen

ionic cordova plugin add cordova-plugin-statusbar
npm install --save @ionic-native/status-barx

ionic cordova plugin add cordova-plugin-geolocation
npm install --save @ionic-native/geolocation

ionic cordova plugin add com-sarriaroman-photoviewer
npm install --save @ionic-native/photo-viewer

cordova-hot-code-push-plugin

cordova plugin add cordova-disable-http-cache
npm i cordova-disable-http-cache

ionic cordova plugin add cordova-plugin-telerik-imagepicker --variable PHOTO_LIBRARY_USAGE_DESCRIPTION="your usage message"
npm install --save @ionic-native/image-picker@4

#热更新步骤
[1] cordova plugin add cordova-hot-code-push-plugin
npm install -g cordova-hot-code-push-cli
[2] config.xml 
<chcp>
<config-file url="http://prd9.hbjk.com.cn:90/chcp.json" />
<native-interface version="1" />
</chcp>
[3] cordova-hcp build
现在 在项目文件下的 www 文件里面我们可以看到两个新增的文件,chcp.json 和 chcp.manifest。
{
"autogenerated": true,
"release": "2017.07.08-16.56.31",
"content_url": "http://prd9.hbjk.com.cn:90",
"update": "start"
}
[4] 添加安卓平台
cordova platform add android
[5] 备份 chcp.json
根目录下新建 cordova-hcp.json, 配置内容:
{
"autogenerated": true,
"release": "2017.07.08-16.56.31",
"name": "hea",(option)
"min_native_interface": 1(option)
"content_url": "http://192.168.1.203:8121", (+require)
"update": "now" (+require)
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,682评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,277评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,083评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,763评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,785评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,624评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,358评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,261评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,722评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,900评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,030评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,737评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,360评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,941评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,057评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,237评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,976评论 2 355