HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

JavaScript 快速提高视频教程已经发布!(免费教程)另有:mui、h5+、基于h5+ app开发实战、微信小程序等教程.

mui

JavaScript 快速提高视频教程已经发布!(免费教程)
针对js基础不够好的同学,深度剖析js运行原理、变量作用域、函数、面向对象、闭包等底层知识,快速提升JavaScript技能!
本教程主要目的是提供大家的js学习基础,提供学习思路。
另有:mui、h5+、基于h5+ app开发实战、微信小程序等教程。视频教程观看地址

交流qq群
1群 335126794(已满), 2群 340610532

免费视频教程地址:
http://www.hcoder.net/course

继续阅读 »

JavaScript 快速提高视频教程已经发布!(免费教程)
针对js基础不够好的同学,深度剖析js运行原理、变量作用域、函数、面向对象、闭包等底层知识,快速提升JavaScript技能!
本教程主要目的是提供大家的js学习基础,提供学习思路。
另有:mui、h5+、基于h5+ app开发实战、微信小程序等教程。视频教程观看地址

交流qq群
1群 335126794(已满), 2群 340610532

免费视频教程地址:
http://www.hcoder.net/course

收起阅读 »

如何通过Native.js进行文件选取

Native.JS

5+ API中plus.gallery.pick只能选取图片或是视频文件,那问题来了,其他类型文件如何选取。
此时就该发挥Native.js的强大之处了,如果会安卓原生编程,代码so easy。不会的同学你可以选择找到代码copy,会是百度原生代码实现然后转换为Native.js语法。废话不多说,反正你可以找到很多方式配合5+API完成自己的app。
开吃。。。

window.PickFile = function(callback,acceptType){  
    function ip(obj){  
        plus.android.importClass(obj);  
        return obj;  
    }  
    if(plus.os.name == 'Android' && typeof callback == 'function'){  
        var CODE_REQUEST = 1000;  
        var context = plus.android.runtimeMainActivity();  
        ip(context);  
        var Intent = plus.android.importClass('android.content.Intent');  
        var intent = new Intent(Intent.ACTION_GET_CONTENT);  
        intent.addCategory(Intent.CATEGORY_OPENABLE);  
        if(acceptType){  
            intent.setType(acceptType);  
        }else{  
            intent.setType("*/*");  
        }  
        context.onActivityResult = function(requestCode,resultCode,intentData){  
            if(requestCode == CODE_REQUEST){  
                if(intentData){  
                    var uriValue = intentData.getData();  
                    plus.android.importClass(uriValue);  
                    var scheme = uriValue.getScheme();  
                    if(scheme == 'content'){//还需要进行数据库查询,一般图片数据  
                        var cursor = ip(context.getContentResolver()).query(uriValue,['_data'], null, null, null);  
                        if(cursor){  
                            ip(cursor).moveToFirst();  
                            var columnIndex = cursor.getColumnIndex('_data');  
                            picturePath = cursor.getString(columnIndex);  
                            cursor.close();  
                            callback(picturePath);//返回文件路径  
                        }  
                    }else if(scheme == 'file'){  
                        callback(uriValue.getPath());//返回文件路径  
                    }  
                }else{  
                    callback(null);  
                }  
            }  
        }  
        context.startActivityForResult(intent,CODE_REQUEST);  
    }  
}
继续阅读 »

5+ API中plus.gallery.pick只能选取图片或是视频文件,那问题来了,其他类型文件如何选取。
此时就该发挥Native.js的强大之处了,如果会安卓原生编程,代码so easy。不会的同学你可以选择找到代码copy,会是百度原生代码实现然后转换为Native.js语法。废话不多说,反正你可以找到很多方式配合5+API完成自己的app。
开吃。。。

