UNPKG

eapp

Version:
737 lines (692 loc) 22.5 kB
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); } });