HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

软件写多代码变卡屏了,大家有没有这个情况

HBuilder

如图哦,我就成叠起来就酱紫了。

如图哦,我就成叠起来就酱紫了。

Mui索引列表“indexed-list-select” 动态加载数据后搜索失效不准确的问题

mui 移动APP

我是第一次用,而且是边学边用,头大了2天,从用这个功能到动态加载,连看demo再搜度娘,终于实现了需要的功能!
做动态加载后,也遇到了搜索不能的问题,看网上解决了,就是加载完数据之后,再搞一下
window.indexedList = new mui.IndexedList(list);
能搜索了,但是搜索不准确,按拼音什么的搜索,各种找不到,准备放弃的,无意间看见了某大神的回复(页面关了,找不到大神的名字了……):

window.indexedList = new mui.IndexedList(list);
改为
mui("#list").indexedList().findElements();
哦了,搜索也准确了,模糊查询什么的都测试通过了!
希望对和我一样的新手有帮助!
好几个小时了,就一直翻来覆去的找原因!知道是这句的原因,但是不会写……
新手的悲哀……

继续阅读 »

我是第一次用,而且是边学边用,头大了2天,从用这个功能到动态加载,连看demo再搜度娘,终于实现了需要的功能!
做动态加载后,也遇到了搜索不能的问题,看网上解决了,就是加载完数据之后,再搞一下
window.indexedList = new mui.IndexedList(list);
能搜索了,但是搜索不准确,按拼音什么的搜索,各种找不到,准备放弃的,无意间看见了某大神的回复(页面关了,找不到大神的名字了……):

window.indexedList = new mui.IndexedList(list);
改为
mui("#list").indexedList().findElements();
哦了,搜索也准确了,模糊查询什么的都测试通过了!
希望对和我一样的新手有帮助!
好几个小时了,就一直翻来覆去的找原因!知道是这句的原因,但是不会写……
新手的悲哀……

收起阅读 »

为了在非5+的浏览器支持子页面功能, 准备造个fake plus的轮子

web app plus 多端发布

非5+页面,可以用Iframe 模拟多页面,这样可以在PC浏览器打开APP页面。
今天只是简单搞了一下plus.webview, 的create,hide,show
看看大家有没有兴趣,可以考虑发布一个完整的轮子,方便多端发布

var PlusWebview = {}  

    function PlusIframe(plus) {  
        function IframeView(id){  
            this.id = id  
        }  
        IframeView.fn = IframeView.prototype  
        IframeView.fn.create = function(opt){  
            var self = this  
            self.url = opt.url  
            self.style = opt.style  
            self.iframe = createIframe('.mui-content', opt)  
            //createIframe2(self.id)  
            return self  
        }  
        IframeView.fn.show = function(){  
            this.iframe.style.display = "block"  
        }  
        IframeView.fn.hide = function(){  
            this.iframe.style.display = "none"  
        }  
        IframeView.fn.evalJS = function(js){  
            var win = this.iframe.window || this.iframe.contentWindow;  
            win.eval(js)  
        }  

        plus.webview.getWebviewById = function(id){  
            return PlusWebview[id]  
        }  
        plus.webview.create = function(url, id, style) {  
            var v = new IframeView(id)  
            PlusWebview[id] = v.create({url: url, id: id, style: style} )  

            return v  
        }  
        plus.webview.show = function(id) {  
            //hide others  
            for (var _id in PlusWebview){  
                if(_id == id){  
                    PlusWebview[_id].show()  
                }else{  
                    PlusWebview[_id].hide()  
                }  

            }  
        }  
        plus.webview.hide = function(id) {  
            PlusWebview[id].hide()  
        }  
    }  
var createIframe = function(el, opt) {  
        var elContainer = document.querySelector(el);;  

        var wrapper = document.querySelector(".mui-iframe-wrapper");  
        if(!wrapper) {  
            // 创建wrapper 和 iframe  
            wrapper = document.createElement('div');  
            wrapper.className = 'mui-iframe-wrapper';  
            if(typeof opt.style.top !== 'string') {  
                opt.style.top = '0px';  
            }  
            if(typeof opt.style.bottom !== 'string') {  
                opt.style.bottom = '0px';  
            }  

            for(var i in opt.style) {  
                wrapper.style[i] = opt.style[i];  
            }  
            elContainer.appendChild(wrapper);  
        }  
        var iframe = document.createElement('iframe');  
        iframe.src = opt.url;  
        iframe.id = getIframeId(opt.id);  
        iframe.name = opt.id;  
        wrapper.appendChild(iframe);  
        return iframe  
    }