window.PickFile = function(callback,acceptType){  
    function ip(obj){  
        plus.android.importClass(obj);  
        return obj;  
    }  
    if(plus.os.name == 'Android' && typeof callback == 'function'){  
        var CODE_REQUEST = 1000;  
        var context = plus.android.runtimeMainActivity();  
        ip(context);  
        var Intent = plus.android.importClass('android.content.Intent');  
        var intent = new Intent(Intent.ACTION_GET_CONTENT);  
        intent.addCategory(Intent.CATEGORY_OPENABLE);  
        if(acceptType){  
            intent.setType(acceptType);  
        }else{  
            intent.setType("*/*");  
        }  
        context.onActivityResult = function(requestCode,resultCode,intentData){  
            if(requestCode == CODE_REQUEST){  
                if(intentData){  
                    var uriValue = intentData.getData();  
                    plus.android.importClass(uriValue);  
                    var scheme = uriValue.getScheme();  
                    if(scheme == 'content'){//还需要进行数据库查询,一般图片数据  
                        var cursor = ip(context.getContentResolver()).query(uriValue,['_data'], null, null, null);  
                        if(cursor){  
                            ip(cursor).moveToFirst();  
                            var columnIndex = cursor.getColumnIndex('_data');  
                            picturePath = cursor.getString(columnIndex);  
                            cursor.close();  
                            callback(picturePath);//返回文件路径  
                        }  
                    }else if(scheme == 'file'){  
                        callback(uriValue.getPath());//返回文件路径  
                    }  
                }else{  
                    callback(null);  
                }  
            }  
        }  
        context.startActivityForResult(intent,CODE_REQUEST);  
    }  
}
收起阅读 »

Hbuilder打包APP踩坑经验之真机调试

真机调试

作为一个java文盲,h5+给了我一个开发移动APP的机会,这一点非常感谢。所谓万事开头难,从刚接触h5+到完成一个可以商用的APP的开发路就是一个不断挖坑又填坑的过程,充满了一个前端开发的血和泪。作为一个小白,也来分享一下开发的路上踩过的各种坑,以供后来人引以为鉴。

话说开发的过程中hbuilder的真机调试功能真是十分的方便,但是它并不“完美?”,今天就来吐槽一下真机调试的那些坑:

1,真机调试时图标,启动图什么的都不是自己在manifest.json里的配置,这点官方有说明不再赘述
2,真机调试的打包证书使用dcloud自有证书,如果是调试微信支付,百度地图等绑定包hash或包名的第三方sdk无法通过真机调试,除非申请微信支付(或其他)填写的就是dcloud官方证书的hash值
3,真机调试的包名是固定死的“io.dcloud.”+ appid ,绑定包名的第三方sdk不能用,除非申请时填写的包名也是“io.dcloud.”+ appid (应该很少人这么做吧 ^ ^)。
4,真机调试时各种权限都已开启,且第三方sdk基本上也都配置好了,而且是dcloud公司的私有配置,不是manifest.json手动填写的配置,所以有关没有权限或sdk配置参数错误这些bug,通过真机调试不能重现
5,真机调试plusready的执行逻辑跟真实APP包不太一样,这个我也是偶然发现,如果在同一页面(或引用的js里)写了2个plusready方法,即两次执行 document.addEventListener('plusready', function(){ /.../ }, false); 真机调试时两次调用的逻辑都执行了,但是打包后的APP执行了第二次的 plusready,这个问题调试时是个大坑
6,关于定位plus.geolocation.getCurrentPosition,正常只需要给geolocation权限就可以的,但是如果在 PositionOptions配置了provider是baidu或amap时,还需要maps权限和配置百度或高德appkey,但是如果没有配置maps权限真机调试完全OK的,原因就如第4条所述。

暂时先写这么多,后面陆续更新吧。。。

继续阅读 »

作为一个java文盲,h5+给了我一个开发移动APP的机会,这一点非常感谢。所谓万事开头难,从刚接触h5+到完成一个可以商用的APP的开发路就是一个不断挖坑又填坑的过程,充满了一个前端开发的血和泪。作为一个小白,也来分享一下开发的路上踩过的各种坑,以供后来人引以为鉴。

