h5+ app内点击按钮实现复制功能 实现方法
在项目中由于要实现点击按钮复制功能,
我用的是H5+APP,实现代码如下(包括安卓+IOS):
/**
* //参数copy是要复制的文本内容
* tip 复制成功后的提示语,可空
*/
function copy_fun(copy,tips) {
if(!tips){
tips="已成功复制到剪贴板";
}
loading();
mui.plusReady(function() {
//判断是安卓还是ios
if (mui.os.ios) {
//ios
var UIPasteboard = plus.ios.importClass("UIPasteboard");
var generalPasteboard = UIPasteboard.generalPasteboard();
//设置/获取文本内容:
generalPasteboard.plusCallMethod({
setValue: copy,
forPasteboardType: "public.utf8-plain-text"
});
generalPasteboard.plusCallMethod({
valueForPasteboardType: "public.utf8-plain-text"
});
mui.toast(tips);
loading_close();
} else {
//安卓
var context = plus.android.importClass("android.content.Context");
var main = plus.android.runtimeMainActivity();
var clip = main.getSystemService(context.CLIPBOARD_SERVICE);
plus.android.invoke(clip, "setText", copy);
mui.toast(tips);
loading_close();
}
});
}
有不明白的可留言,技术交流QQ 363384521,平时较忙,有空会回复大家
在项目中由于要实现点击按钮复制功能,
我用的是H5+APP,实现代码如下(包括安卓+IOS):
/**
* //参数copy是要复制的文本内容
* tip 复制成功后的提示语,可空
*/
function copy_fun(copy,tips) {
if(!tips){
tips="已成功复制到剪贴板";
}
loading();
mui.plusReady(function() {
//判断是安卓还是ios
if (mui.os.ios) {
//ios
var UIPasteboard = plus.ios.importClass("UIPasteboard");
var generalPasteboard = UIPasteboard.generalPasteboard();
//设置/获取文本内容:
generalPasteboard.plusCallMethod({
setValue: copy,
forPasteboardType: "public.utf8-plain-text"
});
generalPasteboard.plusCallMethod({
valueForPasteboardType: "public.utf8-plain-text"
});
mui.toast(tips);
loading_close();
} else {
//安卓
var context = plus.android.importClass("android.content.Context");
var main = plus.android.runtimeMainActivity();
var clip = main.getSystemService(context.CLIPBOARD_SERVICE);
plus.android.invoke(clip, "setText", copy);
mui.toast(tips);
loading_close();
}
});
}
有不明白的可留言,技术交流QQ 363384521,平时较忙,有空会回复大家
收起阅读 »uni-AD广告联盟配置
> 此文档将不再维护,请移步新文档:https://nativesupport.dcloud.net.cn
配置离线打包广告支持
配置离线广告之前,需先在dcloud广告联盟申请账号。
AndroidManifest.xml文件中添加如下节点到节点中,并配置替换其中5+应用appid和广告联盟会员adid的值,因为涉及到开屏广告业务,项目工程必须以io.dcloud.PandoraEntry作为5+应用的入口Activity。该activity已包含在lib.5plus.base-release中,开发者无需实现。
<meta-data android:name="DCLOUD_AD_ID" android:value="广告标识"/>
<meta-data android:name="DCLOUD_AD_SPLASH" android:value="true"/><!--如果不开启开屏广告则不设置此字段或者值设置为false-->
<meta-data android:name="DCLOUD_STREAMAPP_CHANNEL" android:value="包名|应用标识|广告标识|渠道,如io.dcloud.appid|appid|adid|google" /><!--为了保证广告统计的有效性,请正确设置此值-->
- 包名:对应Android项目中build.gradle中的applicationId,如io.dcloud.HBuilder
- 应用标识:对应对应5+或uni-app项目manifest.json中appid
- 广告标识:DCloud的广告标识,开通广告后可在dev.dcloud.net.cn获取,如果没有开通广告,设置值为空即可
- 渠道:渠道包制作指南
360聚合广告
库文件配置
将以下文件放入工程的libs目录下
路径 | 360聚合记错模块配置 | 360聚合穿山甲模块配置 | 360聚合广点通模块配置 |
---|---|---|---|
SDK/libs | ads-release.aar、ads-360-release.aar、torch-adcore-5.12.3140.aar | open_ad_sdk.aar、torch-plcsjsdk-5.12.3140.aar | torch-plgdtapi-5.12.3140.aar、torch-plgdtsdk-5.12.3140.aar |
如果没有在360聚合平台申请穿山甲和广点通的广告,则对应的aar不需要添加
dcloud_properties.xml配置
features 节点添加
<feature name="Ad" value="io.dcloud.feature.ad.AdFlowFeatureImpl">
<module name="360" value="io.dcloud.feature.ad.juhe360.AD360Module"/>
</feature>
穿山甲广告
库文件配置
将以下文件放入工程的libs目录下
路径 | 文件名 |
---|---|
SDK/libs | ads-release.aar、ads-csj-release.aar、open_ad_sdk.aar |
Androidmanifest.xml配置
application节点下添加
将“${applicationId}”替换成应用的包名
<provider
android:name="com.bytedance.sdk.openadsdk.TTFileProvider"
android:authorities="${applicationId}.TTFileProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"
tools:replace="android:resource"/>
</provider>
<provider
android:name="com.bytedance.sdk.openadsdk.multipro.TTMultiProvider"
android:authorities="${applicationId}.TTMultiProvider"
android:exported="false" />
dcloud_properties.xml配置
features 节点添加
<feature name="Ad" value="io.dcloud.feature.ad.AdFlowFeatureImpl">
<module name="csj" value="io.dcloud.feature.ad.csj.ADCsjModule"/>
</feature>
广点通广告
库文件配置
将以下文件放入工程的libs目录下
路径 | 文件名 |
---|---|
SDK/libs | ads-release.aar、ads-gdt-release.aar、GDTSDK.unionNormal.4.110.980.aar |
Androidmanifest.xml配置
application节点下添加
将“${applicationId}”替换成应用的包名
<provider
android:name="io.dcloud.gdt.GdtFileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/gdt_file_path"
tools:replace="android:resource"/>
</provider>
dcloud_properties.xml配置
features 节点添加
<feature name="Ad" value="io.dcloud.feature.ad.AdFlowFeatureImpl">
<module name="gdt" value="io.dcloud.feature.ad.gdt.ADGdtModule"/>
</feature>
> 此文档将不再维护,请移步新文档:https://nativesupport.dcloud.net.cn
配置离线打包广告支持
配置离线广告之前,需先在dcloud广告联盟申请账号。
AndroidManifest.xml文件中添加如下节点到节点中,并配置替换其中5+应用appid和广告联盟会员adid的值,因为涉及到开屏广告业务,项目工程必须以io.dcloud.PandoraEntry作为5+应用的入口Activity。该activity已包含在lib.5plus.base-release中,开发者无需实现。
<meta-data android:name="DCLOUD_AD_ID" android:value="广告标识"/>
<meta-data android:name="DCLOUD_AD_SPLASH" android:value="true"/><!--如果不开启开屏广告则不设置此字段或者值设置为false-->
<meta-data android:name="DCLOUD_STREAMAPP_CHANNEL" android:value="包名|应用标识|广告标识|渠道,如io.dcloud.appid|appid|adid|google" /><!--为了保证广告统计的有效性,请正确设置此值-->
- 包名:对应Android项目中build.gradle中的applicationId,如io.dcloud.HBuilder
- 应用标识:对应对应5+或uni-app项目manifest.json中appid
- 广告标识:DCloud的广告标识,开通广告后可在dev.dcloud.net.cn获取,如果没有开通广告,设置值为空即可
- 渠道:渠道包制作指南
360聚合广告
库文件配置
将以下文件放入工程的libs目录下
路径 | 360聚合记错模块配置 | 360聚合穿山甲模块配置 | 360聚合广点通模块配置 |
---|---|---|---|
SDK/libs | ads-release.aar、ads-360-release.aar、torch-adcore-5.12.3140.aar | open_ad_sdk.aar、torch-plcsjsdk-5.12.3140.aar | torch-plgdtapi-5.12.3140.aar、torch-plgdtsdk-5.12.3140.aar |
如果没有在360聚合平台申请穿山甲和广点通的广告,则对应的aar不需要添加
dcloud_properties.xml配置
features 节点添加
<feature name="Ad" value="io.dcloud.feature.ad.AdFlowFeatureImpl">
<module name="360" value="io.dcloud.feature.ad.juhe360.AD360Module"/>
</feature>
穿山甲广告
库文件配置
将以下文件放入工程的libs目录下
路径 | 文件名 |
---|---|
SDK/libs | ads-release.aar、ads-csj-release.aar、open_ad_sdk.aar |
Androidmanifest.xml配置
application节点下添加
将“${applicationId}”替换成应用的包名
<provider
android:name="com.bytedance.sdk.openadsdk.TTFileProvider"
android:authorities="${applicationId}.TTFileProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"
tools:replace="android:resource"/>
</provider>
<provider
android:name="com.bytedance.sdk.openadsdk.multipro.TTMultiProvider"
android:authorities="${applicationId}.TTMultiProvider"
android:exported="false" />
dcloud_properties.xml配置
features 节点添加
<feature name="Ad" value="io.dcloud.feature.ad.AdFlowFeatureImpl">
<module name="csj" value="io.dcloud.feature.ad.csj.ADCsjModule"/>
</feature>
广点通广告
库文件配置
将以下文件放入工程的libs目录下
路径 | 文件名 |
---|---|
SDK/libs | ads-release.aar、ads-gdt-release.aar、GDTSDK.unionNormal.4.110.980.aar |
Androidmanifest.xml配置
application节点下添加
将“${applicationId}”替换成应用的包名
<provider
android:name="io.dcloud.gdt.GdtFileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/gdt_file_path"
tools:replace="android:resource"/>
</provider>
dcloud_properties.xml配置
features 节点添加
<feature name="Ad" value="io.dcloud.feature.ad.AdFlowFeatureImpl">
<module name="gdt" value="io.dcloud.feature.ad.gdt.ADGdtModule"/>
</feature>
收起阅读 »
uni-app h5 使用微信JSSDK的方式
综合各方经验及文档总结了以下我的使用方法,希望对有需要的同学有些帮助
第一步:npm install jweixin-module --save
第二步:common文件夹新建js文件,我这里命名jwx.js
jwx.js 文件内容
var jweixin = require('jweixin-module');
export default {
//判断是否在微信中
isWechat: function() {
var ua = window.navigator.userAgent.toLowerCase();
if (ua.match(/micromessenger/i) == 'micromessenger') {
//console.log('是微信客户端')
return true;
} else {
//console.log('不是微信客户端')
return false;
}
},
initJssdk:function(callback){
var uri = encodeURIComponent(window.location.href.split('#')[0]);//获取当前url然后传递给后台获取授权和签名信息
uni.request({
url:'';//你的接口地址
data:{
url:uri
},
success:(res)=>{
//返回需要的参数appId,timestamp,noncestr,signature等
//注入config权限配置
jweixin.config({
debug: false,
appId: res.data.signPackage.appId,
timestamp: res.data.signPackage.timestamp,
nonceStr: res.data.signPackage.nonceStr,
signature: res.data.signPackage.signature,
jsApiList: [//这里是需要用到的接口名称
'checkJsApi',//判断当前客户端版本是否支持指定JS接口
'onMenuShareAppMessage',//分享接口
'getLocation',//获取位置
'openLocation',//打开位置
'scanQRCode',//扫一扫接口
'chooseWXPay',//微信支付
'chooseImage',//拍照或从手机相册中选图接口
'previewImage',//预览图片接口
'uploadImage'//上传图片
]
});
if (callback) {
callback(res.data);
}
}
})
},
//在需要定位页面调用
getlocation: function(callback) {
if (!this.isWechat()) {
//console.log('不是微信客户端')
return;
}
this.initJssdk(function(res) {
jweixin.ready(function() {
jweixin.getLocation({
type: 'gcj02', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
success: function (res) {
// console.log(res);
callback(res)
},
fail:function(res){
console.log(res)
},
// complete:function(res){
// console.log(res)
// }
});
});
});
},
openlocation:function(data,callback){//打开位置
if (!this.isWechat()) {
//console.log('不是微信客户端')
return;
}
this.initJssdk(function(res) {
jweixin.ready(function() {
jweixin.openLocation({//根据传入的坐标打开地图
latitude:data.latitude,
longitude:data.longitude
});
});
});
},
chooseImage:function(callback){//选择图片
if (!this.isWechat()) {
//console.log('不是微信客户端')
return;
}
//console.log(data);
this.initJssdk(function(res) {
jweixin.ready(function() {
jweixin.chooseImage({
count:1,
sizeType:['compressed'],
sourceType:['album'],
success:function(rs){
callback(rs)
}
})
});
});
},
//微信支付
wxpay: function(data,callback) {
if (!this.isWechat()) {
//console.log('不是微信客户端')
return;
}
this.initJssdk(function(res) {
jweixin.ready(function() {
jweixin.chooseWXPay({
timestamp: data.timestamp, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
nonceStr: data.nonceStr, // 支付签名随机串,不长于 32 位
package: data.package, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*)
signType: data.signType, // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
paySign: data.paysign, // 支付签名
success: function (res) {
// console.log(res);
callback(res)
},
fail:function(res){
callback(res)
},
// complete:function(res){
// console.log(res)
// }
});
});
});
}
}
第三步:main.js 文件里引入
import jwx from '@/common/jwx'
Vue.prototype.$jwx = jwx
第四步:在需要的页面直接用this.$jwx.xxx(接口名称)调用即可
if (this.$jwx && this.$jwx.isWechat()) {//检查是否是微信环境
this.$jwx.getlocation(function (res) {//获取位置
console.log(res);
//拿到返回数据自行处理
});
//调用支付前应先处理订单信息,然后根据订单信息返回支付需要的timestamp,noncestr,package,signType,paySign等参数
//下面的rs.data为后台处理完订单后返回的;我的业务模式为用户点击提交订单,请求后台添加订单接口,订单添加完成后,后台根据订单id,订单金额等信息调用微信签名拿到timestamp,noncestr等参数返回;
this.$jwx.wxpay({//调用支付,
'timestamp':rs.data.timeStamp,
'nonceStr':rs.data.nonceStr,
'package':rs.data.package,
'signType':rs.data.signType,
'paysign':rs.data.paySign
},function (r) {
if (r.errMsg == 'chooseWXPay:ok') {
uni.redirectTo({//支付成功转到支付成功提示页面
url: '/pages/paySuccess
})
}else{
that.$msg('支付失败!');
}
});
}
综合各方经验及文档总结了以下我的使用方法,希望对有需要的同学有些帮助
第一步:npm install jweixin-module --save
第二步:common文件夹新建js文件,我这里命名jwx.js
jwx.js 文件内容
var jweixin = require('jweixin-module');
export default {
//判断是否在微信中
isWechat: function() {
var ua = window.navigator.userAgent.toLowerCase();
if (ua.match(/micromessenger/i) == 'micromessenger') {
//console.log('是微信客户端')
return true;
} else {
//console.log('不是微信客户端')
return false;
}
},
initJssdk:function(callback){
var uri = encodeURIComponent(window.location.href.split('#')[0]);//获取当前url然后传递给后台获取授权和签名信息
uni.request({
url:'';//你的接口地址
data:{
url:uri
},
success:(res)=>{
//返回需要的参数appId,timestamp,noncestr,signature等
//注入config权限配置
jweixin.config({
debug: false,
appId: res.data.signPackage.appId,
timestamp: res.data.signPackage.timestamp,
nonceStr: res.data.signPackage.nonceStr,
signature: res.data.signPackage.signature,
jsApiList: [//这里是需要用到的接口名称
'checkJsApi',//判断当前客户端版本是否支持指定JS接口
'onMenuShareAppMessage',//分享接口
'getLocation',//获取位置
'openLocation',//打开位置
'scanQRCode',//扫一扫接口
'chooseWXPay',//微信支付
'chooseImage',//拍照或从手机相册中选图接口
'previewImage',//预览图片接口
'uploadImage'//上传图片
]
});
if (callback) {
callback(res.data);
}
}
})
},
//在需要定位页面调用
getlocation: function(callback) {
if (!this.isWechat()) {
//console.log('不是微信客户端')
return;
}
this.initJssdk(function(res) {
jweixin.ready(function() {
jweixin.getLocation({
type: 'gcj02', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
success: function (res) {
// console.log(res);
callback(res)
},
fail:function(res){
console.log(res)
},
// complete:function(res){
// console.log(res)
// }
});
});
});
},
openlocation:function(data,callback){//打开位置
if (!this.isWechat()) {
//console.log('不是微信客户端')
return;
}
this.initJssdk(function(res) {
jweixin.ready(function() {
jweixin.openLocation({//根据传入的坐标打开地图
latitude:data.latitude,
longitude:data.longitude
});
});
});
},
chooseImage:function(callback){//选择图片
if (!this.isWechat()) {
//console.log('不是微信客户端')
return;
}
//console.log(data);
this.initJssdk(function(res) {
jweixin.ready(function() {
jweixin.chooseImage({
count:1,
sizeType:['compressed'],
sourceType:['album'],
success:function(rs){
callback(rs)
}
})
});
});
},
//微信支付
wxpay: function(data,callback) {
if (!this.isWechat()) {
//console.log('不是微信客户端')
return;
}
this.initJssdk(function(res) {
jweixin.ready(function() {
jweixin.chooseWXPay({
timestamp: data.timestamp, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
nonceStr: data.nonceStr, // 支付签名随机串,不长于 32 位
package: data.package, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*)
signType: data.signType, // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
paySign: data.paysign, // 支付签名
success: function (res) {
// console.log(res);
callback(res)
},
fail:function(res){
callback(res)
},
// complete:function(res){
// console.log(res)
// }
});
});
});
}
}
第三步:main.js 文件里引入
import jwx from '@/common/jwx'
Vue.prototype.$jwx = jwx
第四步:在需要的页面直接用this.$jwx.xxx(接口名称)调用即可
if (this.$jwx && this.$jwx.isWechat()) {//检查是否是微信环境
this.$jwx.getlocation(function (res) {//获取位置
console.log(res);
//拿到返回数据自行处理
});
//调用支付前应先处理订单信息,然后根据订单信息返回支付需要的timestamp,noncestr,package,signType,paySign等参数
//下面的rs.data为后台处理完订单后返回的;我的业务模式为用户点击提交订单,请求后台添加订单接口,订单添加完成后,后台根据订单id,订单金额等信息调用微信签名拿到timestamp,noncestr等参数返回;
this.$jwx.wxpay({//调用支付,
'timestamp':rs.data.timeStamp,
'nonceStr':rs.data.nonceStr,
'package':rs.data.package,
'signType':rs.data.signType,
'paysign':rs.data.paySign
},function (r) {
if (r.errMsg == 'chooseWXPay:ok') {
uni.redirectTo({//支付成功转到支付成功提示页面
url: '/pages/paySuccess
})
}else{
that.$msg('支付失败!');
}
});
}
收起阅读 »
uni-app map组件polyline 和markers 动态增加重绘问题
uni-app map组件使用polyline 和markers 动态增加多个,会发现一操作polyline 和markers对象都会重新渲染界面。
比例我先定义this.polyline = []
后面我增加this.polyline.push(....)画一条线,二条线
你会发觉每一次操作this.polyline对象都会新渲染界面,使得有很明显的界面闪动问题。
附视频(闪动问题)
uni-app map组件使用polyline 和markers 动态增加多个,会发现一操作polyline 和markers对象都会重新渲染界面。
比例我先定义this.polyline = []
后面我增加this.polyline.push(....)画一条线,二条线
你会发觉每一次操作this.polyline对象都会新渲染界面,使得有很明显的界面闪动问题。
附视频(闪动问题)
收起阅读 »5+ API plus.sqlite.executeSql() 支持执行多条sql语句
说明
因为Android原生数据库不支持以分号分割的多条sql语句,所以当执行多条语句时,只会执行第一条sql语句。
而在iOS平台原生数据库则支持。
为解决部分用户的需求,兼容平台差异性。
HBuilderX2.5.3+版本 plus.sqlite.executeSql() 将兼容支持以数组形式传入的多条数组
具体API参考如下:
void plus.sqlite.executeSql(options);
参数:
options参数为json类型,包含以下属性:
- name: ( String ) 必选 数据库名称
- sql: ( String|Array ) 必选 需要执行的SQL语句或数组
- success: ( SQLiteSuccessCallback ) 可选 执行SQL语句成功回调函数
- fail: ( SQLiteFailCallback ) 可选 执行SQL语句失败回调函数
示例:
function executeSQL(){
plus.sqlite.executeSql({
name: 'first',
sql: ['create table if not exists table_A("where" CHAR(110),"location" CHAR(100),"age" INT(11))','create table if not exists table_B("where" CHAR(110),"location" CHAR(100),"age" INT(11));'],
success: function(e){
console.log('executeSql success!');
plus.sqlite.executeSql({
name: 'first',
sql: ["insert into table_B values('北京','安乐林:',11)","insert into table_B values('天津','风火轮',22);"],
success: function(e){
console.log('executeSql success!');
},
fail: function(e){
console.log('executeSql failed: '+JSON.stringify(e));
}
});
},
fail: function(e){
console.log('executeSql failed: '+JSON.stringify(e));
}
});
}
具体规范可参考:https://www.html5plus.org/doc/zh_cn/sqlite.html#plus.sqlite.executeSql
说明
因为Android原生数据库不支持以分号分割的多条sql语句,所以当执行多条语句时,只会执行第一条sql语句。
而在iOS平台原生数据库则支持。
为解决部分用户的需求,兼容平台差异性。
HBuilderX2.5.3+版本 plus.sqlite.executeSql() 将兼容支持以数组形式传入的多条数组
具体API参考如下:
void plus.sqlite.executeSql(options);
参数:
options参数为json类型,包含以下属性:
- name: ( String ) 必选 数据库名称
- sql: ( String|Array ) 必选 需要执行的SQL语句或数组
- success: ( SQLiteSuccessCallback ) 可选 执行SQL语句成功回调函数
- fail: ( SQLiteFailCallback ) 可选 执行SQL语句失败回调函数
示例:
function executeSQL(){
plus.sqlite.executeSql({
name: 'first',
sql: ['create table if not exists table_A("where" CHAR(110),"location" CHAR(100),"age" INT(11))','create table if not exists table_B("where" CHAR(110),"location" CHAR(100),"age" INT(11));'],
success: function(e){
console.log('executeSql success!');
plus.sqlite.executeSql({
name: 'first',
sql: ["insert into table_B values('北京','安乐林:',11)","insert into table_B values('天津','风火轮',22);"],
success: function(e){
console.log('executeSql success!');
},
fail: function(e){
console.log('executeSql failed: '+JSON.stringify(e));
}
});
},
fail: function(e){
console.log('executeSql failed: '+JSON.stringify(e));
}
});
}
具体规范可参考:https://www.html5plus.org/doc/zh_cn/sqlite.html#plus.sqlite.executeSql
收起阅读 »touch时间不触发
<cover-view class="video-touch-view" v-if="isVideoFullScreen" :style="{width:${fullControlsWidth}px
,height:${fullControlsHeigt}px
}"
@touchstart="videoTouchStart" @touchmove="videoTouchMove" @touchend="videoTouchEnd"></cover-view>
在nvue页面里的视频播放器覆盖层,把HBuilderX升级到2.5.1.20200103后touch事件在安卓手机上都不触发了,但是ios是可以的,而且升级之前安卓也是正常的。自从升级了之后一大推坑,各种问题,郁闷死了
<cover-view class="video-touch-view" v-if="isVideoFullScreen" :style="{width:${fullControlsWidth}px
,height:${fullControlsHeigt}px
}"
@touchstart="videoTouchStart" @touchmove="videoTouchMove" @touchend="videoTouchEnd"></cover-view>
在nvue页面里的视频播放器覆盖层,把HBuilderX升级到2.5.1.20200103后touch事件在安卓手机上都不触发了,但是ios是可以的,而且升级之前安卓也是正常的。自从升级了之后一大推坑,各种问题,郁闷死了
收起阅读 »uni-app原生打包启动 高德APP规划点到点路线
android原生插件,创建module
public class AmapWXModule extends WXSDKEngine.DestroyableModule {
@JSMethod(uiThread = true)
public void startNaviGao(JSONObject options) {
if (mWXSDKInstance.getContext() instanceof Activity) {
StringBuffer stringBuffer = new StringBuffer("amapuri://route/plan/");
String sid = options.getString("sid");
String slat = options.getString("slat");
String slon = options.getString("slon");
String sname = options.getString("sname");
String did = options.getString("did");
String dlat = options.getString("dlat");
String dlon = options.getString("dlon");
String dname = options.getString("dname");
String dev = options.getString("dev");
String t = options.getString("t");
stringBuffer.append("?sid=").append(sid)
.append("&slat=").append(slat)
.append("&slon=").append(slon)
.append("&sname=").append(sname)
.append("&did=").append(did)
.append("&dlat=").append(dlat)
.append("&dlon=").append(dlon)
.append("&dname=").append(dname)
.append("&dev=").append(dev)
.append("&t=").append(t);
Intent intent = new Intent("android.intent.action.VIEW", android.net.Uri.parse(stringBuffer.toString()));
intent.setPackage("com.autonavi.minimap");
mWXSDKInstance.getContext().startActivity(intent);
}
}
@Override
public void destroy() {
}
}
dcloud_uniplugins.json添加插件
{
"type": "module",
"name": "Amap",
"class": "com.demo.AmapWXModule"
}
uniapp使用
const modal = uni.requireNativePlugin('modal');
const amap = uni.requireNativePlugin('Amap');
methods: {
AppAmap()
{
amap.startNaviGao({sid:'A',slat:'36.7025585',slon:'116.8766784700',sname:'开始'
,did:'B',dlat:'36.6494152900',dlon:'117.1224975600',dname:'结束',dev:'1',t:'0'});
},
}
android原生项目app下的build.gradle中添加新增的 module
// 添加uni-app插件
implementation project(':amaplib')
android原生插件,创建module
public class AmapWXModule extends WXSDKEngine.DestroyableModule {
@JSMethod(uiThread = true)
public void startNaviGao(JSONObject options) {
if (mWXSDKInstance.getContext() instanceof Activity) {
StringBuffer stringBuffer = new StringBuffer("amapuri://route/plan/");
String sid = options.getString("sid");
String slat = options.getString("slat");
String slon = options.getString("slon");
String sname = options.getString("sname");
String did = options.getString("did");
String dlat = options.getString("dlat");
String dlon = options.getString("dlon");
String dname = options.getString("dname");
String dev = options.getString("dev");
String t = options.getString("t");
stringBuffer.append("?sid=").append(sid)
.append("&slat=").append(slat)
.append("&slon=").append(slon)
.append("&sname=").append(sname)
.append("&did=").append(did)
.append("&dlat=").append(dlat)
.append("&dlon=").append(dlon)
.append("&dname=").append(dname)
.append("&dev=").append(dev)
.append("&t=").append(t);
Intent intent = new Intent("android.intent.action.VIEW", android.net.Uri.parse(stringBuffer.toString()));
intent.setPackage("com.autonavi.minimap");
mWXSDKInstance.getContext().startActivity(intent);
}
}
@Override
public void destroy() {
}
}
dcloud_uniplugins.json添加插件
{
"type": "module",
"name": "Amap",
"class": "com.demo.AmapWXModule"
}
uniapp使用
const modal = uni.requireNativePlugin('modal');
const amap = uni.requireNativePlugin('Amap');
methods: {
AppAmap()
{
amap.startNaviGao({sid:'A',slat:'36.7025585',slon:'116.8766784700',sname:'开始'
,did:'B',dlat:'36.6494152900',dlon:'117.1224975600',dname:'结束',dev:'1',t:'0'});
},
}
android原生项目app下的build.gradle中添加新增的 module
// 添加uni-app插件
implementation project(':amaplib')
iOS离线打包:uni-AD广告联盟配置
> 此文档将不再维护,请移步新文档:https://nativesupport.dcloud.net.cn
uni-AD广告联盟配置
此功能需要 HBuilderX 2.5.4-20200108-alpha 之后发布的离线包才能用。
添加360广告相关配置
注: Linker Flags、framework添加方法参考该文档
- 依次添加下列Linker Flags: -lUniAD,-lUniAd-360
- 添加下列framework:"libz.tbd","QHADSDK.framework","CoreLocation.framework", "CoreTelephony.framework", "WebKit.framework", "Security.framework", "SystemConfiguration.framework", "AdSupport.framework"
- 把离线包里Bundles文件夹里的 QHADVideoPlayer.bundle 引入到工程中
添加广点通广告相关配置
注: Linker Flags、framework添加方法参考该文档
- 依次添加下列Linker Flags: -lUniAD, -lUniAd-Gdt , -lGDTMobSDK
- 添加下列framework:"AdSupport.framework",
"CoreLocation.framework",
"QuartzCore.framework",
"SystemConfiguration.framework",
"CoreTelephony.framework",
"Security.framework",
"StoreKit.framework",
"AVFoundation.framework",
"WebKit.framework",
"libz.tbd",
"libxml2.tbd"
添加穿山甲广告相关配置
注: Linker Flags、framework添加方法参考该文档
- 依次添加下列Linker Flags: -lUniAD, -lUniAd-Csj, -lSDWebImage
- 添加下列framework:"BUAdSDK.framework","BUFoundation.framework","StoreKit.framework", "MobileCoreServices.framework", "WebKit.framework", "MediaPlayer.framework", "CoreMedia.framework", "CoreLocation.framework",
"AVFoundation.framework",
"CoreTelephony.framework",
"SystemConfiguration.framework",
"AdSupport.framework",
"CoreMotion.framework",
"Accelerate.framework",
"libresolv.9.tbd",
"libc++.tbd",
"libz.tbd",
"libsqlite3.tbd"
3.把离线包里Bundles文件夹里的 BUAdSDK.bundle 引入到工程中
注意:如果是uni项目 必须配置上libUniADWeex.a 这个库
> 此文档将不再维护,请移步新文档:https://nativesupport.dcloud.net.cn
uni-AD广告联盟配置
此功能需要 HBuilderX 2.5.4-20200108-alpha 之后发布的离线包才能用。
添加360广告相关配置
注: Linker Flags、framework添加方法参考该文档
- 依次添加下列Linker Flags: -lUniAD,-lUniAd-360
- 添加下列framework:"libz.tbd","QHADSDK.framework","CoreLocation.framework", "CoreTelephony.framework", "WebKit.framework", "Security.framework", "SystemConfiguration.framework", "AdSupport.framework"
- 把离线包里Bundles文件夹里的 QHADVideoPlayer.bundle 引入到工程中
添加广点通广告相关配置
注: Linker Flags、framework添加方法参考该文档
- 依次添加下列Linker Flags: -lUniAD, -lUniAd-Gdt , -lGDTMobSDK
- 添加下列framework:"AdSupport.framework",
"CoreLocation.framework",
"QuartzCore.framework",
"SystemConfiguration.framework",
"CoreTelephony.framework",
"Security.framework",
"StoreKit.framework",
"AVFoundation.framework",
"WebKit.framework",
"libz.tbd",
"libxml2.tbd"
添加穿山甲广告相关配置
注: Linker Flags、framework添加方法参考该文档
- 依次添加下列Linker Flags: -lUniAD, -lUniAd-Csj, -lSDWebImage
- 添加下列framework:"BUAdSDK.framework","BUFoundation.framework","StoreKit.framework", "MobileCoreServices.framework", "WebKit.framework", "MediaPlayer.framework", "CoreMedia.framework", "CoreLocation.framework",
"AVFoundation.framework",
"CoreTelephony.framework",
"SystemConfiguration.framework",
"AdSupport.framework",
"CoreMotion.framework",
"Accelerate.framework",
"libresolv.9.tbd",
"libc++.tbd",
"libz.tbd",
"libsqlite3.tbd"
3.把离线包里Bundles文件夹里的 BUAdSDK.bundle 引入到工程中