ionic5+Angular8 状态栏通知+震动+自定义音频

ionic3 即时通讯(待机/后台运行可用)
github官方文档
ionic官方文档
blog实例

ionic3本地通知加震动和原生音频
简书Ionic3 消息推送

使用的是ionic5 + Angular8(package.json如下图)


image.png

1、安装本地通知插件 local-notification

① 安装

ionic cordova plugin add cordova-plugin-local-notification
npm install --save @ionic-native/local-notifications

② app.module.ts

import { LocalNotifications } from '@ionic-native/local-notifications/ngx';
providers: [
    LocalNotifications,
]

③我的例子:

import { LocalNotifications } from '@ionic-native/local-notifications/ngx';

export class MinePage implements OnInit {

  constructor(
    private localNotifications: LocalNotifications,
  ) { }

  notice() { // html点击触发的函数
    this.localNotifications.schedule({
      id: 1,
      title: '通知标题mine',
      text: '这是显示通知栏的内容',
      trigger: { at: new Date() },
      lockscreen: true
    });
  }
}

④总结遇到的问题
使用某个博主的案例尝试时,没注意到triggers属性:特定条件触发
该案例属于延迟提醒,在当前时间的9s后才会显示该消息,没耐心的等了2、3s,消息栏没显示,还以为用错了,折腾了好久

this.localNotifications.schedule({
   id: 1,
   title: '通知标题',
   text: '这是显示通知栏的内容',
   trigger: {at: new Date(new Date().getTime() + 9000)},
});

2、安装震动插件 vibration

① 安装

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

② app.module.ts

import { Vibration } from '@ionic-native/vibration/ngx';
providers: [
    Vibration,
]

③我的例子:

import { Vibration } from '@ionic-native/vibration/ngx';

export class MinePage implements OnInit {

  constructor(
    private vibration: Vibration,
  ) { }

  notice() { // html点击触发的函数
    this.vibration.vibrate(1000);
    this.localNotifications.schedule({
      id: 1,
      title: '通知标题mine',
      text: '这是显示通知栏的内容',
      trigger: { at: new Date() },
      lockscreen: true
    });
  }
}

3、安装音频插件 nativeaudio

① 安装

ionic cordova plugin add cordova-plugin-nativeaudio
npm install --save @ionic-native/native-audio

② app.module.ts

import { NativeAudio } from '@ionic-native/native-audio/ngx';
import { AudioService } from './../../@core/utils/audio.service';

providers: [
    NativeAudio,
    AudioService
]

③audio.service

import { Injectable } from '@angular/core';
import { Platform } from '@ionic/angular';
import { NativeAudio } from '@ionic-native/native-audio/ngx';

interface Sound {
    key: string;
    asset: string;
}

@Injectable({
    providedIn: 'root'
})
export class AudioService {
    private sounds: Sound[] = [];
    private audioPlayer: HTMLAudioElement = new Audio();
    private forceWebAudio = false;
    private isNative = false;

    constructor(private platform: Platform, private nativeAudio: NativeAudio) {
        platform.ready().then(() => {
            if (platform.is('cordova')) {
                this.isNative = true;
            }
        });
    }

    preload(key: string, asset: string): void {
        if (!this.sounds.filter((sound) => sound.key === key).length) {
            if (this.isNative && !this.forceWebAudio) {
                this.platform.ready()
                    .then(() => this.nativeAudio.preloadSimple(key, asset));
                this.sounds.push({
                    key: key,
                    asset: asset
                });
            } else {
                const audio = new Audio();
                audio.src = asset;
                this.sounds.push({
                    key: key,
                    asset: asset
                });
            }
        }
    }

    play(key: string): boolean {
        const soundToPlay: Sound = this.sounds.find((sound) => sound.key === key);
        if (soundToPlay) {
            if (this.isNative) {
                this.platform.ready()
                    .then(() => this.nativeAudio.play(soundToPlay.key)
                        .then((res) => console.log(res),
                            (err) => console.log('play error', JSON.stringify(soundToPlay), err))
                    );
            } else {
                this.audioPlayer.src = soundToPlay.asset;
                this.audioPlayer.play()
                    .catch(() => {}); // ignore web player errors
            }
            return true;
        } else {
            return false;
        }
    }

    getSounds() {
        return this.sounds;
    }
}

③我的例子:

import { Component, OnInit } from '@angular/core';
import { LocalNotifications } from '@ionic-native/local-notifications/ngx';
import { Vibration } from '@ionic-native/vibration/ngx';
import { NativeAudio } from '@ionic-native/native-audio/ngx';
import { AudioService } from './../../@core/utils/audio.service';

@Component({
  selector: 'app-mine',
  templateUrl: './mine.page.html',
  styleUrls: ['./mine.page.scss']
})
export class MinePage implements OnInit {
  constructor(
    private localNotifications: LocalNotifications,
    private vibration: Vibration,
    public audio: AudioService
  ) {  }

  ionViewDidEnter() {
    this.audio.preload('kakao', 'assets/sounds/kakao.m4a');  // 路径直接写assets下的文件即可
  }

  test() {
    this.vibration.vibrate(1000);
    this.audio.play('kakao');
    this.localNotifications.schedule({
      id: 3,
      title: '通知标题mine',
      text: '这是显示通知栏的内容',
      trigger: { at: new Date() },
      lockscreen: true
    });
  }
}

参考案例github上的ionic5音频

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,898评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,401评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,058评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,539评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,382评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,319评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,706评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,370评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,664评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,715评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,476评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,326评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,730评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,003评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,275评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,683评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,877评论 2 335