话说开发的过程中hbuilder的真机调试功能真是十分的方便,但是它并不“完美?”,今天就来吐槽一下真机调试的那些坑:

1,真机调试时图标,启动图什么的都不是自己在manifest.json里的配置,这点官方有说明不再赘述
2,真机调试的打包证书使用dcloud自有证书,如果是调试微信支付,百度地图等绑定包hash或包名的第三方sdk无法通过真机调试,除非申请微信支付(或其他)填写的就是dcloud官方证书的hash值
3,真机调试的包名是固定死的“io.dcloud.”+ appid ,绑定包名的第三方sdk不能用,除非申请时填写的包名也是“io.dcloud.”+ appid (应该很少人这么做吧 ^ ^)。
4,真机调试时各种权限都已开启,且第三方sdk基本上也都配置好了,而且是dcloud公司的私有配置,不是manifest.json手动填写的配置,所以有关没有权限或sdk配置参数错误这些bug,通过真机调试不能重现
5,真机调试plusready的执行逻辑跟真实APP包不太一样,这个我也是偶然发现,如果在同一页面(或引用的js里)写了2个plusready方法,即两次执行 document.addEventListener('plusready', function(){ /.../ }, false); 真机调试时两次调用的逻辑都执行了,但是打包后的APP执行了第二次的 plusready,这个问题调试时是个大坑
6,关于定位plus.geolocation.getCurrentPosition,正常只需要给geolocation权限就可以的,但是如果在 PositionOptions配置了provider是baidu或amap时,还需要maps权限和配置百度或高德appkey,但是如果没有配置maps权限真机调试完全OK的,原因就如第4条所述。

暂时先写这么多,后面陆续更新吧。。。

收起阅读 »

h.js 更新至1.2.1 增加 siblings() 获取相邻元素,h.js 是一个极小、极快的js框架。用于补充 mui dom 操作能力的不足!

h.js 更新至1.2.1 增加 siblings() 获取相邻元素,h.js 是一个极小、极快的js框架。用于补充 mui dom 操作能力的不足!

官网:
http://www.hcoder.net/h

免费、开源、配有免费的视频教程及手册,欢迎使用(非常小 9K、非常快)!
QQ交流群 : 2群 340610532,1群 335126794(已满)

继续阅读 »

h.js 更新至1.2.1 增加 siblings() 获取相邻元素,h.js 是一个极小、极快的js框架。用于补充 mui dom 操作能力的不足!

官网:
http://www.hcoder.net/h

免费、开源、配有免费的视频教程及手册,欢迎使用(非常小 9K、非常快)!
QQ交流群 : 2群 340610532,1群 335126794(已满)

收起阅读 »

谁知道js后面学完学什么?

JSP

function xx(){

document.getElementById("").style.display="haha";  

}

function xx(){

document.getElementById("").style.display="haha";  

}

MUI自带的picker组件,在设置默认值是出错的问题

picker

如题,mui自带的picker组件,在使用三级列表的时候,通过以下代码

// 设定省初始值  
                    cityPicker.pickers[0].setSelectedValue("320000");  
                    // 设定市初始值  
                    cityPicker.pickers[1].setSelectedValue("320200");  
                    // 设定区初始值  
                    cityPicker.pickers[2].setSelectedValue("320205");

弹出的来选择其中,默认值始终只能设置好省份的默认值,剩下的二级,三级选择器未能正确设置默认值。
如果采用

cityPicker.pickers[0].setSelectedIndex(9);  
                    // 设定市初始值  
                    cityPicker.pickers[1].setSelectedIndex(1);  
                    // 设定区初始值  
                    cityPicker.pickers[2].setSelectedIndex(5);

则能正常设置三级的默认值。
经过反复测试,我对picker.js的代码进行了修改。主要是修改了triggerChange部分的功能函数,如下

