H5
This commit is contained in:
232
js_sdk/QuShe-baiduYY/QS-baiduyy/QS-baiduyy.js
Normal file
232
js_sdk/QuShe-baiduYY/QS-baiduyy/QS-baiduyy.js
Normal file
@@ -0,0 +1,232 @@
|
||||
const audioTeam = [];
|
||||
let audioStartSwitch = false;
|
||||
const getAudioUrl = 'https://tsn.baidu.com/text2audio';
|
||||
// #ifdef H5
|
||||
const apiUrl = '/baidu';
|
||||
// #endif
|
||||
// #ifdef APP
|
||||
const apiUrl = "https://aip.baidubce.com/oauth/2.0/token"; // 非真实,需要替换为自己的
|
||||
// #endif
|
||||
const BaiduApi = {
|
||||
apiKey: "aHTUGGITOdNwBYjAIjyqWCPv", // 非真实key,需要替换为自己的
|
||||
secKey: "AsXCAZMyG0r6GLRUa0Gof2GGTCDSBxVt" // 非真实secKey,需要替换为自己的
|
||||
}
|
||||
/**
|
||||
* 浏览器调用语音合成接口
|
||||
* 请参考 https://ai.baidu.com/docs#/TTS-API/41ac79a6
|
||||
* 强烈建议后端访问接口获取token返回给前端
|
||||
* client_id = API Key & client_secret = secret Key
|
||||
*/
|
||||
|
||||
function getBDVoicToken() {
|
||||
return new Promise((rs, rj) => {
|
||||
uni.request({ // 强烈建议此接口由后端访问并且维护token有效期,否则前端每次访问都会刷新token
|
||||
//此url为专门插件测试预览用的key和secret key, 请替换为自己申请的key
|
||||
url: apiUrl,
|
||||
method: 'POST', //建议使用post访问
|
||||
data: 'grant_type=client_credentials&client_id=aHTUGGITOdNwBYjAIjyqWCPv&client_secret=AsXCAZMyG0r6GLRUa0Gof2GGTCDSBxVt',
|
||||
// data: {
|
||||
// grant_type: client_credentials,
|
||||
// client_id: BaiduApi.apiKey,
|
||||
// client_secret: BaiduApi.secKey
|
||||
// },
|
||||
header: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
},
|
||||
success: (res) => {
|
||||
console.log('访问成功');
|
||||
rs(res);
|
||||
},
|
||||
fail: (err) => {
|
||||
console.log('访问失败');
|
||||
rj(err);
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
export default function openVoice(objs) { // 传入需转为语音的文本内容
|
||||
console.log(objs)
|
||||
let lineUp = false;
|
||||
let returnAudio = false;
|
||||
if (typeof(objs) !== 'string') {
|
||||
if (objs && objs.lineUp === true) {
|
||||
lineUp = true;
|
||||
}
|
||||
if (objs && objs.returnAudio === true) {
|
||||
returnAudio = true;
|
||||
}
|
||||
}
|
||||
if (returnAudio) {
|
||||
console.log(returnAudio,objs)
|
||||
return new Promise((resolve, reject) => {
|
||||
openVoiceFc(objs, returnAudio).then(res => {
|
||||
resolve(res);
|
||||
}).catch(err => {
|
||||
reject(err)
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
if (lineUp = true) {
|
||||
audioTeam.push(objs);
|
||||
}
|
||||
console.log(audioTeam);
|
||||
if (!audioStartSwitch) {
|
||||
audioStartSwitch = true;
|
||||
openVoiceFc(objs);
|
||||
}
|
||||
}
|
||||
|
||||
function openVoiceFc(objs, returnAudio) {
|
||||
console.log('准备获取语音tok', objs, returnAudio);
|
||||
if (returnAudio) {
|
||||
return new Promise((resolve, reject) => {
|
||||
getBDVoicToken().then(res => {
|
||||
console.log('获取语音tok接口成功', res);
|
||||
if (res.data && res.data.access_token) {
|
||||
console.log('token: ' + res.data.access_token);
|
||||
resolve(tts(objs, res.data.access_token, returnAudio));
|
||||
} else {
|
||||
console.log('获取语音tok接口为空');
|
||||
reject('获取语音tok接口为空');
|
||||
}
|
||||
}).catch(err => {
|
||||
console.log('获取语音tok接口失败');
|
||||
reject(err || '获取语音tok接口失败');
|
||||
})
|
||||
})
|
||||
} else {
|
||||
getBDVoicToken().then(res => {
|
||||
console.log('获取语音tok接口成功', res);
|
||||
if (res.data && res.data.access_token) {
|
||||
console.log('token: ' + res.data.access_token);
|
||||
tts(objs, res.data.access_token);
|
||||
} else {
|
||||
console.log('获取语音tok接口为空');
|
||||
}
|
||||
}).catch(err => {
|
||||
console.log('获取语音tok接口失败');
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
function tts(objs, tok, returnAudio) {
|
||||
if (typeof(objs) == 'string')
|
||||
objs = {
|
||||
voiceSet: {
|
||||
tex: objs
|
||||
}
|
||||
};
|
||||
const data = {
|
||||
tok,
|
||||
cuid: tok,
|
||||
ctp: 1,
|
||||
lan: 'zh',
|
||||
...objs.voiceSet
|
||||
}
|
||||
if (returnAudio)
|
||||
return btts(data, objs.audioSet, objs.audioCallback, objs.lineUp, returnAudio);
|
||||
btts(data, objs.audioSet, objs.audioCallback, objs.lineUp, returnAudio);
|
||||
}
|
||||
|
||||
function setAudioSet(options, audio) {
|
||||
if (options) {
|
||||
audio.volume = options.volume || 1;
|
||||
audio.startTime = options.startTime || 0;
|
||||
audio.loop = options.loop || false;
|
||||
// #ifdef MP-WEIXIN || MP-BAIDU || MP-TOUTIAO
|
||||
audio.obeyMuteSwitch = options.obeyMuteSwitch && typeof(options.obeyMuteSwitch) == 'boolean' ? options
|
||||
.obeyMuteSwitch :
|
||||
true; //支持微信小程序、百度小程序、头条小程序
|
||||
// #endif
|
||||
}
|
||||
}
|
||||
|
||||
function btts(param, options, audioCallback, lineUp, returnAudio) {
|
||||
let audio = uni.createInnerAudioContext();
|
||||
setAudioSet(options, audio);
|
||||
console.log(param, options, audioCallback, lineUp, returnAudio)
|
||||
// 序列化参数列表
|
||||
let fd = [];
|
||||
for (let k in param) {
|
||||
fd.push(k + '=' + encodeURIComponent(encodeURIComponent(param[k])));
|
||||
}
|
||||
audio.src = `${getAudioUrl}?${fd.join('&')}`;
|
||||
console.log(audio, returnAudio, 11111,`${getAudioUrl}?${fd.join('&')}`)
|
||||
if (returnAudio) {
|
||||
audio.onEnded(() => {
|
||||
console.log('音频播放结束');
|
||||
console.log('销毁音频实例');
|
||||
audio.destroy(); //销毁音频实例
|
||||
audio = null;
|
||||
})
|
||||
audio.onError((e) => {
|
||||
if (audioCallback && audioCallback.onError && typeof(audioCallback.onError) == 'function')
|
||||
audioCallback.onError(e);
|
||||
console.log('音频播放错误: ' + JSON.stringify(e));
|
||||
console.log('销毁音频实例');
|
||||
audio.destroy(); //销毁音频实例
|
||||
audio = null;
|
||||
})
|
||||
return audio;
|
||||
}
|
||||
audio.onPlay(() => {
|
||||
console.log('音频播放开始');
|
||||
if (audioCallback && audioCallback.onPlay && typeof(audioCallback.onPlay) == 'function') audioCallback
|
||||
.onPlay();
|
||||
})
|
||||
audio.onPause(() => {
|
||||
if (audioCallback && audioCallback.onPause && typeof(audioCallback.onPause) == 'function') audioCallback
|
||||
.onPause();
|
||||
})
|
||||
audio.onWaiting(() => {
|
||||
if (audioCallback && audioCallback.onWaiting && typeof(audioCallback.onWaiting) == 'function')
|
||||
audioCallback.onWaiting();
|
||||
})
|
||||
audio.onStop(() => {
|
||||
if (audioCallback && audioCallback.onStop && typeof(audioCallback.onStop) == 'function') audioCallback
|
||||
.onStop();
|
||||
})
|
||||
audio.onTimeUpdate(() => {
|
||||
if (audioCallback && audioCallback.onTimeUpdate && typeof(audioCallback.onTimeUpdate) == 'function')
|
||||
audioCallback.onTimeUpdate();
|
||||
})
|
||||
audio.onSeeking(() => {
|
||||
if (audioCallback && audioCallback.onSeeking && typeof(audioCallback.onSeeking) == 'function')
|
||||
audioCallback.onSeeking();
|
||||
})
|
||||
audio.onSeeked(() => {
|
||||
if (audioCallback && audioCallback.onSeeked && typeof(audioCallback.onSeeked) == 'function')
|
||||
audioCallback.onSeeked();
|
||||
})
|
||||
audio.onEnded(() => {
|
||||
console.log('音频播放结束');
|
||||
console.log('销毁音频实例');
|
||||
audio.destroy(); //销毁音频实例
|
||||
audio = null;
|
||||
if (audioCallback && audioCallback.onEnded && typeof(audioCallback.onEnded) == 'function') audioCallback
|
||||
.onEnded();
|
||||
|
||||
if (lineUp !== false) { // 删除已经播放对象
|
||||
audioTeam.splice(0, 1);
|
||||
if (audioTeam.length > 0) {
|
||||
console.log('队列中');
|
||||
openVoiceFc(audioTeam[0]);
|
||||
} else {
|
||||
console.log('队列为零');
|
||||
audioStartSwitch = false;
|
||||
}
|
||||
}
|
||||
})
|
||||
audio.onError((e) => {
|
||||
if (audioCallback && audioCallback.onError && typeof(audioCallback.onError) == 'function') audioCallback
|
||||
.onError(e);
|
||||
console.log('音频播放错误: ' + JSON.stringify(e));
|
||||
console.log('销毁音频实例');
|
||||
audio.destroy(); //销毁音频实例
|
||||
audio = null;
|
||||
})
|
||||
audio.play();
|
||||
}
|
||||
10
js_sdk/QuShe-baiduYY/package.json
Normal file
10
js_sdk/QuShe-baiduYY/package.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "QuShe-baiduYY",
|
||||
"name": "百度语音合成接口",
|
||||
"version": "4.1",
|
||||
"description": "非常轻便的语音合成接口,可以用于语音播报",
|
||||
"keywords": [
|
||||
"语音合成",
|
||||
"语音播报"
|
||||
]
|
||||
}
|
||||
196
js_sdk/mmmm-image-tools/index.js
Normal file
196
js_sdk/mmmm-image-tools/index.js
Normal file
@@ -0,0 +1,196 @@
|
||||
function getLocalFilePath(path) {
|
||||
if (path.indexOf('_www') === 0 || path.indexOf('_doc') === 0 || path.indexOf('_documents') === 0 || path.indexOf('_downloads') === 0) {
|
||||
return path
|
||||
}
|
||||
if (path.indexOf('file://') === 0) {
|
||||
return path
|
||||
}
|
||||
if (path.indexOf('/storage/emulated/0/') === 0) {
|
||||
return path
|
||||
}
|
||||
if (path.indexOf('/') === 0) {
|
||||
var localFilePath = plus.io.convertAbsoluteFileSystem(path)
|
||||
if (localFilePath !== path) {
|
||||
return localFilePath
|
||||
} else {
|
||||
path = path.substr(1)
|
||||
}
|
||||
}
|
||||
return '_www/' + path
|
||||
}
|
||||
|
||||
function dataUrlToBase64(str) {
|
||||
var array = str.split(',')
|
||||
return array[array.length - 1]
|
||||
}
|
||||
|
||||
var index = 0
|
||||
function getNewFileId() {
|
||||
return Date.now() + String(index++)
|
||||
}
|
||||
|
||||
function biggerThan(v1, v2) {
|
||||
var v1Array = v1.split('.')
|
||||
var v2Array = v2.split('.')
|
||||
var update = false
|
||||
for (var index = 0; index < v2Array.length; index++) {
|
||||
var diff = v1Array[index] - v2Array[index]
|
||||
if (diff !== 0) {
|
||||
update = diff > 0
|
||||
break
|
||||
}
|
||||
}
|
||||
return update
|
||||
}
|
||||
|
||||
export function pathToBase64(path) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
if (typeof window === 'object' && 'document' in window) {
|
||||
if (typeof FileReader === 'function') {
|
||||
var xhr = new XMLHttpRequest()
|
||||
xhr.open('GET', path, true)
|
||||
xhr.responseType = 'blob'
|
||||
xhr.onload = function() {
|
||||
if (this.status === 200) {
|
||||
let fileReader = new FileReader()
|
||||
fileReader.onload = function(e) {
|
||||
resolve(e.target.result)
|
||||
}
|
||||
fileReader.onerror = reject
|
||||
fileReader.readAsDataURL(this.response)
|
||||
}
|
||||
}
|
||||
xhr.onerror = reject
|
||||
xhr.send()
|
||||
return
|
||||
}
|
||||
var canvas = document.createElement('canvas')
|
||||
var c2x = canvas.getContext('2d')
|
||||
var img = new Image
|
||||
img.onload = function() {
|
||||
canvas.width = img.width
|
||||
canvas.height = img.height
|
||||
c2x.drawImage(img, 0, 0)
|
||||
resolve(canvas.toDataURL())
|
||||
canvas.height = canvas.width = 0
|
||||
}
|
||||
img.onerror = reject
|
||||
img.src = path
|
||||
return
|
||||
}
|
||||
if (typeof plus === 'object') {
|
||||
plus.io.resolveLocalFileSystemURL(getLocalFilePath(path), function(entry) {
|
||||
entry.file(function(file) {
|
||||
var fileReader = new plus.io.FileReader()
|
||||
fileReader.onload = function(data) {
|
||||
resolve(data.target.result)
|
||||
}
|
||||
fileReader.onerror = function(error) {
|
||||
reject(error)
|
||||
}
|
||||
fileReader.readAsDataURL(file)
|
||||
}, function(error) {
|
||||
reject(error)
|
||||
})
|
||||
}, function(error) {
|
||||
reject(error)
|
||||
})
|
||||
return
|
||||
}
|
||||
if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) {
|
||||
wx.getFileSystemManager().readFile({
|
||||
filePath: path,
|
||||
encoding: 'base64',
|
||||
success: function(res) {
|
||||
resolve('data:image/png;base64,' + res.data)
|
||||
},
|
||||
fail: function(error) {
|
||||
reject(error)
|
||||
}
|
||||
})
|
||||
return
|
||||
}
|
||||
reject(new Error('not support'))
|
||||
})
|
||||
}
|
||||
|
||||
export function base64ToPath(base64) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
if (typeof window === 'object' && 'document' in window) {
|
||||
base64 = base64.split(',')
|
||||
var type = base64[0].match(/:(.*?);/)[1]
|
||||
var str = atob(base64[1])
|
||||
var n = str.length
|
||||
var array = new Uint8Array(n)
|
||||
while (n--) {
|
||||
array[n] = str.charCodeAt(n)
|
||||
}
|
||||
return resolve((window.URL || window.webkitURL).createObjectURL(new Blob([array], { type: type })))
|
||||
}
|
||||
var extName = base64.split(',')[0].match(/data\:\S+\/(\S+);/)
|
||||
if (extName) {
|
||||
extName = extName[1]
|
||||
} else {
|
||||
reject(new Error('base64 error'))
|
||||
}
|
||||
var fileName = getNewFileId() + '.' + extName
|
||||
if (typeof plus === 'object') {
|
||||
var basePath = '_doc'
|
||||
var dirPath = 'uniapp_temp'
|
||||
var filePath = basePath + '/' + dirPath + '/' + fileName
|
||||
if (!biggerThan(plus.os.name === 'Android' ? '1.9.9.80627' : '1.9.9.80472', plus.runtime.innerVersion)) {
|
||||
plus.io.resolveLocalFileSystemURL(basePath, function(entry) {
|
||||
entry.getDirectory(dirPath, {
|
||||
create: true,
|
||||
exclusive: false,
|
||||
}, function(entry) {
|
||||
entry.getFile(fileName, {
|
||||
create: true,
|
||||
exclusive: false,
|
||||
}, function(entry) {
|
||||
entry.createWriter(function(writer) {
|
||||
writer.onwrite = function() {
|
||||
resolve(filePath)
|
||||
}
|
||||
writer.onerror = reject
|
||||
writer.seek(0)
|
||||
writer.writeAsBinary(dataUrlToBase64(base64))
|
||||
}, reject)
|
||||
}, reject)
|
||||
}, reject)
|
||||
}, reject)
|
||||
return
|
||||
}
|
||||
var bitmap = new plus.nativeObj.Bitmap(fileName)
|
||||
bitmap.loadBase64Data(base64, function() {
|
||||
bitmap.save(filePath, {}, function() {
|
||||
bitmap.clear()
|
||||
resolve(filePath)
|
||||
}, function(error) {
|
||||
bitmap.clear()
|
||||
reject(error)
|
||||
})
|
||||
}, function(error) {
|
||||
bitmap.clear()
|
||||
reject(error)
|
||||
})
|
||||
return
|
||||
}
|
||||
if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) {
|
||||
var filePath = wx.env.USER_DATA_PATH + '/' + fileName
|
||||
wx.getFileSystemManager().writeFile({
|
||||
filePath: filePath,
|
||||
data: dataUrlToBase64(base64),
|
||||
encoding: 'base64',
|
||||
success: function() {
|
||||
resolve(filePath)
|
||||
},
|
||||
fail: function(error) {
|
||||
reject(error)
|
||||
}
|
||||
})
|
||||
return
|
||||
}
|
||||
reject(new Error('not support'))
|
||||
})
|
||||
}
|
||||
11
js_sdk/mmmm-image-tools/package.json
Normal file
11
js_sdk/mmmm-image-tools/package.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"id": "mmmm-image-tools",
|
||||
"name": "image-tools",
|
||||
"version": "1.4.0",
|
||||
"description": "图像转换工具,可用于图像和base64的转换",
|
||||
"keywords": [
|
||||
"base64",
|
||||
"保存",
|
||||
"图像"
|
||||
]
|
||||
}
|
||||
272
js_sdk/wa-permission/permission.js
Normal file
272
js_sdk/wa-permission/permission.js
Normal file
@@ -0,0 +1,272 @@
|
||||
/**
|
||||
* 本模块封装了Android、iOS的应用权限判断、打开应用权限设置界面、以及位置系统服务是否开启
|
||||
*/
|
||||
|
||||
var isIos
|
||||
// #ifdef APP-PLUS
|
||||
isIos = (plus.os.name == "iOS")
|
||||
// #endif
|
||||
|
||||
// 判断推送权限是否开启
|
||||
function judgeIosPermissionPush() {
|
||||
var result = false;
|
||||
var UIApplication = plus.ios.import("UIApplication");
|
||||
var app = UIApplication.sharedApplication();
|
||||
var enabledTypes = 0;
|
||||
if (app.currentUserNotificationSettings) {
|
||||
var settings = app.currentUserNotificationSettings();
|
||||
enabledTypes = settings.plusGetAttribute("types");
|
||||
console.log("enabledTypes1:" + enabledTypes);
|
||||
if (enabledTypes == 0) {
|
||||
console.log("推送权限没有开启");
|
||||
} else {
|
||||
result = true;
|
||||
console.log("已经开启推送功能!")
|
||||
}
|
||||
plus.ios.deleteObject(settings);
|
||||
} else {
|
||||
enabledTypes = app.enabledRemoteNotificationTypes();
|
||||
if (enabledTypes == 0) {
|
||||
console.log("推送权限没有开启!");
|
||||
} else {
|
||||
result = true;
|
||||
console.log("已经开启推送功能!")
|
||||
}
|
||||
console.log("enabledTypes2:" + enabledTypes);
|
||||
}
|
||||
plus.ios.deleteObject(app);
|
||||
plus.ios.deleteObject(UIApplication);
|
||||
return result;
|
||||
}
|
||||
|
||||
// 判断定位权限是否开启
|
||||
function judgeIosPermissionLocation() {
|
||||
var result = false;
|
||||
var cllocationManger = plus.ios.import("CLLocationManager");
|
||||
var status = cllocationManger.authorizationStatus();
|
||||
result = (status != 2)
|
||||
console.log("定位权限开启:" + result);
|
||||
// 以下代码判断了手机设备的定位是否关闭,推荐另行使用方法 checkSystemEnableLocation
|
||||
/* var enable = cllocationManger.locationServicesEnabled();
|
||||
var status = cllocationManger.authorizationStatus();
|
||||
console.log("enable:" + enable);
|
||||
console.log("status:" + status);
|
||||
if (enable && status != 2) {
|
||||
result = true;
|
||||
console.log("手机定位服务已开启且已授予定位权限");
|
||||
} else {
|
||||
console.log("手机系统的定位没有打开或未给予定位权限");
|
||||
} */
|
||||
plus.ios.deleteObject(cllocationManger);
|
||||
return result;
|
||||
}
|
||||
|
||||
// 判断麦克风权限是否开启
|
||||
function judgeIosPermissionRecord() {
|
||||
var result = false;
|
||||
var avaudiosession = plus.ios.import("AVAudioSession");
|
||||
var avaudio = avaudiosession.sharedInstance();
|
||||
var permissionStatus = avaudio.recordPermission();
|
||||
console.log("permissionStatus:" + permissionStatus);
|
||||
if (permissionStatus == 1684369017 || permissionStatus == 1970168948) {
|
||||
console.log("麦克风权限没有开启");
|
||||
} else {
|
||||
result = true;
|
||||
console.log("麦克风权限已经开启");
|
||||
}
|
||||
plus.ios.deleteObject(avaudiosession);
|
||||
return result;
|
||||
}
|
||||
|
||||
// 判断相机权限是否开启
|
||||
function judgeIosPermissionCamera() {
|
||||
var result = false;
|
||||
var AVCaptureDevice = plus.ios.import("AVCaptureDevice");
|
||||
var authStatus = AVCaptureDevice.authorizationStatusForMediaType('vide');
|
||||
console.log("authStatus:" + authStatus);
|
||||
if (authStatus == 3) {
|
||||
result = true;
|
||||
console.log("相机权限已经开启");
|
||||
} else {
|
||||
console.log("相机权限没有开启");
|
||||
}
|
||||
plus.ios.deleteObject(AVCaptureDevice);
|
||||
return result;
|
||||
}
|
||||
|
||||
// 判断相册权限是否开启
|
||||
function judgeIosPermissionPhotoLibrary() {
|
||||
var result = false;
|
||||
var PHPhotoLibrary = plus.ios.import("PHPhotoLibrary");
|
||||
var authStatus = PHPhotoLibrary.authorizationStatus();
|
||||
console.log("authStatus:" + authStatus);
|
||||
if (authStatus == 3) {
|
||||
result = true;
|
||||
console.log("相册权限已经开启");
|
||||
} else {
|
||||
console.log("相册权限没有开启");
|
||||
}
|
||||
plus.ios.deleteObject(PHPhotoLibrary);
|
||||
return result;
|
||||
}
|
||||
|
||||
// 判断通讯录权限是否开启
|
||||
function judgeIosPermissionContact() {
|
||||
var result = false;
|
||||
var CNContactStore = plus.ios.import("CNContactStore");
|
||||
var cnAuthStatus = CNContactStore.authorizationStatusForEntityType(0);
|
||||
if (cnAuthStatus == 3) {
|
||||
result = true;
|
||||
console.log("通讯录权限已经开启");
|
||||
} else {
|
||||
console.log("通讯录权限没有开启");
|
||||
}
|
||||
plus.ios.deleteObject(CNContactStore);
|
||||
return result;
|
||||
}
|
||||
|
||||
// 判断日历权限是否开启
|
||||
function judgeIosPermissionCalendar() {
|
||||
var result = false;
|
||||
var EKEventStore = plus.ios.import("EKEventStore");
|
||||
var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(0);
|
||||
if (ekAuthStatus == 3) {
|
||||
result = true;
|
||||
console.log("日历权限已经开启");
|
||||
} else {
|
||||
console.log("日历权限没有开启");
|
||||
}
|
||||
plus.ios.deleteObject(EKEventStore);
|
||||
return result;
|
||||
}
|
||||
|
||||
// 判断备忘录权限是否开启
|
||||
function judgeIosPermissionMemo() {
|
||||
var result = false;
|
||||
var EKEventStore = plus.ios.import("EKEventStore");
|
||||
var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(1);
|
||||
if (ekAuthStatus == 3) {
|
||||
result = true;
|
||||
console.log("备忘录权限已经开启");
|
||||
} else {
|
||||
console.log("备忘录权限没有开启");
|
||||
}
|
||||
plus.ios.deleteObject(EKEventStore);
|
||||
return result;
|
||||
}
|
||||
|
||||
// Android权限查询
|
||||
function requestAndroidPermission(permissionID) {
|
||||
return new Promise((resolve, reject) => {
|
||||
plus.android.requestPermissions(
|
||||
[permissionID], // 理论上支持多个权限同时查询,但实际上本函数封装只处理了一个权限的情况。有需要的可自行扩展封装
|
||||
function(resultObj) {
|
||||
var result = 0;
|
||||
for (var i = 0; i < resultObj.granted.length; i++) {
|
||||
var grantedPermission = resultObj.granted[i];
|
||||
console.log('已获取的权限:' + grantedPermission);
|
||||
result = 1
|
||||
}
|
||||
for (var i = 0; i < resultObj.deniedPresent.length; i++) {
|
||||
var deniedPresentPermission = resultObj.deniedPresent[i];
|
||||
console.log('拒绝本次申请的权限:' + deniedPresentPermission);
|
||||
result = 0
|
||||
}
|
||||
for (var i = 0; i < resultObj.deniedAlways.length; i++) {
|
||||
var deniedAlwaysPermission = resultObj.deniedAlways[i];
|
||||
console.log('永久拒绝申请的权限:' + deniedAlwaysPermission);
|
||||
result = -1
|
||||
}
|
||||
resolve(result);
|
||||
// 若所需权限被拒绝,则打开APP设置界面,可以在APP设置界面打开相应权限
|
||||
// if (result != 1) {
|
||||
// gotoAppPermissionSetting()
|
||||
// }
|
||||
},
|
||||
function(error) {
|
||||
console.log('申请权限错误:' + error.code + " = " + error.message);
|
||||
resolve({
|
||||
code: error.code,
|
||||
message: error.message
|
||||
});
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
// 使用一个方法,根据参数判断权限
|
||||
function judgeIosPermission(permissionID) {
|
||||
if (permissionID == "location") {
|
||||
return judgeIosPermissionLocation()
|
||||
} else if (permissionID == "camera") {
|
||||
return judgeIosPermissionCamera()
|
||||
} else if (permissionID == "photoLibrary") {
|
||||
return judgeIosPermissionPhotoLibrary()
|
||||
} else if (permissionID == "record") {
|
||||
return judgeIosPermissionRecord()
|
||||
} else if (permissionID == "push") {
|
||||
return judgeIosPermissionPush()
|
||||
} else if (permissionID == "contact") {
|
||||
return judgeIosPermissionContact()
|
||||
} else if (permissionID == "calendar") {
|
||||
return judgeIosPermissionCalendar()
|
||||
} else if (permissionID == "memo") {
|
||||
return judgeIosPermissionMemo()
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// 跳转到**应用**的权限页面
|
||||
function gotoAppPermissionSetting() {
|
||||
if (isIos) {
|
||||
var UIApplication = plus.ios.import("UIApplication");
|
||||
var application2 = UIApplication.sharedApplication();
|
||||
var NSURL2 = plus.ios.import("NSURL");
|
||||
// var setting2 = NSURL2.URLWithString("prefs:root=LOCATION_SERVICES");
|
||||
var setting2 = NSURL2.URLWithString("app-settings:");
|
||||
application2.openURL(setting2);
|
||||
|
||||
plus.ios.deleteObject(setting2);
|
||||
plus.ios.deleteObject(NSURL2);
|
||||
plus.ios.deleteObject(application2);
|
||||
} else {
|
||||
// console.log(plus.device.vendor);
|
||||
var Intent = plus.android.importClass("android.content.Intent");
|
||||
var Settings = plus.android.importClass("android.provider.Settings");
|
||||
var Uri = plus.android.importClass("android.net.Uri");
|
||||
var mainActivity = plus.android.runtimeMainActivity();
|
||||
var intent = new Intent();
|
||||
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
|
||||
var uri = Uri.fromParts("package", mainActivity.getPackageName(), null);
|
||||
intent.setData(uri);
|
||||
mainActivity.startActivity(intent);
|
||||
}
|
||||
}
|
||||
|
||||
// 检查系统的设备服务是否开启
|
||||
// var checkSystemEnableLocation = async function () {
|
||||
function checkSystemEnableLocation() {
|
||||
if (isIos) {
|
||||
var result = false;
|
||||
var cllocationManger = plus.ios.import("CLLocationManager");
|
||||
var result = cllocationManger.locationServicesEnabled();
|
||||
console.log("系统定位开启:" + result);
|
||||
plus.ios.deleteObject(cllocationManger);
|
||||
return result;
|
||||
} else {
|
||||
var context = plus.android.importClass("android.content.Context");
|
||||
var locationManager = plus.android.importClass("android.location.LocationManager");
|
||||
var main = plus.android.runtimeMainActivity();
|
||||
var mainSvr = main.getSystemService(context.LOCATION_SERVICE);
|
||||
var result = mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER);
|
||||
console.log("系统定位开启:" + result);
|
||||
return result
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
judgeIosPermission: judgeIosPermission,
|
||||
requestAndroidPermission: requestAndroidPermission,
|
||||
checkSystemEnableLocation: checkSystemEnableLocation,
|
||||
gotoAppPermissionSetting: gotoAppPermissionSetting
|
||||
}
|
||||
Reference in New Issue
Block a user