继续阅读 »

非5+页面,可以用Iframe 模拟多页面,这样可以在PC浏览器打开APP页面。
今天只是简单搞了一下plus.webview, 的create,hide,show
看看大家有没有兴趣,可以考虑发布一个完整的轮子,方便多端发布

var PlusWebview = {}  

    function PlusIframe(plus) {  
        function IframeView(id){  
            this.id = id  
        }  
        IframeView.fn = IframeView.prototype  
        IframeView.fn.create = function(opt){  
            var self = this  
            self.url = opt.url  
            self.style = opt.style  
            self.iframe = createIframe('.mui-content', opt)  
            //createIframe2(self.id)  
            return self  
        }  
        IframeView.fn.show = function(){  
            this.iframe.style.display = "block"  
        }  
        IframeView.fn.hide = function(){  
            this.iframe.style.display = "none"  
        }  
        IframeView.fn.evalJS = function(js){  
            var win = this.iframe.window || this.iframe.contentWindow;  
            win.eval(js)  
        }  

        plus.webview.getWebviewById = function(id){  
            return PlusWebview[id]  
        }  
        plus.webview.create = function(url, id, style) {  
            var v = new IframeView(id)  
            PlusWebview[id] = v.create({url: url, id: id, style: style} )  

            return v  
        }  
        plus.webview.show = function(id) {  
            //hide others  
            for (var _id in PlusWebview){  
                if(_id == id){  
                    PlusWebview[_id].show()  
                }else{  
                    PlusWebview[_id].hide()  
                }  

            }  
        }  
        plus.webview.hide = function(id) {  
            PlusWebview[id].hide()  
        }  
    }  
var createIframe = function(el, opt) {  
        var elContainer = document.querySelector(el);;  

        var wrapper = document.querySelector(".mui-iframe-wrapper");  
        if(!wrapper) {  
            // 创建wrapper 和 iframe  
            wrapper = document.createElement('div');  
            wrapper.className = 'mui-iframe-wrapper';  
            if(typeof opt.style.top !== 'string') {  
                opt.style.top = '0px';  
            }  
            if(typeof opt.style.bottom !== 'string') {  
                opt.style.bottom = '0px';  
            }  

            for(var i in opt.style) {  
                wrapper.style[i] = opt.style[i];  
            }  
            elContainer.appendChild(wrapper);  
        }  
        var iframe = document.createElement('iframe');  
        iframe.src = opt.url;  
        iframe.id = getIframeId(opt.id);  
        iframe.name = opt.id;  
        wrapper.appendChild(iframe);  
        return iframe  
    }
收起阅读 »

ADB连接局域网模拟器或无线连接手机,电视盒子,智能电视,解决在一台电脑调试程序资源不够用电脑卡的问题

adb

第一步:cmd [必须管理员身份]
netsh interface portproxy add v4tov4 listenaddress=192.168.1.105 listenport=9999 connectaddress=127.0.0.1 connectport=62001

说明:
192.168.1.105 为 局域网中的设备IP
127.0.0.1 为模拟器IP或安卓设备的IP
connectport=62001是夜神模拟器的端口,安卓原生设备为5555
listenport=9999 为将来要连接的端口号【可定义成别的】,此端口如果连接不上,做防火墙进站规则 TCP,9999,所有网络都允许

第二步
开发的电脑 cmd:
d:
cd D:\Program Files (x86)\HBuilder\tools
adb kill-server
adb connect 192.168.1.105:9999

找到hbuider tool下的adb工具:
连接到 192.168.1.105:9999 就可以了

此方法从原理上讲可以连接局域网中所有安卓设备。

连真机可以百度哈

继续阅读 »

第一步:cmd [必须管理员身份]
netsh interface portproxy add v4tov4 listenaddress=192.168.1.105 listenport=9999 connectaddress=127.0.0.1 connectport=62001

说明:
192.168.1.105 为 局域网中的设备IP
127.0.0.1 为模拟器IP或安卓设备的IP
connectport=62001是夜神模拟器的端口,安卓原生设备为5555
listenport=9999 为将来要连接的端口号【可定义成别的】,此端口如果连接不上,做防火墙进站规则 TCP,9999,所有网络都允许