Picker.prototype.triggerChange = function(callback) {  
        var self = this;  
        var index = self.getSelectedIndex();  
        var item = self.items[index];  

        if(index != self.lastIndex) {  
            $.trigger(self.holder, 'change', {  
                "index": index,  
                "item": item  
            });  
        }  
        self.lastIndex = index;  
        typeof callback === 'function' && callback();  
    };

经过测试,终于可以正常使用setSelectedValue来设置三级的默认值。
另外,还添加了一个setSelectedText功能,就是按照setSelectedValue的功能进行改造的。目前没发现什么问题不知道会不会影响到什么地方

继续阅读 »

如题,mui自带的picker组件,在使用三级列表的时候,通过以下代码

// 设定省初始值  
                    cityPicker.pickers[0].setSelectedValue("320000");  
                    // 设定市初始值  
                    cityPicker.pickers[1].setSelectedValue("320200");  
                    // 设定区初始值  
                    cityPicker.pickers[2].setSelectedValue("320205");

弹出的来选择其中,默认值始终只能设置好省份的默认值,剩下的二级,三级选择器未能正确设置默认值。
如果采用

cityPicker.pickers[0].setSelectedIndex(9);  
                    // 设定市初始值  
                    cityPicker.pickers[1].setSelectedIndex(1);  
                    // 设定区初始值  
                    cityPicker.pickers[2].setSelectedIndex(5);

则能正常设置三级的默认值。
经过反复测试,我对picker.js的代码进行了修改。主要是修改了triggerChange部分的功能函数,如下

Picker.prototype.triggerChange = function(callback) {  
        var self = this;  
        var index = self.getSelectedIndex();  
        var item = self.items[index];  

        if(index != self.lastIndex) {  
            $.trigger(self.holder, 'change', {  
                "index": index,  
                "item": item  
            });  
        }  
        self.lastIndex = index;  
        typeof callback === 'function' && callback();  
    };

经过测试,终于可以正常使用setSelectedValue来设置三级的默认值。
另外,还添加了一个setSelectedText功能,就是按照setSelectedValue的功能进行改造的。目前没发现什么问题不知道会不会影响到什么地方

收起阅读 »

h5+免费视频教程更新中(更新至15节应用窗口详解)、mui、app实战教程尽在hcoder.net

mui

视频教程汇总


知识点 : HTML 5 + 开发教程(20170330更新 持续更新中)
实战: MUI、H5+ APP 实战教程 - 仿《有道词典》
知识点 : HBuilder 8.0.1 APP开发 - 新功能全接触
知识点 : APP开发教程 - 启动动画
知识点 : APP开发实例教程 - 窗口切换
知识点 : 移动端图片剪裁、上传视频教程
知识点 : app开发教程-用户注册、登录
实战 : APP开发实战 - 新闻客户端
知识点 : mui 全套教程

交流qq群
1群 335126794(已满), 2群 340610532

免费视频教程地址:
http://www.hcoder.net/course

继续阅读 »

视频教程汇总


知识点 : HTML 5 + 开发教程(20170330更新 持续更新中)
实战: MUI、H5+ APP 实战教程 - 仿《有道词典》
知识点 : HBuilder 8.0.1 APP开发 - 新功能全接触
知识点 : APP开发教程 - 启动动画
知识点 : APP开发实例教程 - 窗口切换
知识点 : 移动端图片剪裁、上传视频教程
知识点 : app开发教程-用户注册、登录
实战 : APP开发实战 - 新闻客户端
知识点 : mui 全套教程

交流qq群
1群 335126794(已满), 2群 340610532

免费视频教程地址:
http://www.hcoder.net/course

收起阅读 »

h5+免费视频教程更新中(更新至15节应用窗口详解)、mui、app实战教程尽在hcoder.net

视频教程 mui

视频教程汇总


