eapp
Version:
737 lines (692 loc) • 22.5 kB
JavaScript
Ibox("IEappApi.base", function (iboxLoad, exports, ibox) {
// 引用父类IEappApi
var IEappApi = iboxLoad('IEappApi');
// 工具类
var utils = Ibox.utils;
// utils.showErrorLog('IEappApi-base---->');
var url = "http://injection/www/cordova.js";
utils.addJavaScript(url, function () {
utils.showLog('addJavaScript成功-->', url);
coreApi.initialize();
}, function (error) {
utils.showLog('addJavaScript--cordova.js失败-->', error);
});
if (IEappApi.isAndroid()) {
utils.showLog('base--android-->');
} else if (IEappApi.isIos()) {
utils.showLog('base--ios-->');
// 解决ios点击按钮active无着色问题
document.body.addEventListener('touchstart', function () {
});
}
// 核心方法
var coreApi = {
// Application Constructor
initialize: function () {
// 设备初始化ok监听
document.addEventListener('deviceready', this.onDeviceReady.bind(this), false);
},
// deviceready Event Handler
onDeviceReady: function () {
this.receivedEvent('deviceready');
},
// Update DOM on a Received Event
receivedEvent: function (id) {
utils.showLog('Eappbase--receivedEvent--deviceready-->');
// 修改状态
ready = true;
var readyArr = IEappApi.eventListeners.EappReady;
for (var i = 0; i < readyArr.length; i++) {
readyArr[i]();
}
// 解决动态加载eappApi.js导致获取不到EappApi对象,则无法用EappApi.addEventListener监听
// utils.showLog('receivedEvent--deviceready-->', window.EappReadListener);
if (window.EappReadListener) {
window.EappReadListener();
}
var backListerArr = IEappApi.eventListeners["EappBack"];
// utils.showLog('Eappbase--添加监听--backbutton---->');
if (backListerArr.length > 0) {
// 监听返回事件
// 警告:与F7中window.addEventListener('popstate', fun)事件冲突
document.addEventListener("backbutton", function () {
for (var i = 0; i < backListerArr.length; i++) {
backListerArr[i]();
}
}, false);
}
// 网络监听
var netWorkArr = IEappApi.eventListeners.NetWork;
// 覆盖原来的网络监听
// navigator.connection.getInfo(function (info) {
// }, function (e) {
// });
// 监听网络改变状况
var onLineListerArr = IEappApi.eventListeners.EappNetWorkOnline;
// utils.showLog('Eappbase--添加监听--online---->');
document.addEventListener("online", function () {
for (var i = 0; i < onLineListerArr.length; i++) {
onLineListerArr[i]();
}
for (var j = 0; j < netWorkArr.length; j++) {
netWorkArr[j](navigator.connection.type);
}
}, false);
// 监听网络离线状态
var onOffLineListerArr = IEappApi.eventListeners.EappNetWorkOffLine;
// utils.showLog('Eappbase--添加监听--offline---->');
document.addEventListener("offline", function () {
for (var i = 0; i < onOffLineListerArr.length; i++) {
onOffLineListerArr[i]();
}
for (var j = 0; j < netWorkArr.length; j++) {
netWorkArr[j](navigator.connection.type);
}
}, false);
}
};
utils.showLog('Eapp core核心库初始化完成---->');
//-----------Api--------------
var ready = false;
/**
* 是否准备好了
* @returns {boolean}
*/
exports.isReady = function () {
return ready;
};
/**
* 根据变量名获取变量值
* @param keyName
* @returns {any}
*/
exports.getValueByKey = function (keyName) {
try {
return eval(keyName);
} catch (e) {
utils.showErrorLog("base--getValueByKey-->", e);
return null;
}
};
/**
* 从相机获取照片
* @param quality
* @param successCallBack
* @param failCallBack
*/
exports.takePhotoFromCamera = function (quality, successCallBack, failCallBack) {
var sourceType = Camera.PictureSourceType.CAMERA;
exports.takePhoto(sourceType, quality, successCallBack, failCallBack)
};
/**
* 从相机获取照片
* @param quality
* @param successCallBack
* @param failCallBack
*/
exports.takePhotoFromCamera = function (quality, successCallBack, failCallBack) {
var sourceType = Camera.PictureSourceType.CAMERA;
exports.takePhoto(sourceType, quality, successCallBack, failCallBack)
};
/**
* 从相册获取照片
* @param quality
* @param successCallBack
* @param failCallBack
*/
exports.takePhotoFromAlbum = function (quality, successCallBack, failCallBack) {
var sourceType = Camera.PictureSourceType.SAVEDPHOTOALBUM;
exports.takePhoto(sourceType, quality, successCallBack, failCallBack)
};
/**
* 获取照片
* @param sourceType
*/
exports.takePhoto = function (sourceType, quality, successCallBack, failCallBack) {
if (sourceType == undefined || sourceType == "undefined") {
sourceType = Camera.PictureSourceType.CAMERA;
}
//拍照成功后回调
function successCB(base64Data) {
// utils.showLog('successCallBack' + base64Data);
// alert("拍照成功---------->" + base64Data);
successCallBack(base64Data);
}
//失败后回调
function failCB(error) {
// navigator.notification.alert("拍照失败,原因:" + message);
// utils.showLog('failCallBack--->' + message);
failCallBack(error);
}
//拍照
navigator.camera.getPicture(successCB, failCB, {
quality: quality,
destinationType: Camera.DestinationType.DATA_URL,//返回Base64编码字符串
sourceType: sourceType,
// sourceType: Camera.PictureSourceType.CAMERA,//指定图片来自拍照
//sourceType: Camera.PictureSourceType.SAVEDPHOTOALBUM,//指定图片来自相册
encodingType: Camera.EncodingType.JPEG //指定返回图片是png格式还是jpeg
});
};
/**
* 扫一扫
* @param params
* @param successCallBack
* @param failCallBack
*/
exports.takeScan = function (params, successCallBack, failCallBack) {
sky.plugin.barcodeScanne(function (content) {
successCallBack && successCallBack(content);
}, function (error) {
failCallBack && failCallBack(error);
});
};
/**
* 以window的方式打开第三方Url,以兼顾ios的无法返回
* @param url
*/
exports.goThirdUrl = function (url) {
cordova.InAppBrowser.open(url, '_blank', 'location=no');
};
/**
* 启动第三方应用
* @param packageName
*/
exports.startAPP = function (packageName, componentClass) {
var sApp;
if (IEappApi.isIos()) {
sApp = startApp.set(packageName);
} else {
sApp = startApp.set({
"action": "ACTION_MAIN",
"type": "text/css",
"package": packageName,
"component": [packageName, componentClass]
});
}
sApp.start(function () {
console.warn('启动APP成功');
}, function (error) {
console.warn('启动APP失败:' + error);
});
};
/**
* 跳转到ios升级安装页面
* @param iosUrl
*/
exports.goInstallIosPage = function (iosUrl) {
cordova.InAppBrowser.open(iosUrl, '_blank', 'location=no');
};
/**
* 获取权限
* @returns {*}
*/
exports.getPermissionApi = function () {
return cordova.plugins.permissions;
};
/**
* 检查权限
* @param permission
* @param okCB
* @param errorCB
*/
exports.checkPermission = function (permission, okCB, errorCB) {
var api = exports.getPermissionApi();
api.checkPermission(permission, okCB, errorCB);
};
/**
* 申请权限
* @param permissions
* @param okCB
* @param errorCB
*/
exports.requestPermissions = function (permissions, okCB, errorCB) {
var api = exports.getPermissionApi();
api.requestPermissions(permissions, okCB, errorCB);
};
/**
* 检查是否有写入权限
* @param okCB
* @param errCB
*/
exports.requestWriteStorage = function (okCB, errCB) {
// 检查权限
var api = exports.getPermissionApi();
exports.checkPermission(api.WRITE_EXTERNAL_STORAGE, function (s) {
//hasPermission 验证是否成功
if (s.hasPermission) {
// 已经拥有权限
okCB && okCB();
return;
}
// 没有权限,app申请写入权限
exports.requestPermissions([api.WRITE_EXTERNAL_STORAGE, api.READ_EXTERNAL_STORAGE], function (res) {
// 申请成功
if (res.hasPermission) {
okCB && okCB();
}
// 申请失败
else {
// utils.showLog("申请写入失败1");
errCB && errCB("申请写入失败!");
}
}, errCB);
}, errCB);
};
/**
* 检查和申请权限
* @param perminssion
* @param okCB
* @param errCB
*/
exports.checkAndRequestPermission = function (perminssion, okCB, errCB) {
// 检查权限
exports.checkPermission(perminssion, function (s) {
// 有权限
if (s.hasPermission) {
okCB && okCB();
return;
}
// 申请权限
exports.requestPermissions([perminssion], function (res) {
// 申请成功
if (res.hasPermission) {
okCB && okCB();
}
// 申请失败
else {
errCB && errCB("申请写入失败!");
}
}, errCB);
}, errCB);
};
/**
* 下载apk文件
* @param filePath
* @param apkUrl
*/
exports.downloadApk = function (apkUrl, callBack) {
exports.downloadAndInstallApk(apkUrl, callBack, false);
};
/**
* 创建、下载、安装apk
* @param apkUrl
* @param ifInstall 默认true
*/
exports.downloadAndInstallApk = function (apkUrl, callBack, ifInstall) {
var backData = {
status: 200,
error: ''
};
var fileName = "temp.apk";
ifInstall = ifInstall || true;
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fs) {
fs.root.getFile(fileName, {create: true, exclusive: false},
function (fileEntry) {
// 若干手机不识别
// var filePath = fileEntry.toURL();
// 插件获取路径
var filePath = cordova.file.externalDataDirectory + fileName;
// 下载且安装
exports.downloadFile(filePath, apkUrl, function (data) {
callBack && callBack(data);
// 下载完成
if (ifInstall && data.status == 202) {
// 退出app
exports.exitApp();
// android安装:发起系统安装界面
exports.installApk(data.filePath);
}
});
}, function (error) {
utils.showLog("文件创建失败!" + error);
backData.status = 400;
backData.error = error;
callBack && callBack(backData);
});
}, function (error) {
utils.showLog("文件系统加载失败!" + error);
backData.status = 400;
backData.error = error;
callBack && callBack(backData);
});
};
/**
* 退出应用程序(Android)
*/
exports.exitApp = function () {
if (IEappApi.isIos()) {
sky.plugin.exitApp();
} else {
navigator.app.exitApp();
}
};
/**
* 返回上一次浏览页面(Android)
*/
exports.goBack = function () {
if (IEappApi.isIos()) {
return;
}
navigator.app.backHistory();
};
/**
* 清空浏览历史(Android)
*/
exports.clearHistory = function () {
if (IEappApi.isIos()) {
return;
}
navigator.app.clearHistory();
};
/**
* 清空程序的资源文件缓存(Android)
*/
exports.clearCache = function () {
if (IEappApi.isIos()) {
return;
}
navigator.app.clearCache();
};
/**
* 调用显示启动应用程序的背景图片
*/
exports.showSplash = function () {
navigator.splashscreen.show();
};
/**
* 调用隐藏启动应用程序的背景图片
*/
exports.hideSplash = function () {
navigator.splashscreen.hide();
};
/**
* 修改电池状态栏颜色
* @param color
* @param textColorFlag 0默认:白字配深色背景;1:黑字配白色背景
*/
exports.titleBarColor = function (color, textColorFlag) {
if (!utils.isEmpty(color)) {
// 背景颜色
window.StatusBar.backgroundColorByHexString(color);
}
textColorFlag = textColorFlag || 0;
// 白字 + 深色背景
if (textColorFlag == 0) {
// 字体颜色
window.StatusBar.styleLightContent();
}
// 黑字 + 白色背景
else {
// 字体颜色
window.StatusBar.styleDefault();
}
};
/**
* 设置电池栏字体颜色
* @param textColorFlag 0默认:白字配深色背景;1:黑字配白色背景
*/
exports.titleBarTextColor = function (textColorFlag) {
// 白字 + 深色背景
if (textColorFlag == 0) {
// 字体颜色
window.StatusBar.styleLightContent();
}
// 黑字 + 白色背景
else {
// 字体颜色
window.StatusBar.styleDefault();
}
};
/**
* 获取当前网络类型
* @returns {*}
*/
exports.getNetWorkType = function () {
return navigator.connection.type;
};
/**
* 设置APN
* @returns {*}
*/
exports.toSettingApn = function () {
SkyApn.toSettingApn();
};
/**
* 获取当前版本Version和Code
* @returns {Promise<any>}
*/
exports.getAppVersionNameAndCode = function (callback) {
var data = {
version: "",
code: 0
};
cordova.getAppVersion.getVersionNumber(function (appVersion) {
data.version = appVersion;
cordova.getAppVersion.getVersionCode(function (code) {
if (IEappApi.isAndroid()) {
data.code = code;
} else {
data.code = code;
}
callback(data);
});
});
};
// navigator.app.loadUrl();// 加载 web 页面的应用程序中或者系统默认的浏览器中
// navigator.app.cancelLoadUrl();// 在 web 页面成功加载之前取消加载
/**
* 下载apk文件
* @param filePath
* @param apkUrl
*/
exports.downloadApk = function (filePath, apkUrl, callBack) {
exports.downloadFile(filePath, apkUrl, callBack);
};
/**
* 发起系统安装界面
* @param apkUrl
*/
exports.installApk = function (apkUrl) {
// 安装
cordova.plugins.fileOpener2.open(apkUrl, 'application/vnd.android.package-archive');
};
/**
* 下载文件
* @param filePath
* @param fileUrl
*/
exports.downloadFile = function (filePath, fileUrl, callBack) {
var backData = {
status: 200,
progress: 0,
filePath: '',
error: ''
};
// 开始下载
backData.status = 200;
callBack(backData);
// dialog.loading.open("正在下载...");
var fileTransfer = new FileTransfer();
utils.showLog("filePath--->", filePath);
var prePro = 0;
fileTransfer.onprogress = function (e) {
if (e.lengthComputable) {
var progress = e.loaded / e.total;
// utils.showLog('当前进度:' + progress);
var per = progress * 100;
// 保留两位小数
per = per.toFixed(2);
if (per - prePro > 0.01) {
//utils.showLog('下载中-->', per);
// 下载中
backData.status = 201;
backData.progress = per;
callBack(backData);
}
prePro = per;
}
};
fileTransfer.download(
fileUrl,
filePath,
function (entry) {
var filePath = entry.toURL();
utils.showLog("下载完成--文件位置-->", filePath);
// 下载完成
backData.status = 202;
backData.filePath = filePath;
callBack(backData);
},
function (error) {
utils.showErrorLog("下载失败-error-->", JSON.stringify(error));
// 下载失败
backData.status = 203;
backData.error = error;
callBack(backData);
},
null,
{}
);
};
/**
* 获取百度GPS坐标
*
*/
exports.getCurrentPosition = function (callback) {
var backData = {
success: true,
result: '',
error: ''
};
baidumap_location.getCurrentPosition(function (result) {
backData.success = true;
backData.result = result;
callback(backData);
}, function (error) {
backData.success = false;
backData.error = error;
callback(backData);
});
};
/**
* 刷新页面
*/
exports.refeshPage = function () {
window.location.reload();
};
//-----语音转文字ios插件----
/**
* 开始语音听写
* @param success
* @param error
*/
exports.StartVoiceRecognizer = function (success, error, isShow, isPunc) {
xunfeiListenSpeaking.startListen(success, error, isShow, isPunc);
};
/**
* 停止语音听写
*/
exports.StopVoiceRecognizer = function () {
xunfeiListenSpeaking.stopListen();
};
/**
* 取消语音听写
*/
exports.CancelVoiceRecognizer = function () {
xunfeiListenSpeaking.cancelListening();
};
/**
* 开始语音朗读
* @param success
* @param error
*/
exports.StartSpeack = function (success, error, txt) {
xunfeiListenSpeaking.startSpeak(success, error, txt);
};
/**
* 暂停语音朗读
*/
exports.PauseSpeack = function () {
xunfeiListenSpeaking.pauseSpeaking();
};
/**
* 继续语音朗读
*/
exports.ResumeSpeack = function () {
xunfeiListenSpeaking.resumeSpeaking();
};
/**
* 停止语音朗读
*/
exports.StopSpeack = function () {
xunfeiListenSpeaking.stopSpeak();
};
/**
* HttpPost请求
*/
exports.HttpRequest = function (http_type, url, options, headers, success, error) {
if (http_type === 'get') {
cordova.plugin.http.get(url, options, headers, success, error);
} else {
cordova.plugin.http.post(url, options, headers, success, error);
}
};
/**
* 进入新的App页面
* @param url
* @param options 'right'、'bottom'
* @param success
* @param error
*/
exports.goNewAppPage = function (url, options, success, error) {
var type;
if (options == 'right') {
type = sky.plugin.TYPE.BY_RIGHT;
} else {
type = sky.plugin.TYPE.BY_BOTTOM;
}
sky.plugin.openNewView(type, url, success, error);
};
/**
* 退出App页面
* @param success
* @param error
*/
exports.exitAppPage = function (success, error) {
sky.plugin.viewBack(success, error);
};
/**
* 启动第三方页面
* @param success
* @param error
*/
exports.openIosApp = function (success, error, params) {
var sApp = startApp.set(params);
sApp.start(success, error);
};
/**
* 获取支持的跳转的ios应用集合
* @param success
* @param error
* @param params
* @returns {module.exports.TYPE|{S_QQ, S_WEIXIN, S_TAOBAO, S_DIANPING, S_SINAWEIBO, S_WEICO, S_ALIPAY, S_DOUBAN, S_SINAVDISK, S_NTESOPEN, S_IMETITUAN, S_JDMOBLE, S_RENREN, S_WCC, S_WCCBYIHAODIAN, S_YDDICTPROAPP, S_ZHIHU, S_YOUKU, S_BAIDUMAP, S_iosamap}|*}
*/
exports.getIosAppList = function () {
return startApp.TYPE;
};
/**
* 设置缓存值
* @returns {{}}
*/
exports.setValueForApp = function (success, error, params) {
sky.plugin.setValueForApp(params[0], params[1], success, error);
}
/**
* 获取缓存值
* @returns {{}}
*/
exports.getValueFromApp = function (success, error, params) {
sky.plugin.getValueFromApp(params[0], success, error);
}
});