第二步
开发的电脑 cmd:
d:
cd D:\Program Files (x86)\HBuilder\tools
adb kill-server
adb connect 192.168.1.105:9999

找到hbuider tool下的adb工具:
连接到 192.168.1.105:9999 就可以了

此方法从原理上讲可以连接局域网中所有安卓设备。

连真机可以百度哈

收起阅读 »

【教程】替换新版个推SDK教程

个推SDK

1.从个推官网下载最新版SDK


将GETUI_IOSSDK{1.6.2.0}/资源文件/GtSdkLib-noidfa/下

libGeTuiSdk-1.6.2.0-noidfa.a  
libGtExtensionSdk-1.1.0.a

2.更名为

libGeTuiSdk.a  
libGtExtensionSdk.a

3.将这两个文件(libGeTuiSdk.a、libGtExtensionSdk.a) 导入到5+SDK/Libs目录下替换掉原来的文件

4.将这两个文件移动到XCode Framewoks下

5.工程里需要导入一下几个系统库

 "libz.dylib",  
   "libsqlite3.0.dylib",  
   "AVFoundation.framework",  
   "CoreTelephony.framework",  
   "Security.framework",  
   "SystemConfiguration.framework",  
   "MobileCoreServices.framework",  
   "CoreLocation.framework",  
   "UserNotifications.framework"

引入系统库方式请参考此文档:http://ask.dcloud.net.cn/article/941

继续阅读 »

1.从个推官网下载最新版SDK


将GETUI_IOSSDK{1.6.2.0}/资源文件/GtSdkLib-noidfa/下

libGeTuiSdk-1.6.2.0-noidfa.a  
libGtExtensionSdk-1.1.0.a

2.更名为

libGeTuiSdk.a  
libGtExtensionSdk.a

3.将这两个文件(libGeTuiSdk.a、libGtExtensionSdk.a) 导入到5+SDK/Libs目录下替换掉原来的文件

4.将这两个文件移动到XCode Framewoks下

5.工程里需要导入一下几个系统库

 "libz.dylib",  
   "libsqlite3.0.dylib",  
   "AVFoundation.framework",  
   "CoreTelephony.framework",  
   "Security.framework",  
   "SystemConfiguration.framework",  
   "MobileCoreServices.framework",  
   "CoreLocation.framework",  
   "UserNotifications.framework"

引入系统库方式请参考此文档:http://ask.dcloud.net.cn/article/941

收起阅读 »

原生JS代码解决picker与软键盘冲突

软键盘 picker

//原生JS代码解决picker与软键盘冲突
//初始化picker
var picker = new mui.PopPicker();

//给picker设置列表参数
picker.setData([{value:'zz',text:'智子'}]);

/点击'#inputPicker'触发显示picker控件/
document.getElementById('inputPicker');.addEventListener('tap', function(event) {
pickerBlur(); //处理ios失去焦点的坑
picker.show(function(items) {
console.log(selectItems[0].text);//智子
console.log(selectItems[0].value);//zz
});
}, false);

/让当前页面所有input失去焦点,关闭软键盘/
function pickerBlur(){
var inputs = document.getElementsByTagName("input");
for (var i=0;i<inputs.length;i ) {
inputs[i].blur();
}
}
/当手机先触发软键盘,input未失去焦点,再点击picker控件,---此时呈现的BUG为软键盘和picker控件同时呈现,理想解决结果,先让软键盘消失,再呈现picker控件。/
//初始化获取当前手机可视高度
var windewHeight = document.body.clientHeight ;

//获取当前页面全部pickerBox
var poppicker = document.getElementsByClassName('mui-poppicker');

//获取其他类型pickerBox --- 作者在二级联动城市的时候使用的
var dtpicker = document.getElementsByClassName('mui-dtpicker');