知识点 : HTML 5 + 开发教程(20170330更新 持续更新中)
实战: MUI、H5+ APP 实战教程 - 仿《有道词典》
知识点 : HBuilder 8.0.1 APP开发 - 新功能全接触
知识点 : APP开发教程 - 启动动画
知识点 : APP开发实例教程 - 窗口切换
知识点 : 移动端图片剪裁、上传视频教程
知识点 : app开发教程-用户注册、登录
实战 : APP开发实战 - 新闻客户端
知识点 : mui 全套教程

交流qq群
1群 335126794(已满), 2群 340610532

免费视频教程地址:
http://www.hcoder.net/course

继续阅读 »

视频教程汇总


知识点 : HTML 5 + 开发教程(20170330更新 持续更新中)
实战: MUI、H5+ APP 实战教程 - 仿《有道词典》
知识点 : HBuilder 8.0.1 APP开发 - 新功能全接触
知识点 : APP开发教程 - 启动动画
知识点 : APP开发实例教程 - 窗口切换
知识点 : 移动端图片剪裁、上传视频教程
知识点 : app开发教程-用户注册、登录
实战 : APP开发实战 - 新闻客户端
知识点 : mui 全套教程

交流qq群
1群 335126794(已满), 2群 340610532

免费视频教程地址:
http://www.hcoder.net/course

收起阅读 »

使用plus.nativeObj.View编写一个底部导航栏

view nativeObj

众所周知,5+plus提供原生绘画对象(View),通过原生绘画对象可以实现很多控件,以及无限遐想空间。
近期因为需要写一款APP,但是需要预加载的太多了,需要顶部栏还需要底部栏,如果用父子页面的话显然太卡了。
因此标题栏以及底部栏我均使用了plus.nativeObj.View “自绘”了顶部栏和底部栏。


如图所示,这仅仅是最简单的一个样子,就像官方说的,还可以在里面画个球...
附件看图,这儿删繁就简。直接展示使用方法。
首先官方文档:http://www.html5plus.org/doc/zh_cn/nativeobj.html
使用方法:

var _footer = new plus.nativeObj.View('footer');  
var _a = ['img/jingxuan.png','img/app.png','img/ph.png','img/mine.png'];  
var _b = ['img/jingxuan_2.png','img/app_2.png','img/ph_2.png','img/mine_2.png'];  
var _c = ['a','b','c','d'];  
_fbar.setTabInfo(_footer,_a,_b,_c)   
_fbar.setCB(function(tab){  
    console.log('切换选夹>>'+tab);  
});

其中_a 为普通状态图片 _b 为选中状态图片 _c 为选项文本(我一般都是两个字)
关于焦点切换都在js中处理了,开发者只需要在setCB时候传入function,接收即将切换的选夹,并且切换需要显示的webview就行了。
对了,高度为60px,需要如何改进的自行修改js内部。
js纯属抠出来的,源文件包含的太多代码,抠出来的时候可能有点乱。

继续阅读 »

众所周知,5+plus提供原生绘画对象(View),通过原生绘画对象可以实现很多控件,以及无限遐想空间。
近期因为需要写一款APP,但是需要预加载的太多了,需要顶部栏还需要底部栏,如果用父子页面的话显然太卡了。
因此标题栏以及底部栏我均使用了plus.nativeObj.View “自绘”了顶部栏和底部栏。


如图所示,这仅仅是最简单的一个样子,就像官方说的,还可以在里面画个球...
附件看图,这儿删繁就简。直接展示使用方法。
首先官方文档:http://www.html5plus.org/doc/zh_cn/nativeobj.html
使用方法:

var _footer = new plus.nativeObj.View('footer');  
var _a = ['img/jingxuan.png','img/app.png','img/ph.png','img/mine.png'];  
var _b = ['img/jingxuan_2.png','img/app_2.png','img/ph_2.png','img/mine_2.png'];  
var _c = ['a','b','c','d'];  
_fbar.setTabInfo(_footer,_a,_b,_c)   
_fbar.setCB(function(tab){  
    console.log('切换选夹>>'+tab);  
});

