uniapp android端和ios端铃声静音,但是还是会震动
uniapp 使用了html5plus的api,可以实现调用原生的api功能,htm5plus官方api文档:
我主要是使用了native.js 中android端部分实现了铃声静音,但不会让媒体音量也静音。要求就是这样。
可以先在网络上搜索原生android是怎么让铃声静音的,然后在用native.js的语法改造。
如果要控制其他类型的音量,网络搜android 铃声设置,有很多代码。
最终达到了我的目的。下面放代码:
var pf = uni.getSystemInfoSync().platform; if (pf == "android") { let AudioManager = plus.android.importClass('android.media.AudioManager'); let main = plus.android.runtimeMainActivity(); let Context = plus.android.importClass('android.content.Context'); this.audioManager = main.getSystemService(Context.AUDIO_SERVICE); //let audioManager = if (this.audioManager == null) { return; } console.log(AudioManager.STREAM_RING); this.audioManager.setStreamVolume(AudioManager.STREAM_RING, 0, AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_SHOW_UI); }
给不知道的人一点线索。ios端的代码,只能把铃声变小,无法静音。如下:
console.log("ios"); let AVSystemController = plus.ios.importClass("AVSystemController") if (AVSystemController == null) { console.log("AVSystemController is null"); return; } var ac2 = AVSystemController.sharedAVSystemController(); if (ac2 == null) { console.log("ac2 is null"); return; } //ac2.setVolumeTo(0,"Ringtone"); var result = plus.ios.invoke(ac2, "setVolumeTo:forCategory:", 0.0, "Ringtone"); console.log("setVolumeTo", result);// 以上,打印true表示成功。
//下面是补救措施,未实验,因为到这iphone13就打印true,及执行成功了。 if (this.common.isNull(result)) { console.log("plus.device.setVolume(0.2);"); plus.device.setVolume(0.2); let MPMusicPlayerController = plus.ios.importClass("MPMusicPlayerController"); if (AVSystemController == null) { console.log("MPMusicPlayerController is null"); return; } var media = MPMusicPlayerController.applicationMusicPlayer(); if (media == null) { console.log("media is null"); return; } var result = plus.ios.invoke(media, "setVolume:", 0.7, ); console.log("result", result); } uni.showToast( { title: '已为您看起免打扰模式', duration: 1000, icon: 'none', mask: false })