//作者在网上查询到最神奇的软键盘监控方法!---软键盘打开的时候,会让浏览器的可视高度发生改变。
window.onresize = function(){ //window.onresize为浏览器宽度发生变化时触发的事件

// 那么,如果页面当前高度不等于初始化的高度时,意味着软键盘正在打开。
if(windewHeight !=document.body.clientHeight ){
// 当软键盘打开的时候将mui-poppicker隐藏
if(!poppicker.length) return
for (var i=0;i<poppicker.length;i++ ) {
poppicker[i].style.display="none";
}
if(!dtpicker.length) return
for (var i=0;i<dtpicker.length;i ) {
dtpicker[i].style.display="none";
}

// 相反的,当初始化的屏幕高度等于当前屏幕高度时,意味着软键盘完全收起。
else{
// 当软键盘收起0.15s后,再将mui-poppicker显示
setTimeout(function(){
if(!poppicker.length) return
for (var i=0;i<poppicker.length;i ) {
poppicker[i].style.display="inline";
}
if(!dtpicker.length) return
for (var i=0;i<dtpicker.length;i ) {
dtpicker[i].style.display="inline";
}
},150)
}
}

作者表示第一次写这类东西,有BUG欢迎指正

继续阅读 »

//原生JS代码解决picker与软键盘冲突
//初始化picker
var picker = new mui.PopPicker();

//给picker设置列表参数
picker.setData([{value:'zz',text:'智子'}]);

/点击'#inputPicker'触发显示picker控件/
document.getElementById('inputPicker');.addEventListener('tap', function(event) {
pickerBlur(); //处理ios失去焦点的坑
picker.show(function(items) {
console.log(selectItems[0].text);//智子
console.log(selectItems[0].value);//zz
});
}, false);

/让当前页面所有input失去焦点,关闭软键盘/
function pickerBlur(){
var inputs = document.getElementsByTagName("input");
for (var i=0;i<inputs.length;i ) {
inputs[i].blur();
}
}
/当手机先触发软键盘,input未失去焦点,再点击picker控件,---此时呈现的BUG为软键盘和picker控件同时呈现,理想解决结果,先让软键盘消失,再呈现picker控件。/
//初始化获取当前手机可视高度
var windewHeight = document.body.clientHeight ;

//获取当前页面全部pickerBox
var poppicker = document.getElementsByClassName('mui-poppicker');

//获取其他类型pickerBox --- 作者在二级联动城市的时候使用的
var dtpicker = document.getElementsByClassName('mui-dtpicker');

//作者在网上查询到最神奇的软键盘监控方法!---软键盘打开的时候,会让浏览器的可视高度发生改变。
window.onresize = function(){ //window.onresize为浏览器宽度发生变化时触发的事件

// 那么,如果页面当前高度不等于初始化的高度时,意味着软键盘正在打开。
if(windewHeight !=document.body.clientHeight ){
// 当软键盘打开的时候将mui-poppicker隐藏
if(!poppicker.length) return
for (var i=0;i<poppicker.length;i++ ) {
poppicker[i].style.display="none";
}
if(!dtpicker.length) return
for (var i=0;i<dtpicker.length;i ) {
dtpicker[i].style.display="none";
}

// 相反的,当初始化的屏幕高度等于当前屏幕高度时,意味着软键盘完全收起。
else{
// 当软键盘收起0.15s后,再将mui-poppicker显示
setTimeout(function(){
if(!poppicker.length) return
for (var i=0;i<poppicker.length;i ) {
poppicker[i].style.display="inline";
}
if(!dtpicker.length) return
for (var i=0;i<dtpicker.length;i ) {
dtpicker[i].style.display="inline";
}
},150)
}
}

作者表示第一次写这类东西,有BUG欢迎指正

收起阅读 »

【公告】APICloud被法院判决虚假宣传并赔偿20万元

APICloud 侵权

3.15是揭露造假者真面目的好时间,时隔2年,北京知识产权法院终于出了一审判决,认定apicloud公司虚假宣传,并判赔DCloud公司20万元。
20万元不多,重要的是大众终于可以看清apicloud公司的真面目了。

本案涉及的仅仅只是apicloud众多花式宣传中的2点:虚假的融资额、和并不能保护代码的所谓代码加密功能。
其实还有很多虚假宣传点,DCloud没有持续补充,那会让案子拖延更久。
但大众需要清楚,apicloud的各种花式宣传里,大多都不能信。

大多数315曝光企业,都有一个诚恳认错,真实悔改的声明。
但从今天apicloud官方公众号新声明来看,仍然充满了狡辩,这20万元的教训,并未让apicloud公司成为一家知错就改、真诚待人的公司。
我们对此表示遗憾。

不管是用户、开发者、媒体,大家渴望一个健康的产业环境,而不是每天需要花很多精力识别信息的真假。
希望所有从业公司,以此为鉴,停止虚假宣传,真诚对待你的用户和合作伙伴,把每天都当做3.15对待!

附法院判决书摘要。

继续阅读 »

3.15是揭露造假者真面目的好时间,时隔2年,北京知识产权法院终于出了一审判决,认定apicloud公司虚假宣传,并判赔DCloud公司20万元。
20万元不多,重要的是大众终于可以看清apicloud公司的真面目了。

本案涉及的仅仅只是apicloud众多花式宣传中的2点:虚假的融资额、和并不能保护代码的所谓代码加密功能。
其实还有很多虚假宣传点,DCloud没有持续补充,那会让案子拖延更久。
但大众需要清楚,apicloud的各种花式宣传里,大多都不能信。

大多数315曝光企业,都有一个诚恳认错,真实悔改的声明。
但从今天apicloud官方公众号新声明来看,仍然充满了狡辩,这20万元的教训,并未让apicloud公司成为一家知错就改、真诚待人的公司。
我们对此表示遗憾。

不管是用户、开发者、媒体,大家渴望一个健康的产业环境,而不是每天需要花很多精力识别信息的真假。
希望所有从业公司,以此为鉴,停止虚假宣传,真诚对待你的用户和合作伙伴,把每天都当做3.15对待!

附法院判决书摘要。

收起阅读 »

ios用openURL调起百度地图APP,真机调试可以调起,但打包之后不可以调起

百度地图 iOS

使用了encodeurl()解码,但是打包后百度地图还是无法调起。Android没有问题,真机调试的时候也可以调起百度地图APP

使用了encodeurl()解码,但是打包后百度地图还是无法调起。Android没有问题,真机调试的时候也可以调起百度地图APP

MUI的滚动条

scroll mui

刚才遇到一个问题就是页面加上了mui-scroll和mui-scroll-wrapper类了,如下:
<div class="mui-content mui-scroll-wrapper" id="pullrefresh">
<div class="mui-scroll">
........
</div>
</div>
但是不出现滚动条,究查原因,是没有设置滚动区域,设置方法如下
mui.scroll("#pullrefresh") //设置id为pullrefresh元素为滚动区域

继续阅读 »

刚才遇到一个问题就是页面加上了mui-scroll和mui-scroll-wrapper类了,如下:
<div class="mui-content mui-scroll-wrapper" id="pullrefresh">
<div class="mui-scroll">
........
</div>
</div>
但是不出现滚动条,究查原因,是没有设置滚动区域,设置方法如下
mui.scroll("#pullrefresh") //设置id为pullrefresh元素为滚动区域

收起阅读 »

IOS app 上架审核 与打包注意事项 经验分享

Appstore 审核 App打包

我的app提交时间为 3月11日 ,3月16日审核通过。也就是 apple禁止热更新之后提交的,并且我也用到了wgt 升级。

中间3月15日因为ipv6和注册页面的问题被拒绝一次,所以我来分享一下我的打包经验和上传需要注意的事项

1. 打包
无论你是否用到了 相册模块 这个都是必选勾选的, 否则你提交的二进制文件 无法通过机器审核,会报错
Missing Info.plist key- This app attempts to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSPhotoLibraryUsageDescription key with a string value explaining to the user how the app uses this data.
这一步是机器审核,2小时之内会有审核结果,通过 就进入下一个环节

https://img-cdn-tc.dcloud.net.cn/uploads/article/20170316//d037e49bfd992e4e516dc3f77b61f657.png

2. 功能注意
app要有注册功能,我开始是没有注册功能的,后来为了通过审核特地加了一个注册功能, 等审核通过我会通过服务端关闭注册。
注册页面 让用户填写的注册信息越少越好,可以让用户登录后完善
api接口访问要用域名 不要写ip地址, 然后域名解析加一条AAAA记录就可以了 ,最后 到墙外访问测试下自己的 api接口 ,能不能访问 延迟是否太高,因为审核人员在墙外
wgt升级 如果能不用尽量不要用,但如果像我一样必须要用 不止页面里,代码里也最好不要有更新升级等字样,升级提示和逻辑可以让服务端来提示,否则谁也不知道 这些字眼是否可以被机器扫描出来,审核期间记得关闭该功能

3.技巧
由于我app 页面复杂角色众多 ,所以我给提供的演示账号登录后, 审核人员看到的页面只是部分功能, 这样可以避免他弄不清楚你的业务逻辑和其他BUG导致的审核失败(我猜测)

就这,目前来看apple所说的 热更新 和wgt 不是一回事,可以继续使用

最后上张审核图

https://img-cdn-tc.dcloud.net.cn/uploads/article/20170316//ffd520af16952dff599144ae1260c637.png

继续阅读 »

我的app提交时间为 3月11日 ,3月16日审核通过。也就是 apple禁止热更新之后提交的,并且我也用到了wgt 升级。

中间3月15日因为ipv6和注册页面的问题被拒绝一次,所以我来分享一下我的打包经验和上传需要注意的事项

1. 打包
无论你是否用到了 相册模块 这个都是必选勾选的, 否则你提交的二进制文件 无法通过机器审核,会报错
Missing Info.plist key- This app attempts to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSPhotoLibraryUsageDescription key with a string value explaining to the user how the app uses this data.
这一步是机器审核,2小时之内会有审核结果,通过 就进入下一个环节

https://img-cdn-tc.dcloud.net.cn/uploads/article/20170316//d037e49bfd992e4e516dc3f77b61f657.png

2. 功能注意
app要有注册功能,我开始是没有注册功能的,后来为了通过审核特地加了一个注册功能, 等审核通过我会通过服务端关闭注册。
注册页面 让用户填写的注册信息越少越好,可以让用户登录后完善
api接口访问要用域名 不要写ip地址, 然后域名解析加一条AAAA记录就可以了 ,最后 到墙外访问测试下自己的 api接口 ,能不能访问 延迟是否太高,因为审核人员在墙外
wgt升级 如果能不用尽量不要用,但如果像我一样必须要用 不止页面里,代码里也最好不要有更新升级等字样,升级提示和逻辑可以让服务端来提示,否则谁也不知道 这些字眼是否可以被机器扫描出来,审核期间记得关闭该功能

3.技巧
由于我app 页面复杂角色众多 ,所以我给提供的演示账号登录后, 审核人员看到的页面只是部分功能, 这样可以避免他弄不清楚你的业务逻辑和其他BUG导致的审核失败(我猜测)

就这,目前来看apple所说的 热更新 和wgt 不是一回事,可以继续使用

最后上张审核图

https://img-cdn-tc.dcloud.net.cn/uploads/article/20170316//ffd520af16952dff599144ae1260c637.png

收起阅读 »

ios云端打包未越狱,成功了但不能安装到手机

iOS iOS打包

我打包成功了,但是用iTools安装不起来,求大神指点

我打包成功了,但是用iTools安装不起来,求大神指点

安卓APK和webAPP互调并传递多个参数分享

以下是webAPP启动安卓应用和获取安卓应用传递过来的参数

> webAPP启动安卓APK并传递参数

请看:

function startAndroidActivity(){
var Intent = plus.android.importClass("android.content.Intent");
var intent = new Intent(Intent.ACTION_VIEW);
var ComponentName = plus.android.importClass("android.content.ComponentName");
var comp = new ComponentName("你的安卓APK的Package,在AndroidManifest.xml里面,比如yy.com.testandriodapp", "你的安卓APK启动控制器,比如yy.com.testandriodapp.MainActivity");
intent.setComponent(comp);
intent.setAction("android.intent.action.MAIN");
intent.putExtra("参数一key", "参数一value");
intent.putExtra("参数一key", "参数二value");
var main = plus.android.runtimeMainActivity();
main.startActivity(intent);
}

> 接收安卓数据

请看:

        document.addEventListener('plusready', function() {  
            checkArguments();  
        });  
        // 判断启动方式  
        function checkArguments() {  
            Intent = plus.android.importClass("android.content.Intent");  
            // 程序全局环境对象,内部自动导入Activity类  
            mainActivity = plus.android.runtimeMainActivity();  
            intent = mainActivity.getIntent();//获取启动intent  
            name = intent.getStringExtra("name");//通过intent获取参数  
            birthday = intent.getStringExtra("birthday");  
            alert(name);  
            alert(birthday);  
        }  
        // 处理从后台恢复  
        document.addEventListener('newintent', function() {  
            checkArguments();  
        }, false);  

以下是安卓应用获取webAPP传递过来的参数和启动webAPP

> 获取webAPP传递过来的参数

请看:

Intent intent1 = getIntent();
Bundle bundle = intent1.getExtras();
if (bundle != null) {
String name = bundle.getString("name");
if (name != null) {
Toast.makeText(getApplicationContext(), "name:" + name, Toast.LENGTH_SHORT).show();
}
String birthday = bundle.getString("birthday");
if (birthday != null) {
Toast.makeText(getApplicationContext(), "birthday:" + birthday, Toast.LENGTH_SHORT).show();
}
}

> 安卓应用启动webAPP

请看:

Intent intent = new Intent();
// 这里如果intent为空,就说名没有安装要跳转的应用嘛
ComponentName componentName = new ComponentName("你在mainfest的->代码视图->google->packagename设置的包名,比如:io.dcloud.Test","这个参数是固定的,dcloud默认都会生成这个activity名字:io.dcloud.PandoraEntryActivity");
if (intent != null) {
// 这里跟Activity传递参数一样的嘛,不要担心怎么传递参数,还有接收参数也是跟Activity和Activity传参数一样
intent.setComponent(componentName);
intent.putExtra("name", "Liu xiang");
intent.putExtra("birthday", "1983-7-13");
startActivity(intent);
} else {
// 没有安装要跳转的app应用,提醒一下
Toast.makeText(getApplicationContext(), "哟,赶紧下载安装这个APP吧", Toast.LENGTH_LONG).show();
}

over -- 由于论坛自身格式问题,我一直没办法展示很好,我把他整理在博客里了:阿里学院

继续阅读 »

以下是webAPP启动安卓应用和获取安卓应用传递过来的参数

> webAPP启动安卓APK并传递参数

请看:

function startAndroidActivity(){
var Intent = plus.android.importClass("android.content.Intent");
var intent = new Intent(Intent.ACTION_VIEW);
var ComponentName = plus.android.importClass("android.content.ComponentName");
var comp = new ComponentName("你的安卓APK的Package,在AndroidManifest.xml里面,比如yy.com.testandriodapp", "你的安卓APK启动控制器,比如yy.com.testandriodapp.MainActivity");
intent.setComponent(comp);
intent.setAction("android.intent.action.MAIN");
intent.putExtra("参数一key", "参数一value");
intent.putExtra("参数一key", "参数二value");
var main = plus.android.runtimeMainActivity();
main.startActivity(intent);
}

> 接收安卓数据

请看:

        document.addEventListener('plusready', function() {  
            checkArguments();  
        });  
        // 判断启动方式  
        function checkArguments() {  
            Intent = plus.android.importClass("android.content.Intent");  
            // 程序全局环境对象,内部自动导入Activity类  
            mainActivity = plus.android.runtimeMainActivity();  
            intent = mainActivity.getIntent();//获取启动intent  
            name = intent.getStringExtra("name");//通过intent获取参数  
            birthday = intent.getStringExtra("birthday");  
            alert(name);  
            alert(birthday);  
        }  
        // 处理从后台恢复  
        document.addEventListener('newintent', function() {  
            checkArguments();  
        }, false);  

以下是安卓应用获取webAPP传递过来的参数和启动webAPP

> 获取webAPP传递过来的参数

请看:

Intent intent1 = getIntent();
Bundle bundle = intent1.getExtras();
if (bundle != null) {
String name = bundle.getString("name");
if (name != null) {
Toast.makeText(getApplicationContext(), "name:" + name, Toast.LENGTH_SHORT).show();
}
String birthday = bundle.getString("birthday");
if (birthday != null) {
Toast.makeText(getApplicationContext(), "birthday:" + birthday, Toast.LENGTH_SHORT).show();
}
}

> 安卓应用启动webAPP

请看:

Intent intent = new Intent();
// 这里如果intent为空,就说名没有安装要跳转的应用嘛
ComponentName componentName = new ComponentName("你在mainfest的->代码视图->google->packagename设置的包名,比如:io.dcloud.Test","这个参数是固定的,dcloud默认都会生成这个activity名字:io.dcloud.PandoraEntryActivity");
if (intent != null) {
// 这里跟Activity传递参数一样的嘛,不要担心怎么传递参数,还有接收参数也是跟Activity和Activity传参数一样
intent.setComponent(componentName);
intent.putExtra("name", "Liu xiang");
intent.putExtra("birthday", "1983-7-13");
startActivity(intent);
} else {
// 没有安装要跳转的app应用,提醒一下
Toast.makeText(getApplicationContext(), "哟,赶紧下载安装这个APP吧", Toast.LENGTH_LONG).show();
}

over -- 由于论坛自身格式问题,我一直没办法展示很好,我把他整理在博客里了:阿里学院

收起阅读 »