其中_a 为普通状态图片 _b 为选中状态图片 _c 为选项文本(我一般都是两个字)
关于焦点切换都在js中处理了,开发者只需要在setCB时候传入function,接收即将切换的选夹,并且切换需要显示的webview就行了。
对了,高度为60px,需要如何改进的自行修改js内部。
js纯属抠出来的,源文件包含的太多代码,抠出来的时候可能有点乱。

收起阅读 »

手机GPS定位

地图插件 地图

HTML5+ 提供了两种获取当前用户GPS位置的方式:

  1. plus.geolocation.getCurrentPosition
  2. Map.getUserLocation

经过测试发现第一种方法获得的位置离散程度比第二种方式高,会出现很多偏离当前真实位置较大的“噪点”,因此推荐使用第二种获取GPS位置的方式。

参考代码如下:

HTML中放一个div容器:  
<div id='allmap' style='display: none;'></div>    

JS中添加代码:  
function queryGeoLocation() {  
    var mapObj = new plus.maps.Map('allmap');  
    var getGPS = mapObj.getUserLocation( function ( state, point ){  
        if( 0 == state ){  

            mapObj.centerAndZoom(point, 15);  
            console.debug(JSON.stringify(point));  
        }else{  

        }  
    } );  

    if(getGPS == false) {  

    }  
}

无论使用哪种方式,都需要首先获取百度地图或者高德地图的APP Key。参考地图插件配置一文即可(http://ask.dcloud.net.cn/article/29),但在新版HBuild中,设置Key的方式已经简化,仅需要在manifest.json的“SDK配置”视图中添加获得的appkey即可,无需修改代码视图。

继续阅读 »

HTML5+ 提供了两种获取当前用户GPS位置的方式:

  1. plus.geolocation.getCurrentPosition
  2. Map.getUserLocation

经过测试发现第一种方法获得的位置离散程度比第二种方式高,会出现很多偏离当前真实位置较大的“噪点”,因此推荐使用第二种获取GPS位置的方式。

参考代码如下:

HTML中放一个div容器:  
<div id='allmap' style='display: none;'></div>    

JS中添加代码:  
function queryGeoLocation() {  
    var mapObj = new plus.maps.Map('allmap');  
    var getGPS = mapObj.getUserLocation( function ( state, point ){  
        if( 0 == state ){  

            mapObj.centerAndZoom(point, 15);  
            console.debug(JSON.stringify(point));  
        }else{  

        }  
    } );  

    if(getGPS == false) {  

    }  
}

无论使用哪种方式,都需要首先获取百度地图或者高德地图的APP Key。参考地图插件配置一文即可(http://ask.dcloud.net.cn/article/29),但在新版HBuild中,设置Key的方式已经简化,仅需要在manifest.json的“SDK配置”视图中添加获得的appkey即可,无需修改代码视图。

收起阅读 »

h5+ App 开发实战教程 - 仿《有道词典》已经发布!更多免费视频教程(mui、h5+、h.js、仿《今日头条》新闻客户端实战)等教程汇总

mui

基于mui、h5+、h.js的App开发实战教程 - 仿《有道词典》 已经发布!


总计10节:
1、入口页面布局子页面布局(含原生侧滑窗口切换
2、主页面布局及代码实现
3、新闻详情页面开发
4、词典页面功能及代码编写
5、热点新闻栏目开发(涵盖:下拉刷新、上拉加载等知识点)
6、完成登录检查及微信登录
7、“我的”页面开发
8、推送及相关统计
9、app 在线升级及安装
10、发布应用到应用宝并进行应用加固及签名

课程总计 4个半小时,包含源码、apk。涉及mui布局修改、服务器交互、微信登录、推送、app升级、加固签名等大部分开发知识!
收费50元,有经济困难的在校学生可以联系客服 1265928288 进行优惠(不是勿扰)。
购买方式
腾讯课堂:
https://ke.qq.com/course/194834#tuin=4f8da6

资料包包含:源码、素材、文字资料,购买后即可下载! 观看时候选择超清模式,代码清晰可见!

交流qq群
1群 335126794(已满), 2群 340610532

hcoder 一直致力于奉献高质量 教程,官网上 mui h5+ 等免费教程播放量已经达到5万,收点费用为了做的更好,希望大家理解。
免费教程地址
http://www.hcoder.net/course

继续阅读 »

基于mui、h5+、h.js的App开发实战教程 - 仿《有道词典》 已经发布!


总计10节:
1、入口页面布局子页面布局(含原生侧滑窗口切换
2、主页面布局及代码实现
3、新闻详情页面开发
4、词典页面功能及代码编写
5、热点新闻栏目开发(涵盖:下拉刷新、上拉加载等知识点)
6、完成登录检查及微信登录
7、“我的”页面开发
8、推送及相关统计
9、app 在线升级及安装
10、发布应用到应用宝并进行应用加固及签名

课程总计 4个半小时,包含源码、apk。涉及mui布局修改、服务器交互、微信登录、推送、app升级、加固签名等大部分开发知识!
收费50元,有经济困难的在校学生可以联系客服 1265928288 进行优惠(不是勿扰)。
购买方式
腾讯课堂:
https://ke.qq.com/course/194834#tuin=4f8da6

资料包包含:源码、素材、文字资料,购买后即可下载! 观看时候选择超清模式,代码清晰可见!

交流qq群
1群 335126794(已满), 2群 340610532

hcoder 一直致力于奉献高质量 教程,官网上 mui h5+ 等免费教程播放量已经达到5万,收点费用为了做的更好,希望大家理解。
免费教程地址
http://www.hcoder.net/course

收起阅读 »

移动app如何在手机关屏后仍能正常运行、接收信息

最近在弄一个安卓APP,需要每隔几秒钟上报一次GPS位置,但发现当手机休眠后(屏幕熄灭后)APP不再运行,因此也不能上报GPS位置。

借助安卓的WakeLock机制,我们可以实现让APP在后台运行。实现代码如下:


var g_wakelock = null;  
//允许程序后台运行,以持续获取GPS位置  
function wakeLock() {  
    //Android  
    var main = plus.android.runtimeMainActivity();  
    var Context = plus.android.importClass("android.content.Context");  
    var PowerManager = plus.android.importClass("android.os.PowerManager");  
    var pm = main.getSystemService(Context.POWER_SERVICE);  
    g_wakelock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "ANY_NAME");  
    g_wakelock.acquire();  
}  

//结束程序后台运行  
function releaseWakeLock () {  
    if(g_wakelock != null && g_wakelock.isHeld()) {  
        g_wakelock.release();  
        g_wakelock = null;  
    }  
}  

在需要允许后台运行的时候调用wakeLock(),在希望停止的时候调用releaseWakeLock()

继续阅读 »

最近在弄一个安卓APP,需要每隔几秒钟上报一次GPS位置,但发现当手机休眠后(屏幕熄灭后)APP不再运行,因此也不能上报GPS位置。

借助安卓的WakeLock机制,我们可以实现让APP在后台运行。实现代码如下:


var g_wakelock = null;  
//允许程序后台运行,以持续获取GPS位置  
function wakeLock() {  
    //Android  
    var main = plus.android.runtimeMainActivity();  
    var Context = plus.android.importClass("android.content.Context");  
    var PowerManager = plus.android.importClass("android.os.PowerManager");  
    var pm = main.getSystemService(Context.POWER_SERVICE);  
    g_wakelock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "ANY_NAME");  
    g_wakelock.acquire();  
}  

//结束程序后台运行  
function releaseWakeLock () {  
    if(g_wakelock != null && g_wakelock.isHeld()) {  
        g_wakelock.release();  
        g_wakelock = null;  
    }  
}  

在需要允许后台运行的时候调用wakeLock(),在希望停止的时候调用releaseWakeLock()

收起阅读 »