分享一个Android原生日历提醒插入案例。。。求个iOS的??谢谢。。。。。
一个简单的原生日历提醒插入。。。。native.js调用原生实现。。。。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<title></title>
<script src="js/mui.min.js"></script>
<link href="css/mui.min.css" rel="stylesheet" />
<script type="text/javascript" charset="utf-8">
mui.init();
</script>
</head>
<body>
<button onclick="addEvent()"> 插入事件</button>
</body>
<script>
var calanderURL = "content://com.android.calendar/calendars";
var calanderEventURL = "content://com.android.calendar/events";
var calanderRemiderURL = "content://com.android.calendar/reminders";
var calId;
function addEvent() {
var Cursor = plus.android.importClass("android.database.Cursor");
var Uri = plus.android.importClass("android.net.Uri");
var Calendar = plus.android.importClass("java.util.Calendar");
var main = plus.android.runtimeMainActivity();
var userCursor = plus.android.invoke(main.getContentResolver(), "query", Uri.parse(calanderURL), null, null, null, null);
if (plus.android.invoke(userCursor, "getCount") <= 0) {
console.log("添加账号" + plus.android.invoke(userCursor, "getCount"));
initCalendars();
} else {
console.log("开始插入:" + plus.android.invoke(userCursor, "getCount"));
plus.android.invoke(userCursor, "moveToLast");
calId = plus.android.invoke(userCursor, "getString", plus.android.invoke(userCursor, "getColumnIndex", "_id"));
var ContentValues = plus.android.importClass("android.content.ContentValues");
var events = new ContentValues();
events.put("title", "测试中==》呵呵");
events.put("description", "Frankie受空姐邀请,今天晚上10点以后将在Sheraton交流.lol~");
// 插入账户
events.put("calendar_id", calId);
console.log(calId);
events.put("eventLocation", "地球-华夏");
var mCalendar = Calendar.getInstance();
plus.android.invoke(mCalendar, "set", Calendar.HOUR_OF_DAY, 11);
plus.android.invoke(mCalendar, "set", Calendar.MINUTE, 0);
var start = plus.android.invoke(plus.android.invoke(mCalendar, "getTime"), "getTime");
var end = plus.android.invoke(plus.android.invoke(mCalendar, "getTime"), "getTime");
events.put("dtstart", start);
events.put("dtend", end);
events.put("hasAlarm", 1);
events.put("eventTimezone", "Asia/Shanghai"); // 这个是时区,必须有,
// 添加事件
var newEvent = plus.android.invoke(plus.android.runtimeMainActivity().getContentResolver(), "insert", Uri.parse(calanderEventURL), events);
// 事件提醒的设定
var id = plus.android.invoke(newEvent, "getLastPathSegment");
var values = new ContentValues();
values.put("event_id", id);
// 提前10分钟有提醒
values.put("minutes", "10");
values.put("method", "1");
plus.android.invoke(main.getContentResolver(), "insert", Uri.parse(calanderRemiderURL), values);
mui.toast("插入事件成功,可打开本地日历查看");
}
}
//添加账户
function initCalendars() {
var TimeZone=plus.android.importClass("java.util.TimeZone");
var timeZone = TimeZone.getDefault();
var ContentValues=plus.android.importClass("android.content.ContentValues");
var value = new ContentValues();
var Calendars=plus.android.importClass("android.provider.CalendarContract.Calendars");
value.put("name", "yy");
value.put("account_name", "hehe@gmail.com");
value.put("account_type", "com.android.exchange");
value.put("calendar_displayName", "mytt");
value.put("visible", 1);
value.put("calendar_color", -9206951);
value.put("calendar_access_level","700");
value.put("sync_events", 1);
value.put("calendar_timezone",plus.android.invoke(timeZone, "getID"));
value.put("ownerAccount","hehe@gmail.com");
value.put("canOrganizerRespond", 0);
var Uri=plus.android.importClass("android.net.Uri");
var calendarUri=Uri.parse("content://com.android.calendar/calendars");
var buildUpon = plus.android.invoke(calendarUri, "buildUpon");
var CalendarContract = plus.android.importClass("android.provider.CalendarContract");
plus.android.invoke(buildUpon, "appendQueryParameter", CalendarContract.CALLER_IS_SYNCADAPTER, "true");
plus.android.invoke(buildUpon, "appendQueryParameter", "account_name", "hehe@gmail.com");
plus.android.invoke(buildUpon, "appendQueryParameter", "account_type", "com.android.exchange");
calendarUri = plus.android.invoke(buildUpon, "build");
plus.android.invoke(plus.android.runtimeMainActivity().getContentResolver(), "insert", calendarUri, value);
mui.toast("添加账号成功");
}
</script>
</html> 一个简单的原生日历提醒插入。。。。native.js调用原生实现。。。。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<title></title>
<script src="js/mui.min.js"></script>
<link href="css/mui.min.css" rel="stylesheet" />
<script type="text/javascript" charset="utf-8">
mui.init();
</script>
</head>
<body>
<button onclick="addEvent()"> 插入事件</button>
</body>
<script>
var calanderURL = "content://com.android.calendar/calendars";
var calanderEventURL = "content://com.android.calendar/events";
var calanderRemiderURL = "content://com.android.calendar/reminders";
var calId;
function addEvent() {
var Cursor = plus.android.importClass("android.database.Cursor");
var Uri = plus.android.importClass("android.net.Uri");
var Calendar = plus.android.importClass("java.util.Calendar");
var main = plus.android.runtimeMainActivity();
var userCursor = plus.android.invoke(main.getContentResolver(), "query", Uri.parse(calanderURL), null, null, null, null);
if (plus.android.invoke(userCursor, "getCount") <= 0) {
console.log("添加账号" + plus.android.invoke(userCursor, "getCount"));
initCalendars();
} else {
console.log("开始插入:" + plus.android.invoke(userCursor, "getCount"));
plus.android.invoke(userCursor, "moveToLast");
calId = plus.android.invoke(userCursor, "getString", plus.android.invoke(userCursor, "getColumnIndex", "_id"));
var ContentValues = plus.android.importClass("android.content.ContentValues");
var events = new ContentValues();
events.put("title", "测试中==》呵呵");
events.put("description", "Frankie受空姐邀请,今天晚上10点以后将在Sheraton交流.lol~");
// 插入账户
events.put("calendar_id", calId);
console.log(calId);
events.put("eventLocation", "地球-华夏");
var mCalendar = Calendar.getInstance();
plus.android.invoke(mCalendar, "set", Calendar.HOUR_OF_DAY, 11);
plus.android.invoke(mCalendar, "set", Calendar.MINUTE, 0);
var start = plus.android.invoke(plus.android.invoke(mCalendar, "getTime"), "getTime");
var end = plus.android.invoke(plus.android.invoke(mCalendar, "getTime"), "getTime");
events.put("dtstart", start);
events.put("dtend", end);
events.put("hasAlarm", 1);
events.put("eventTimezone", "Asia/Shanghai"); // 这个是时区,必须有,
// 添加事件
var newEvent = plus.android.invoke(plus.android.runtimeMainActivity().getContentResolver(), "insert", Uri.parse(calanderEventURL), events);
// 事件提醒的设定
var id = plus.android.invoke(newEvent, "getLastPathSegment");
var values = new ContentValues();
values.put("event_id", id);
// 提前10分钟有提醒
values.put("minutes", "10");
values.put("method", "1");
plus.android.invoke(main.getContentResolver(), "insert", Uri.parse(calanderRemiderURL), values);
mui.toast("插入事件成功,可打开本地日历查看");
}
}
//添加账户
function initCalendars() {
var TimeZone=plus.android.importClass("java.util.TimeZone");
var timeZone = TimeZone.getDefault();
var ContentValues=plus.android.importClass("android.content.ContentValues");
var value = new ContentValues();
var Calendars=plus.android.importClass("android.provider.CalendarContract.Calendars");
value.put("name", "yy");
value.put("account_name", "hehe@gmail.com");
value.put("account_type", "com.android.exchange");
value.put("calendar_displayName", "mytt");
value.put("visible", 1);
value.put("calendar_color", -9206951);
value.put("calendar_access_level","700");
value.put("sync_events", 1);
value.put("calendar_timezone",plus.android.invoke(timeZone, "getID"));
value.put("ownerAccount","hehe@gmail.com");
value.put("canOrganizerRespond", 0);
var Uri=plus.android.importClass("android.net.Uri");
var calendarUri=Uri.parse("content://com.android.calendar/calendars");
var buildUpon = plus.android.invoke(calendarUri, "buildUpon");
var CalendarContract = plus.android.importClass("android.provider.CalendarContract");
plus.android.invoke(buildUpon, "appendQueryParameter", CalendarContract.CALLER_IS_SYNCADAPTER, "true");
plus.android.invoke(buildUpon, "appendQueryParameter", "account_name", "hehe@gmail.com");
plus.android.invoke(buildUpon, "appendQueryParameter", "account_type", "com.android.exchange");
calendarUri = plus.android.invoke(buildUpon, "build");
plus.android.invoke(plus.android.runtimeMainActivity().getContentResolver(), "insert", calendarUri, value);
mui.toast("添加账号成功");
}
</script>
</html> 收起阅读 »
Android平台离线打包支付插件配置
此文档已不再维护,请参考新文档地址:https://nativesupport.dcloud.net.cn/AppDocs/usemodule/androidModuleConfig/pay
支付宝配置
需要拷贝的文件
需要引入工程的jar文件
需要将以下jar文件放到工程的libs目录下
| 路径 | 文件 |
|---|---|
| SDK\libs(1.9.9.52372之前) | payment.jar, payment-alipay.jar , alipaySingle-20161222.jar, alipayutdid.jar |
| SDK\libs(1.9.9.52372之后) | payment-alipay-release.aar, alipayutdid.jar |
Androidmainfest.xml文件需要修改的项
需要在application节点前添加权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
application节点下配置如下代码
<activity android:name="com.alipay.sdk.app.H5PayActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind"
android:windowSoftInputMode="adjustResize|stateHidden" >
</activity>
<activity android:name="com.alipay.sdk.auth.AuthActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind" >
</activity>
properties.xml需要添加如下代码
properties.xml文件在assets/data目录下
<feature name="Payment" value="io.dcloud.feature.payment.PaymentFeatureImpl"><module name="AliPay" value="io.dcloud.feature.payment.alipay.AliPay"/></feature>
微信支付配置
需要拷贝的文件
需要引入工程的jar文件
需要将以下jar文件放到工程的libs目录下
| 路径 | 文件 |
|---|---|
| SDK\libs(1.9.9.52372之前) | payment.jar, payment-weixin.jar, tx_wx.jar |
| SDK\libs(1.9.9.52372之后) | payment-weixin-release.aar, wechat-sdk-android-with-mta-5.1.4.jar |
需要将以下代码文件引入到工程,包名为”$你的包名.wxapi”
| 路径 | 文件 |
|---|---|
| $你的包名\wxapi | WXPayEntryActivity.java |
Androidmainfest.xml文件需要修改的项
需要在application节点前添加权限
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
application节点下配置如下代码
<meta-data android:name="WX_APPID" android:value="$微信APPID" />
<meta-data android:name="WX_SECRET" android:value="$微信SECRET"/>
<activity
android:name="$你的包名.wxapi.WXPayEntryActivity"
android:exported="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:launchMode="singleTop" />
properties.xml需要添加如下代码
properties.xml文件在assets/data目录下
<feature name="Payment" value="io.dcloud.feature.payment.PaymentFeatureImpl"><module name="Payment-Weixin" value="io.dcloud.feature.payment.weixin.WeiXinPay"/></feature> 此文档已不再维护,请参考新文档地址:https://nativesupport.dcloud.net.cn/AppDocs/usemodule/androidModuleConfig/pay
支付宝配置
需要拷贝的文件
需要引入工程的jar文件
需要将以下jar文件放到工程的libs目录下
| 路径 | 文件 |
|---|---|
| SDK\libs(1.9.9.52372之前) | payment.jar, payment-alipay.jar , alipaySingle-20161222.jar, alipayutdid.jar |
| SDK\libs(1.9.9.52372之后) | payment-alipay-release.aar, alipayutdid.jar |
Androidmainfest.xml文件需要修改的项
需要在application节点前添加权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
application节点下配置如下代码
<activity android:name="com.alipay.sdk.app.H5PayActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind"
android:windowSoftInputMode="adjustResize|stateHidden" >
</activity>
<activity android:name="com.alipay.sdk.auth.AuthActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind" >
</activity>
properties.xml需要添加如下代码
properties.xml文件在assets/data目录下
<feature name="Payment" value="io.dcloud.feature.payment.PaymentFeatureImpl"><module name="AliPay" value="io.dcloud.feature.payment.alipay.AliPay"/></feature>
微信支付配置
需要拷贝的文件
需要引入工程的jar文件
需要将以下jar文件放到工程的libs目录下
| 路径 | 文件 |
|---|---|
| SDK\libs(1.9.9.52372之前) | payment.jar, payment-weixin.jar, tx_wx.jar |
| SDK\libs(1.9.9.52372之后) | payment-weixin-release.aar, wechat-sdk-android-with-mta-5.1.4.jar |
需要将以下代码文件引入到工程,包名为”$你的包名.wxapi”
| 路径 | 文件 |
|---|---|
| $你的包名\wxapi | WXPayEntryActivity.java |
Androidmainfest.xml文件需要修改的项
需要在application节点前添加权限
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
application节点下配置如下代码
<meta-data android:name="WX_APPID" android:value="$微信APPID" />
<meta-data android:name="WX_SECRET" android:value="$微信SECRET"/>
<activity
android:name="$你的包名.wxapi.WXPayEntryActivity"
android:exported="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:launchMode="singleTop" />
properties.xml需要添加如下代码
properties.xml文件在assets/data目录下
<feature name="Payment" value="io.dcloud.feature.payment.PaymentFeatureImpl"><module name="Payment-Weixin" value="io.dcloud.feature.payment.weixin.WeiXinPay"/></feature> 收起阅读 »
Android平台离线打包定位插件配置
百度地图定位
需要拷贝的文件
需要引入工程的jar/aar文件
需要将以下jar/aar文件放到工程的libs目录下
| 路径 | 文件 |
|---|---|
| SDK\libs(1.9.9.52372之前) | geolocation.jar, geolocation-baidu.jar,BaiduLBS_Android_base.jar, BaiduLBS_Android_geolocation_v7.1.jar |
| SDK\libs(1.9.9.52372之后) | baidu-libs-release.aar, geolocation-baidu-release.aar |
需要将以下so文件放到工程的libs\armeabi目录下(1.9.9.52372版本之后不需要设置此项)
| 路径 | 文件名 |
|---|---|
| SDK\libs \armeabi | liblocSDK7a.so |
| SDK\libs\armeabi-v7a | liblocSDK7a.so |
| SDK\libs\x86 | liblocSDK7a.so |
application节点下配置如下代码
<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="%appkey_android%"></meta-data>
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"></service>
高德定位
需要拷贝的文件
需要引入工程的jar/aar文件
需要将以下jar/aar文件放到工程的libs目录下
| 路径 | 文件 |
|---|---|
| SDK\libs(1.9.9.52372之前) | geolocation.jar,AMap_Location_V3.3.0_20170118.jar,geolocation-amap.jar |
| SDK\libs(1.9.9.52372之后) | amap-libs-release.aar, geolocation-amap-release.aar |
Androidmainfest.xml文件需要修改的项
需要在application节点前添加权限
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.READ_LOGS"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
application节点下配置如下代码
<meta-data android:name="com.amap.api.v2.apikey" android:value=\"%用户申请的APPkey%\"></meta-data>
<service android:name="com.amap.api.location.APSService"></service>
系统定位
需要拷贝的文件
需要引入工程的jar/aar文件
最新SDK使用系统定位已不需要引入任何文件
需要将以下jar文件放到工程的libs目录下(仅限旧版)
| 路径 | 文件 |
|---|---|
| SDK\lisb | geolocation.jar, geolocation-system.jar |
Androidmainfest.xml文件需要修改的项
需要在application节点前添加权限
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.READ_LOGS"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/> 百度地图定位
需要拷贝的文件
需要引入工程的jar/aar文件
需要将以下jar/aar文件放到工程的libs目录下
| 路径 | 文件 |
|---|---|
| SDK\libs(1.9.9.52372之前) | geolocation.jar, geolocation-baidu.jar,BaiduLBS_Android_base.jar, BaiduLBS_Android_geolocation_v7.1.jar |
| SDK\libs(1.9.9.52372之后) | baidu-libs-release.aar, geolocation-baidu-release.aar |
需要将以下so文件放到工程的libs\armeabi目录下(1.9.9.52372版本之后不需要设置此项)
| 路径 | 文件名 |
|---|---|
| SDK\libs \armeabi | liblocSDK7a.so |
| SDK\libs\armeabi-v7a | liblocSDK7a.so |
| SDK\libs\x86 | liblocSDK7a.so |
application节点下配置如下代码
<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="%appkey_android%"></meta-data>
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"></service>
高德定位
需要拷贝的文件
需要引入工程的jar/aar文件
需要将以下jar/aar文件放到工程的libs目录下
| 路径 | 文件 |
|---|---|
| SDK\libs(1.9.9.52372之前) | geolocation.jar,AMap_Location_V3.3.0_20170118.jar,geolocation-amap.jar |
| SDK\libs(1.9.9.52372之后) | amap-libs-release.aar, geolocation-amap-release.aar |
Androidmainfest.xml文件需要修改的项
需要在application节点前添加权限
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.READ_LOGS"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
application节点下配置如下代码
<meta-data android:name="com.amap.api.v2.apikey" android:value=\"%用户申请的APPkey%\"></meta-data>
<service android:name="com.amap.api.location.APSService"></service>
系统定位
需要拷贝的文件
需要引入工程的jar/aar文件
最新SDK使用系统定位已不需要引入任何文件
需要将以下jar文件放到工程的libs目录下(仅限旧版)
| 路径 | 文件 |
|---|---|
| SDK\lisb | geolocation.jar, geolocation-system.jar |
Androidmainfest.xml文件需要修改的项
需要在application节点前添加权限
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.READ_LOGS"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/> 收起阅读 »
Android平台离线打包地图插件配置
此文档已不再维护,请移步:https://nativesupport.dcloud.net.cn
开发者需要修改使用的地图插件时,需要修改properties.xml文件的features节点下Maps节点value属性的配置,高德地图和百度地图的配置只能保留一个
百度地图
需要拷贝的文件
需要引入工程的jar文件
需要将以下jar文件放到工程的libs目录下
| 路径 | 文件 |
|---|---|
| SDK\libs(1.9.9.52372之前) | BaiduLBS_Android_base.jar,BaiduLBS_Android_geolocation_v7.1.jar, BaiduLBS_Android_v4.3.1.jar,map-baidu.jar |
| SDK\libs(1.9.9.52372之后) | baidu-libs-release.aar,map-baidu-release.aar |
需要将以下so文件放到工程的libs\armeabi目录下
(1.9.9.52372之后不需要配置此项)
| 路径 | 文件名 |
|---|---|
| SDK\libs \armeabi | libBaiduMapSDK_base_v4_3_1.so,libBaiduMapSDK_map_v4_3_1.so, liblocSDK7a.so |
| SDK\libs \armeabi-v7a | libBaiduMapSDK_base_v4_3_1.so,libBaiduMapSDK_map_v4_3_1.so, liblocSDK7a.so |
| SDK\libs \x86 | libBaiduMapSDK_base_v4_3_1.so,libBaiduMapSDK_map_v4_3_1.so, liblocSDK7a.so |
Androidmainfest.xml文件需要修改的项
需要在application节点前添加权限
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.READ_LOGS"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
application节点下配置如下代码
<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="%appkey_android%"></meta-data>
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"></service>
properties.xml文件需要修改的项
properties.xml文件在assets/data目录下
features节点下添加:
<feature name="Maps" value="io.dcloud.js.map.JsMapPluginImpl"></feature>
services节点下添加:
<service name="Maps" value="io.dcloud.js.map.MapInitImpl" />
高德地图
需要拷贝的文件
需要引入工程的jar文件
需要将以下jar文件放到工程的libs目录下
| 路径 | 文件 |
|---|---|
| SDK\libs(1.9.9.52372之前) | map-amap.jar, AMap_3DMap_V2.4.1.jar, AMap_Services_V2.4.0.jar,AMap_Location_V3.3.0_20170118.jar |
| SDK\libs(1.9.9.52372之后) | amap-libs-release.aar,map-amap-release.aar |
需要将以下so文件放到工程的libs\armeabi目录下
(1.9.9.52372之后不需要配置此项)
| 路径 | 文件名 |
|---|---|
| SDK\libs \armeabi | libamapv304.so, libamapv304ex.so |
需要将以下so文件放到工程的libs\armeabi-v7a目录下
(1.9.9.52372之后不需要配置此项)
| 路径 | 文件名 |
|---|---|
| SDK\libs \armeabi-v7a | libamapv304.so, libamapv304ex.so |
需要将以下so文件放到工程的libs\x86目录下
(1.9.9.52372之后不需要配置此项)
| 路径 | 文件名 |
|---|---|
| SDK\libs \x86 | libamapv304.so, libamapv304ex.so |
Androidmainfest.xml文件需要修改的项
需要在application节点前添加权限
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
<uses-permission android:name="android.permission.READ_LOGS"></uses-permission>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
application节点下配置如下代码:
<meta-data android:name="com.amap.api.v2.apikey\" android:value="%appkey_android%\">
<service android:name="com.amap.api.location.APSService"></service>
注意事项
高德地图使用的appkey和打包使用的包名及签名文件存在对应关系,填写时请注意。填写错误会导致地图无法正常使用。
properties.xml文件需要修改的项
features节点下添加
properties.xml文件在assets/data目录下
<feature name="Maps" value="io.dcloud.js.map.amap.JsMapPluginImpl"></feature> 此文档已不再维护,请移步:https://nativesupport.dcloud.net.cn
开发者需要修改使用的地图插件时,需要修改properties.xml文件的features节点下Maps节点value属性的配置,高德地图和百度地图的配置只能保留一个
百度地图
需要拷贝的文件
需要引入工程的jar文件
需要将以下jar文件放到工程的libs目录下
| 路径 | 文件 |
|---|---|
| SDK\libs(1.9.9.52372之前) | BaiduLBS_Android_base.jar,BaiduLBS_Android_geolocation_v7.1.jar, BaiduLBS_Android_v4.3.1.jar,map-baidu.jar |
| SDK\libs(1.9.9.52372之后) | baidu-libs-release.aar,map-baidu-release.aar |
需要将以下so文件放到工程的libs\armeabi目录下
(1.9.9.52372之后不需要配置此项)
| 路径 | 文件名 |
|---|---|
| SDK\libs \armeabi | libBaiduMapSDK_base_v4_3_1.so,libBaiduMapSDK_map_v4_3_1.so, liblocSDK7a.so |
| SDK\libs \armeabi-v7a | libBaiduMapSDK_base_v4_3_1.so,libBaiduMapSDK_map_v4_3_1.so, liblocSDK7a.so |
| SDK\libs \x86 | libBaiduMapSDK_base_v4_3_1.so,libBaiduMapSDK_map_v4_3_1.so, liblocSDK7a.so |
Androidmainfest.xml文件需要修改的项
需要在application节点前添加权限
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.READ_LOGS"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
application节点下配置如下代码
<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="%appkey_android%"></meta-data>
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"></service>
properties.xml文件需要修改的项
properties.xml文件在assets/data目录下
features节点下添加:
<feature name="Maps" value="io.dcloud.js.map.JsMapPluginImpl"></feature>
services节点下添加:
<service name="Maps" value="io.dcloud.js.map.MapInitImpl" />
高德地图
需要拷贝的文件
需要引入工程的jar文件
需要将以下jar文件放到工程的libs目录下
| 路径 | 文件 |
|---|---|
| SDK\libs(1.9.9.52372之前) | map-amap.jar, AMap_3DMap_V2.4.1.jar, AMap_Services_V2.4.0.jar,AMap_Location_V3.3.0_20170118.jar |
| SDK\libs(1.9.9.52372之后) | amap-libs-release.aar,map-amap-release.aar |
需要将以下so文件放到工程的libs\armeabi目录下
(1.9.9.52372之后不需要配置此项)
| 路径 | 文件名 |
|---|---|
| SDK\libs \armeabi | libamapv304.so, libamapv304ex.so |
需要将以下so文件放到工程的libs\armeabi-v7a目录下
(1.9.9.52372之后不需要配置此项)
| 路径 | 文件名 |
|---|---|
| SDK\libs \armeabi-v7a | libamapv304.so, libamapv304ex.so |
需要将以下so文件放到工程的libs\x86目录下
(1.9.9.52372之后不需要配置此项)
| 路径 | 文件名 |
|---|---|
| SDK\libs \x86 | libamapv304.so, libamapv304ex.so |
Androidmainfest.xml文件需要修改的项
需要在application节点前添加权限
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
<uses-permission android:name="android.permission.READ_LOGS"></uses-permission>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
application节点下配置如下代码:
<meta-data android:name="com.amap.api.v2.apikey\" android:value="%appkey_android%\">
<service android:name="com.amap.api.location.APSService"></service>
注意事项
高德地图使用的appkey和打包使用的包名及签名文件存在对应关系,填写时请注意。填写错误会导致地图无法正常使用。
properties.xml文件需要修改的项
features节点下添加
properties.xml文件在assets/data目录下
<feature name="Maps" value="io.dcloud.js.map.amap.JsMapPluginImpl"></feature> 收起阅读 »
Android平台离线打包授权登陆插件配置
微信登陆
需要拷贝的文件
需要引入工程的jar文件
需要将以下jar文件放到工程的libs目录下
| 路径 | 文件 |
|---|---|
| SDK\libs(1.9.9.52372之前) | oauth.jar, oauth-weixin.jar,tx_wx.jar |
| SDK\libs(1.9.9.52372之后) | oauth-weixin-release.aar,wechat-sdk-android-with-mta-5.1.4.jar |
需要将以下代码文件引入到工程,包名为”%用户包名%.wxapi”
| 路径 | 文件 |
|---|---|
| %用户包名%\wxapi | WXEntryActivity.java |
Androidmainfest.xml文件需要修改的项
需要在application节点前添加权限
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<application>节点下配置如下代码
<meta-data android:value="%用户申请的微信Appcert%" android:name="WX_SECRET"/>
<meta-data android:value="%用户申请的微信Appid%" android:name="WX_APPID"/>
<activity android:name="%用户包名%.wxapi.WXEntryActivity"
android:label="@string/app_name"
android:exported="true"
android:launchMode="singleTop">
<intent-filter><action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="%用户申请的微信Appid%"/>
</intent-filter>
</activity>
properties.xml需要添加如下代码
properties.xml文件在assets/data目录下
<feature name="OAuth" value="io.dcloud.feature.oauth.OAuthFeatureImpl"><module name="OAuth-Weixin" value="io.dcloud.feature.oauth.weixin.WeiXinOAuthService"/></feature>
QQ登陆
需要拷贝的文件
需要引入工程的jar文件
需要将以下jar文件放到工程的libs目录下
| 路径 | 文件 |
|---|---|
| SDK\libs(1.9.9.52372之前) | oauth.jar, oauth-qq.jar,qq_sdk_v3.1.0.jar,qq_mta-sdk-1.6.2.jar |
| SDK\libs(1.9.9.52372之后) | oauth-qq-release.aar,qq_mta-sdk-1.6.2.jar,qq_sdk_v3.1.0.jar |
Androidmainfest.xml文件需要修改的项
需要在application节点前添加权限
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<application>节点下配置如下代码
<!-- Oauth QQ start -->
<meta-data android:value="%appid%" android:name="QQ_APPID"/>
<activity android:name="com.tencent.tauth.AuthActivity" android:launchMode="singleTask" android:noHistory="true">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="%appid%"/>
</intent-filter>
</activity>
<activity android:name="com.tencent.connect.common.AssistActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:screenOrientation="portrait"/>
<!-- Oauth QQ end -->
properties.xml需要添加如下代码
properties.xml文件在assets/data目录下
<feature name="OAuth" value="io.dcloud.feature.oauth.OAuthFeatureImpl"><module name="OAuth-QQ" value="io.dcloud.feature.oauth.qq.QQOAuthService"/></feature>
新浪微博登陆
需要拷贝的文件
需要引入工程的jar文件
需要将以下jar文件,so文件和cer文件放到工程的libs目录及assets下
版本号1.9.9.52372之后配置方法
| 路径 | 文件 |
|---|---|
| SDK\libs | sina-libs-release.aar,oauth-sina-release.aar |
版本号1.9.9.52372之前配置方法
| 路径 | 文件 |
|---|---|
| SDK\libs | oauth.jar, oauth-sina.jar ,sinaweibo4.1.jar |
| SDK\libs\armeabi | libweibosdkcore.so |
| SDK\libs\armeabi-v7a | libweibosdkcore.so |
| SDK\libs\x86 | libweibosdkcore.so |
| SDK\assets | geo_global_ca.cer |
Androidmainfest.xml文件需要修改的项
<application>节点下配置如下代码
<!-- Oauth Sina start -->
<meta-data android:value="%redirect_uri%" android:name="SINA_REDIRECT_URI"/>
<meta-data android:value="_%appkey%" android:name="SINA_APPKEY"/>
<activity android:name="com.sina.weibo.sdk.web.WeiboSdkWebActivity"
android:configChanges="keyboardHidden|orientation"
android:exported="false"
android:windowSoftInputMode="adjustResize">
</activity>
<!-- Oauth Sina end -->
properties.xml需要添加如下代码
properties.xml文件在assets/data目录下
<feature name="OAuth" value="io.dcloud.feature.oauth.OAuthFeatureImpl"><module name="OAuth-Sina" value="io.dcloud.feature.oauth.sina.SinaOAuthService"/></feature>
小米登陆
需要拷贝的文件
需要将以下jar文件拷贝到工程中
| 路径 | 文件 |
|---|---|
| SDK\libs(1.9.9.52372之前) | oauth.jar, oauth-miui.jar, oauth.1.5.1.jar |
| SDK\libs(1.9.9.52372之后) | oauth-miui-release.aar |
Androidmainfest.xml文件需要修改的项
需要在application节点前添加权限
<uses-permission android:name="com.xiaomi.permission.AUTH_SERVICE"/>
application节点下配置如下代码
<meta-data android:value="_%小米登陆的APPID%" android:name="MIUI_APPID"/>
<meta-data android:value="%小米登陆的APPSecret%" android:name="MIUI_APPSECRET"/>
<meta-data android:value="%小米登陆的RegURL%" android:name="MIUI_REDIRECT_URI"/>
<activity android:name="com.xiaomi.account.openauth.AuthorizeActivity"/>
properties.xml需要添加如下代码
properties.xml文件在ADT工程assets/data目录下
Features节点下添加
<feature name="OAuth" value="io.dcloud.feature.oauth.OAuthFeatureImpl">
<module name="OAuth-MiUi" value="io.dcloud.feature.oauth.miui.MiUiOAuthService"/>
</feature> 微信登陆
需要拷贝的文件
需要引入工程的jar文件
需要将以下jar文件放到工程的libs目录下
| 路径 | 文件 |
|---|---|
| SDK\libs(1.9.9.52372之前) | oauth.jar, oauth-weixin.jar,tx_wx.jar |
| SDK\libs(1.9.9.52372之后) | oauth-weixin-release.aar,wechat-sdk-android-with-mta-5.1.4.jar |
需要将以下代码文件引入到工程,包名为”%用户包名%.wxapi”
| 路径 | 文件 |
|---|---|
| %用户包名%\wxapi | WXEntryActivity.java |
Androidmainfest.xml文件需要修改的项
需要在application节点前添加权限
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<application>节点下配置如下代码
<meta-data android:value="%用户申请的微信Appcert%" android:name="WX_SECRET"/>
<meta-data android:value="%用户申请的微信Appid%" android:name="WX_APPID"/>
<activity android:name="%用户包名%.wxapi.WXEntryActivity"
android:label="@string/app_name"
android:exported="true"
android:launchMode="singleTop">
<intent-filter><action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="%用户申请的微信Appid%"/>
</intent-filter>
</activity>
properties.xml需要添加如下代码
properties.xml文件在assets/data目录下
<feature name="OAuth" value="io.dcloud.feature.oauth.OAuthFeatureImpl"><module name="OAuth-Weixin" value="io.dcloud.feature.oauth.weixin.WeiXinOAuthService"/></feature>
QQ登陆
需要拷贝的文件
需要引入工程的jar文件
需要将以下jar文件放到工程的libs目录下
| 路径 | 文件 |
|---|---|
| SDK\libs(1.9.9.52372之前) | oauth.jar, oauth-qq.jar,qq_sdk_v3.1.0.jar,qq_mta-sdk-1.6.2.jar |
| SDK\libs(1.9.9.52372之后) | oauth-qq-release.aar,qq_mta-sdk-1.6.2.jar,qq_sdk_v3.1.0.jar |
Androidmainfest.xml文件需要修改的项
需要在application节点前添加权限
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<application>节点下配置如下代码
<!-- Oauth QQ start -->
<meta-data android:value="%appid%" android:name="QQ_APPID"/>
<activity android:name="com.tencent.tauth.AuthActivity" android:launchMode="singleTask" android:noHistory="true">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="%appid%"/>
</intent-filter>
</activity>
<activity android:name="com.tencent.connect.common.AssistActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:screenOrientation="portrait"/>
<!-- Oauth QQ end -->
properties.xml需要添加如下代码
properties.xml文件在assets/data目录下
<feature name="OAuth" value="io.dcloud.feature.oauth.OAuthFeatureImpl"><module name="OAuth-QQ" value="io.dcloud.feature.oauth.qq.QQOAuthService"/></feature>
新浪微博登陆
需要拷贝的文件
需要引入工程的jar文件
需要将以下jar文件,so文件和cer文件放到工程的libs目录及assets下
版本号1.9.9.52372之后配置方法
| 路径 | 文件 |
|---|---|
| SDK\libs | sina-libs-release.aar,oauth-sina-release.aar |
版本号1.9.9.52372之前配置方法
| 路径 | 文件 |
|---|---|
| SDK\libs | oauth.jar, oauth-sina.jar ,sinaweibo4.1.jar |
| SDK\libs\armeabi | libweibosdkcore.so |
| SDK\libs\armeabi-v7a | libweibosdkcore.so |
| SDK\libs\x86 | libweibosdkcore.so |
| SDK\assets | geo_global_ca.cer |
Androidmainfest.xml文件需要修改的项
<application>节点下配置如下代码
<!-- Oauth Sina start -->
<meta-data android:value="%redirect_uri%" android:name="SINA_REDIRECT_URI"/>
<meta-data android:value="_%appkey%" android:name="SINA_APPKEY"/>
<activity android:name="com.sina.weibo.sdk.web.WeiboSdkWebActivity"
android:configChanges="keyboardHidden|orientation"
android:exported="false"
android:windowSoftInputMode="adjustResize">
</activity>
<!-- Oauth Sina end -->
properties.xml需要添加如下代码
properties.xml文件在assets/data目录下
<feature name="OAuth" value="io.dcloud.feature.oauth.OAuthFeatureImpl"><module name="OAuth-Sina" value="io.dcloud.feature.oauth.sina.SinaOAuthService"/></feature>
小米登陆
需要拷贝的文件
需要将以下jar文件拷贝到工程中
| 路径 | 文件 |
|---|---|
| SDK\libs(1.9.9.52372之前) | oauth.jar, oauth-miui.jar, oauth.1.5.1.jar |
| SDK\libs(1.9.9.52372之后) | oauth-miui-release.aar |
Androidmainfest.xml文件需要修改的项
需要在application节点前添加权限
<uses-permission android:name="com.xiaomi.permission.AUTH_SERVICE"/>
application节点下配置如下代码
<meta-data android:value="_%小米登陆的APPID%" android:name="MIUI_APPID"/>
<meta-data android:value="%小米登陆的APPSecret%" android:name="MIUI_APPSECRET"/>
<meta-data android:value="%小米登陆的RegURL%" android:name="MIUI_REDIRECT_URI"/>
<activity android:name="com.xiaomi.account.openauth.AuthorizeActivity"/>
properties.xml需要添加如下代码
properties.xml文件在ADT工程assets/data目录下
Features节点下添加
<feature name="OAuth" value="io.dcloud.feature.oauth.OAuthFeatureImpl">
<module name="OAuth-MiUi" value="io.dcloud.feature.oauth.miui.MiUiOAuthService"/>
</feature> 收起阅读 »
Android平台离线打包分享插件配置
微信分享
需要拷贝的文件
需要引入工程的jar/aar文件
需要将以下jar/aar文件放到工程的libs目录下
| 路径 | 文件 |
|---|---|
| SDK\libs(旧版) | share.jar, share-weixin.jar,tx_wx.jar |
| SDK\libs(新版) | share-weixin-release.aar,wechat-sdk-android-with-mta-5.1.4.jar |
Androidmainfest.xml文件需要修改的项
需要在application节点前添加权限
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<application>节点下配置如下代码
<!-- 微信分享 配置begin -->
<meta-data android:name="WX_APPID" android:value="%微信开放平台申请应用的AppID%">
</meta-data>
<meta-data android:name="WX_SECRET" android:value="%微信开放平台申请应用的Secret%">
</meta-data>
<activity
android:name="【包名】.wxapi.WXEntryActivity"
android:label="@string/app_name"
android:exported="true"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="%微信开放平台申请应用的AppID%""/>
</intent-filter>
</activity>
<!-- 微信分享 配置 end -->
properties.xml需要添加如下代码
properties.xml文件在assets/data目录下
<feature name="Share" value="io.dcloud.share.ShareFeatureImpl"><module name="Weixin" value="io.dcloud.share.mm.WeiXinApiManager"/></feature>
提示:
1) androidmanifest.xml文件中声明的包名必须与申请微信appkey使用的包名一致,否则分享插件会调用失败
2) 微信分享测试需要使用在微信开放平台申请应用时使用的应用签名文件进行签名打包,否则无法获取好友列表。
QQ分享
需要拷贝的文件
需要引入工程的jar文件
需要将以下jar文件放到工程的libs目录下
| 路径 | 文件 |
|---|---|
| SDK\libs(旧版) | share.jar, share-qq.jar,qq_mta-sdk-1.6.2.jar,qq_sdk_v3.1.0.jar |
| SDK\libs(新版) | share-qq-release.aar,qq_mta-sdk-1.6.2.jar,qq_sdk_v3.1.0.jar |
Androidmainfest.xml文件需要修改的项
需要在application节点前添加权限
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<application>节点下配置如下代码
<!-- Share QQ start -->
<meta-data android:value="%appid%" android:name="QQ_APPID"/>
<activity android:name="com.tencent.tauth.AuthActivity" android:launchMode="singleTask" android:noHistory="true">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="%appid%"/>
</intent-filter>
</activity>
<activity android:name="com.tencent.connect.common.AssistActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:screenOrientation="portrait"/>
<!-- Share QQ end -->
properties.xml需要添加如下代码
properties.xml文件在assets/data目录下
<feature name="Share" value="io.dcloud.share.ShareFeatureImpl"><module name="QQ" value="io.dcloud.share.qq.QQApiManager"/></feature>
腾讯微博
[腾讯微博appkey申请方法] (http://ask.dcloud.net.cn/article/207)
需要拷贝的文件
需要引入工程的jar/aar文件
需要将以下jar/aar文件放到工程的libs目录下
| 路径 | 文件 |
|---|---|
| SDK\libs(旧版) | share.jar share-tencent.jar tx_wx.jar tx_weibo_sdk.jar tx_weibo_sdk_component.jar tx_weibo_sdk-httpclient-3.0.1.jar |
| SDK\libs(新版) | share-tencent-release.aar |
需要引入工程的资源文件
需要将SDK/assets目录下全部png图片放到工程的assets目录下(新版不需要设置此项)
Androidmainfest.xml文件需要修改的项
需要在application节点前添加权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>
<application>节点下配置如下代码
<!-- Share - 腾讯微博分享 -->
<!-- 官方网站:http://dev.t.qq.com/ -->
<meta-data
android:name="TENCENT_APPKEY"
android:value="_%腾讯微博开放平台申请应用的Appkey,注意前面要添加下划线%" />
<meta-data
android:name="TENCENT_SECRET"
android:value="%腾讯微博开放平台申请应用的Secret%" />
<meta-data
android:name="TENCENT_REDIRECT_URI"
android:value="%腾讯微博开放平台申请应用配置的回调地址%" />
<activity
android:name="io.dcloud.share.tencent.WebAuthorize"
android:theme="@android:style/Theme.NoTitleBar" >
</activity>
properties.xml需要添加如下代码
properties.xml文件在ADT工程assets/data目录下
<feature name="Share" value="io.dcloud.share.ShareFeatureImpl"><module name="Tencent" value="io.dcloud.share.tencent.TencentWeiboApiManager"/></feature>
提示:androidmanifest.xml文件中声明的包名必须与申请腾讯微博appkey使用的包名一致,否则分享插件会调用失败
新浪微博
需要拷贝的文件
需要引入工程的jar文件
需要将以下jar文件,so文件和cer文件放到工程的libs目录和assets目录下(新版不需要添加so和cer文件)
| 路径 | 文件 |
|---|---|
| SDK\libs(新版) | sina-libs-release.aar,share-sina-release.aar |
| SDK\libs(旧版) | share.jar share-sina.jar sinaweibo4.1.jar |
| SDK\libs\armeabi | libweibosdkcore.so |
| SDK\libs\armeabi-v7a | libweibosdkcore.so |
| SDK\libs\x86 | libweibosdkcore.so |
| SDK\assets | geo_global_ca.cer |
Androidmainfest.xml文件需要修改的项
需要在application节点前添加权限
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
application节点下配置如下代码
<!-- Share - 新浪微博分享 -->
<!-- 官方网站:http://open.weibo.com/ -->
<meta-data android:name="SINA_APPKEY" android:value="_%新浪微博开放平台申请应用的Appkey,注意前面要添加下划线%" />
<meta-data android:name="SINA_SECRET" android:value="%新浪微博开放平台申请应用的Secret%" />
<meta-data android:name="SINA_REDIRECT_URI" android:value="%新浪微博开放平台申请应用配置的回调地址%" />
<activity android:name="com.sina.weibo.sdk.web.WeiboSdkWebActivity"
android:configChanges="keyboardHidden|orientation"
android:exported="false"
android:windowSoftInputMode="adjustResize">
</activity>
<activity android:name="com.sina.weibo.sdk.share.WbShareTransActivity"
android:launchMode="singleTask"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen">
<intent-filter>
<action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
properties.xml需要添加如下代码
properties.xml文件在ADT工程assets/data目录下
<feature name="Share" value="io.dcloud.share.ShareFeatureImpl"><module name="Sina" value="io.dcloud.share.sina.SinaWeiboApiManager"/></feature>
提示:androidmanifest.xml文件中声明的包名必须与申请新浪微博appkey使用的包名一致,否则分享插件会调用失败
微信分享
需要拷贝的文件
需要引入工程的jar/aar文件
需要将以下jar/aar文件放到工程的libs目录下
| 路径 | 文件 |
|---|---|
| SDK\libs(旧版) | share.jar, share-weixin.jar,tx_wx.jar |
| SDK\libs(新版) | share-weixin-release.aar,wechat-sdk-android-with-mta-5.1.4.jar |
Androidmainfest.xml文件需要修改的项
需要在application节点前添加权限
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<application>节点下配置如下代码
<!-- 微信分享 配置begin -->
<meta-data android:name="WX_APPID" android:value="%微信开放平台申请应用的AppID%">
</meta-data>
<meta-data android:name="WX_SECRET" android:value="%微信开放平台申请应用的Secret%">
</meta-data>
<activity
android:name="【包名】.wxapi.WXEntryActivity"
android:label="@string/app_name"
android:exported="true"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="%微信开放平台申请应用的AppID%""/>
</intent-filter>
</activity>
<!-- 微信分享 配置 end -->
properties.xml需要添加如下代码
properties.xml文件在assets/data目录下
<feature name="Share" value="io.dcloud.share.ShareFeatureImpl"><module name="Weixin" value="io.dcloud.share.mm.WeiXinApiManager"/></feature>
提示:
1) androidmanifest.xml文件中声明的包名必须与申请微信appkey使用的包名一致,否则分享插件会调用失败
2) 微信分享测试需要使用在微信开放平台申请应用时使用的应用签名文件进行签名打包,否则无法获取好友列表。
QQ分享
需要拷贝的文件
需要引入工程的jar文件
需要将以下jar文件放到工程的libs目录下
| 路径 | 文件 |
|---|---|
| SDK\libs(旧版) | share.jar, share-qq.jar,qq_mta-sdk-1.6.2.jar,qq_sdk_v3.1.0.jar |
| SDK\libs(新版) | share-qq-release.aar,qq_mta-sdk-1.6.2.jar,qq_sdk_v3.1.0.jar |
Androidmainfest.xml文件需要修改的项
需要在application节点前添加权限
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<application>节点下配置如下代码
<!-- Share QQ start -->
<meta-data android:value="%appid%" android:name="QQ_APPID"/>
<activity android:name="com.tencent.tauth.AuthActivity" android:launchMode="singleTask" android:noHistory="true">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="%appid%"/>
</intent-filter>
</activity>
<activity android:name="com.tencent.connect.common.AssistActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:screenOrientation="portrait"/>
<!-- Share QQ end -->
properties.xml需要添加如下代码
properties.xml文件在assets/data目录下
<feature name="Share" value="io.dcloud.share.ShareFeatureImpl"><module name="QQ" value="io.dcloud.share.qq.QQApiManager"/></feature>
腾讯微博
[腾讯微博appkey申请方法] (http://ask.dcloud.net.cn/article/207)
需要拷贝的文件
需要引入工程的jar/aar文件
需要将以下jar/aar文件放到工程的libs目录下
| 路径 | 文件 |
|---|---|
| SDK\libs(旧版) | share.jar share-tencent.jar tx_wx.jar tx_weibo_sdk.jar tx_weibo_sdk_component.jar tx_weibo_sdk-httpclient-3.0.1.jar |
| SDK\libs(新版) | share-tencent-release.aar |
需要引入工程的资源文件
需要将SDK/assets目录下全部png图片放到工程的assets目录下(新版不需要设置此项)
Androidmainfest.xml文件需要修改的项
需要在application节点前添加权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>
<application>节点下配置如下代码
<!-- Share - 腾讯微博分享 -->
<!-- 官方网站:http://dev.t.qq.com/ -->
<meta-data
android:name="TENCENT_APPKEY"
android:value="_%腾讯微博开放平台申请应用的Appkey,注意前面要添加下划线%" />
<meta-data
android:name="TENCENT_SECRET"
android:value="%腾讯微博开放平台申请应用的Secret%" />
<meta-data
android:name="TENCENT_REDIRECT_URI"
android:value="%腾讯微博开放平台申请应用配置的回调地址%" />
<activity
android:name="io.dcloud.share.tencent.WebAuthorize"
android:theme="@android:style/Theme.NoTitleBar" >
</activity>
properties.xml需要添加如下代码
properties.xml文件在ADT工程assets/data目录下
<feature name="Share" value="io.dcloud.share.ShareFeatureImpl"><module name="Tencent" value="io.dcloud.share.tencent.TencentWeiboApiManager"/></feature>
提示:androidmanifest.xml文件中声明的包名必须与申请腾讯微博appkey使用的包名一致,否则分享插件会调用失败
新浪微博
需要拷贝的文件
需要引入工程的jar文件
需要将以下jar文件,so文件和cer文件放到工程的libs目录和assets目录下(新版不需要添加so和cer文件)
| 路径 | 文件 |
|---|---|
| SDK\libs(新版) | sina-libs-release.aar,share-sina-release.aar |
| SDK\libs(旧版) | share.jar share-sina.jar sinaweibo4.1.jar |
| SDK\libs\armeabi | libweibosdkcore.so |
| SDK\libs\armeabi-v7a | libweibosdkcore.so |
| SDK\libs\x86 | libweibosdkcore.so |
| SDK\assets | geo_global_ca.cer |
Androidmainfest.xml文件需要修改的项
需要在application节点前添加权限
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
application节点下配置如下代码
<!-- Share - 新浪微博分享 -->
<!-- 官方网站:http://open.weibo.com/ -->
<meta-data android:name="SINA_APPKEY" android:value="_%新浪微博开放平台申请应用的Appkey,注意前面要添加下划线%" />
<meta-data android:name="SINA_SECRET" android:value="%新浪微博开放平台申请应用的Secret%" />
<meta-data android:name="SINA_REDIRECT_URI" android:value="%新浪微博开放平台申请应用配置的回调地址%" />
<activity android:name="com.sina.weibo.sdk.web.WeiboSdkWebActivity"
android:configChanges="keyboardHidden|orientation"
android:exported="false"
android:windowSoftInputMode="adjustResize">
</activity>
<activity android:name="com.sina.weibo.sdk.share.WbShareTransActivity"
android:launchMode="singleTask"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen">
<intent-filter>
<action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
properties.xml需要添加如下代码
properties.xml文件在ADT工程assets/data目录下
<feature name="Share" value="io.dcloud.share.ShareFeatureImpl"><module name="Sina" value="io.dcloud.share.sina.SinaWeiboApiManager"/></feature>
提示:androidmanifest.xml文件中声明的包名必须与申请新浪微博appkey使用的包名一致,否则分享插件会调用失败
收起阅读 »新浪微博appkey申请步骤
- 登陆新浪微博开放平台
- 点击“微连接”
- 点击“立即创建微连接”
- 点击“移动应用”
- 填写应用名称和应用地址,填写完成后点击创建生成新的应用,用户填写应用地址需要注意。
- 填写应用的应用平台信息
IOS : Bundle ID 必须和使用App云端打包使用的APPID一致。
appleID 获取方法
首先需要在 Itunes Connect创建一个相同Bundle ID的app,创建成功后进入信息配置页面, 可在页面中找到apple id
Android:应用的包名必须和使用App云端打包填写的包名一致。
使用Dcloud公用证书时打包时,可填写公用的应用签名,应用签名MD5值为(59201CF6589202CB2CDAB26752472112)。
- 打开新页面后可在页面中找到分配的appkey和App Secret ,用户需要按照提示填写应用的其他信息。
- 填写基本信息后设置应用的授权回调页地址,在应用的“高级信息”页面点击编辑,填写授权回调页面地址。授权回调页地址需要和在manifest文件填写的“redirect_url”字段一致。授权回调页地址需要和应用地址处于同一根域。
- 登陆新浪微博开放平台
- 点击“微连接”
- 点击“立即创建微连接”
- 点击“移动应用”
- 填写应用名称和应用地址,填写完成后点击创建生成新的应用,用户填写应用地址需要注意。
- 填写应用的应用平台信息
IOS : Bundle ID 必须和使用App云端打包使用的APPID一致。
appleID 获取方法
首先需要在 Itunes Connect创建一个相同Bundle ID的app,创建成功后进入信息配置页面, 可在页面中找到apple id
Android:应用的包名必须和使用App云端打包填写的包名一致。
使用Dcloud公用证书时打包时,可填写公用的应用签名,应用签名MD5值为(59201CF6589202CB2CDAB26752472112)。
- 打开新页面后可在页面中找到分配的appkey和App Secret ,用户需要按照提示填写应用的其他信息。
- 填写基本信息后设置应用的授权回调页地址,在应用的“高级信息”页面点击编辑,填写授权回调页面地址。授权回调页地址需要和在manifest文件填写的“redirect_url”字段一致。授权回调页地址需要和应用地址处于同一根域。
微信开放平台申请应用获取appkey
- 首先登陆微信开放平台
- 点击“创建移动应用”
- 填写“应用名称”“应用简介”并上传应用的图标文件,填写完成后点击“下一步”
- 选择支持的应用平台,并填写相应的平台信息
IOS平台
appstore下载地址在应用上传到appstroe上后填写。
Android平台
应用签名:安卓应用的唯一签名,签名方法可参考(给Android应用签名),使用Dcloud公用证书时打包时,可填写公用的应用签名,应用签名MD5值为(59201CF6589202CB2CDAB26752472112)。
应用包名:用户使用HBuilder打安卓应用包时设置的包名,应当与打包时使用的包名一致。
提示: 设置提交后需要等待微信人工审核完成才能获取应用的Appkey和appsecret
- 首先登陆微信开放平台
- 点击“创建移动应用”
- 填写“应用名称”“应用简介”并上传应用的图标文件,填写完成后点击“下一步”
- 选择支持的应用平台,并填写相应的平台信息
IOS平台
appstore下载地址在应用上传到appstroe上后填写。
Android平台
应用签名:安卓应用的唯一签名,签名方法可参考(给Android应用签名),使用Dcloud公用证书时打包时,可填写公用的应用签名,应用签名MD5值为(59201CF6589202CB2CDAB26752472112)。
应用包名:用户使用HBuilder打安卓应用包时设置的包名,应当与打包时使用的包名一致。
提示: 设置提交后需要等待微信人工审核完成才能获取应用的Appkey和appsecret
收起阅读 »腾讯微博appkey申请方法
web API图片上传
最近研究了下webapi服务器下图片的上传功能,屁话不多说,直接看代码吧
public Task<HttpResponseMessage> PostFormData()
{
// Check if the request contains multipart/form-data.
// 检查该请求是否含有multipart/form-data
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
string root = HttpContext.Current.Server.MapPath("~/userImage");
var provider = new MultipartFormDataStreamProvider(root);
// Read the form data and return an async task.
// 读取表单数据,并返回一个async任务
var task = Request.Content.ReadAsMultipartAsync(provider).
ContinueWith<HttpResponseMessage>(t =>
{
if (t.IsFaulted || t.IsCanceled)
{
Request.CreateErrorResponse(HttpStatusCode.InternalServerError, t.Exception);
}
// This illustrates how to get the file names.
// 以下描述了如何获取文件名
foreach (MultipartFileData file in provider.FileData)
{
//新文件夹路径
string newRoot = root + "\\" + provider.FormData.GetValues(1)[0].ToString();
if (!Directory.Exists(newRoot))
{
Directory.CreateDirectory(newRoot);
}
Trace.WriteLine(file.Headers.ContentDisposition.FileName);
Trace.WriteLine("Server file path: " + file.LocalFileName);
if (File.Exists(file.LocalFileName))
{
//原文件名称
string fileName = file.Headers.ContentDisposition.FileName.Substring(1, file.Headers.ContentDisposition.FileName.Length - 2);
//新文件名称 随机数
string newFileName = provider.FormData.GetValues(0)[0] + "." + fileName.Split(new char[] { '.' })[1];
File.Move(file.LocalFileName, newRoot + "\\" + newFileName);
}
}
return Request.CreateResponse(HttpStatusCode.OK);
});
return task;
}
这个也是在网上找的资料,在此基础上添加了修改文件名功能,图片会保存在userimage文件夹下的子目录(如没有userimage就手动创建个),子目录的名称为客户端task.addData("","")添加的内容,文件名为客户端生成的随机数.
最近研究了下webapi服务器下图片的上传功能,屁话不多说,直接看代码吧
public Task<HttpResponseMessage> PostFormData()
{
// Check if the request contains multipart/form-data.
// 检查该请求是否含有multipart/form-data
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
string root = HttpContext.Current.Server.MapPath("~/userImage");
var provider = new MultipartFormDataStreamProvider(root);
// Read the form data and return an async task.
// 读取表单数据,并返回一个async任务
var task = Request.Content.ReadAsMultipartAsync(provider).
ContinueWith<HttpResponseMessage>(t =>
{
if (t.IsFaulted || t.IsCanceled)
{
Request.CreateErrorResponse(HttpStatusCode.InternalServerError, t.Exception);
}
// This illustrates how to get the file names.
// 以下描述了如何获取文件名
foreach (MultipartFileData file in provider.FileData)
{
//新文件夹路径
string newRoot = root + "\\" + provider.FormData.GetValues(1)[0].ToString();
if (!Directory.Exists(newRoot))
{
Directory.CreateDirectory(newRoot);
}
Trace.WriteLine(file.Headers.ContentDisposition.FileName);
Trace.WriteLine("Server file path: " + file.LocalFileName);
if (File.Exists(file.LocalFileName))
{
//原文件名称
string fileName = file.Headers.ContentDisposition.FileName.Substring(1, file.Headers.ContentDisposition.FileName.Length - 2);
//新文件名称 随机数
string newFileName = provider.FormData.GetValues(0)[0] + "." + fileName.Split(new char[] { '.' })[1];
File.Move(file.LocalFileName, newRoot + "\\" + newFileName);
}
}
return Request.CreateResponse(HttpStatusCode.OK);
});
return task;
}
这个也是在网上找的资料,在此基础上添加了修改文件名功能,图片会保存在userimage文件夹下的子目录(如没有userimage就手动创建个),子目录的名称为客户端task.addData("","")添加的内容,文件名为客户端生成的随机数.
收起阅读 »深入理解高度。获取屏幕、webview、软键盘高度
如果没有手动调整过webview的高度的话,默认情况下,屏幕的高度=顶部状态栏的高度+webview的高度。
如果软键盘打开,则屏幕的高度=顶部状态栏的高度+webview的高度+软键盘的高度。
HTML5 规范目前没有提供状态栏高度和软键盘高度的直接的查询方法,不过有了Native.js,我们还是能查询到所有这些高度的数值。
背景知识介绍:
手机屏幕有真实的物理分辨率,比如小米note的高度是1920px。
但在网页里,一个10px的字体,并不会小的看不清,因为webview提供了逻辑分辨率的概念。
如果不在meta里设置,默认下小米note的放大系数scale是3,就是会放大3倍显示。
也就是对于HTML而言,小米note的高度是1920/3=640px。
如果网页是全屏的,没有顶部状态栏,那么一个640px高的div将撑满屏幕高度。
获取屏幕、顶部状态栏和软键盘的高度
1. 屏幕的高度
获取屏幕的高度很简单,HTML自带了screen.height,直接就可以得到屏幕的整体高度,单位是px,物理分辨率值(不是HTML的逻辑分辨率)。
HTML5Plus里提供了plus.screen.resolutionHeight方法,也是屏幕高度,但这个值是逻辑分辨率的高度。参考[http://html5plus.org/doc/zh_cn/device.html#plus.screen](http://html5plus.org/doc/zh_cn/device.html#plus.screen)
screen.height = plus.screen.resolutionHeight*plus.screen.scale
2. 获取webview高度
虽然webview的getStyle可以得到webview的高度,但开发者如果不手动设置的话,默认值是100%,这个值对本文探讨的问题没有意义。我们需要px的物理高度。
在Android里通过如下js代码可以得到webview的高度:plus.android.invoke(plus.android.currentWebview(),"getHeight")
这是一段Native.js代码,由于Android的webview原生对象就有getHeight()方法,所以就可以直接这样调用。
当然webview原生对象还有很多方法属性都可以调,具体参阅[Native.js入门](http://ask.dcloud.net.cn/docs/#http://ask.dcloud.net.cn/article/88)
图1(此图中,物理分辨率是蓝色字体,逻辑分辨率是黑色字体)
对于iOS,就没必要使用Native.js这么复杂的技术了,iOS的屏幕高度是固定的几个,直接判断屏幕高度和设备型号就可以了。
3. 获取状态栏高度
顶部状态栏比较复杂,如果webview设了全屏,那么状态栏高度就为0。
如果设置了沉浸式状态栏,状态栏透明了,虽然状态栏存在理论高度,但webview高度是全屏的。
plus.navigator.getStatusbarHeight(),这个api专门获取状态栏高度。
4. 获取输入法高度
当弹出输入法时,在Android上,webview的高度会自动减少,留出空间给软键盘。
那么输入法高度=屏幕高度-状态栏高度-webview高度
在小米note上,默认输入法高度是 863px。
图2(此图中,物理分辨率是蓝色字体,逻辑分辨率是黑色字体)
5. 流应用任务栏高度
在流应用环境中,比如iOS流应用,会有一个流应用任务栏,这个任务栏的出现会挤压webview的高度。
如果开发者要设置一个元素居底,请使用bottom方法,而不是通过屏幕高度-webview高度设top,以避免出现流应用任务栏时高度错位。
说说HTML里的几个高度
其实HTML自己也提供了很多高度相关的api,除了screen.height还有document.body.clientHeight,document.body.scrollHeight,感觉也很容易混淆。
document.body.clientHeight是网页内容区的有效高度,符合盒模型。document.body.scrollHeight是网页可滚动区域的高度。
如图2所示:
- 此时document.body.clientHeight小于webview高度,而document.body.scrollHeight等于webview高度,即document.body.scrollHeight=plus.android.invoke(plus.android.currentWebview(),"getHeight") 。
- 如果数字不是1-5,而是1-10,那么document.body.clientHeight会继续增加,但内容不够多,不会滚动,document.body.scrollHeight不变,仍是webview高度。
- 如果网页内容非常多,数字到了40,那document.body.clientHeight会继续增加,并且只要发生了滚动,则document.body.clientHeight=document.body.scrollHeight
其他相关知识。
- 监控软键盘是否弹出,Android上可以使用HTML自带的resize事件。
但是要判断横竖屏,因为横竖屏切换也会造成resize,所以高度变而宽度不变,就是软键盘弹出或消失了。 - 强制弹出键盘,也有Native.js示例,http://ask.dcloud.net.cn/question/2324
- hello uni-app和hello mui都有聊天示例模板,有底部输入框跟随键盘顶起的示例,可以参考下。
如果没有手动调整过webview的高度的话,默认情况下,屏幕的高度=顶部状态栏的高度+webview的高度。
如果软键盘打开,则屏幕的高度=顶部状态栏的高度+webview的高度+软键盘的高度。
HTML5 规范目前没有提供状态栏高度和软键盘高度的直接的查询方法,不过有了Native.js,我们还是能查询到所有这些高度的数值。
背景知识介绍:
手机屏幕有真实的物理分辨率,比如小米note的高度是1920px。
但在网页里,一个10px的字体,并不会小的看不清,因为webview提供了逻辑分辨率的概念。
如果不在meta里设置,默认下小米note的放大系数scale是3,就是会放大3倍显示。
也就是对于HTML而言,小米note的高度是1920/3=640px。
如果网页是全屏的,没有顶部状态栏,那么一个640px高的div将撑满屏幕高度。
获取屏幕、顶部状态栏和软键盘的高度
1. 屏幕的高度
获取屏幕的高度很简单,HTML自带了screen.height,直接就可以得到屏幕的整体高度,单位是px,物理分辨率值(不是HTML的逻辑分辨率)。
HTML5Plus里提供了plus.screen.resolutionHeight方法,也是屏幕高度,但这个值是逻辑分辨率的高度。参考[http://html5plus.org/doc/zh_cn/device.html#plus.screen](http://html5plus.org/doc/zh_cn/device.html#plus.screen)
screen.height = plus.screen.resolutionHeight*plus.screen.scale
2. 获取webview高度
虽然webview的getStyle可以得到webview的高度,但开发者如果不手动设置的话,默认值是100%,这个值对本文探讨的问题没有意义。我们需要px的物理高度。
在Android里通过如下js代码可以得到webview的高度:plus.android.invoke(plus.android.currentWebview(),"getHeight")
这是一段Native.js代码,由于Android的webview原生对象就有getHeight()方法,所以就可以直接这样调用。
当然webview原生对象还有很多方法属性都可以调,具体参阅[Native.js入门](http://ask.dcloud.net.cn/docs/#http://ask.dcloud.net.cn/article/88)
图1(此图中,物理分辨率是蓝色字体,逻辑分辨率是黑色字体)
对于iOS,就没必要使用Native.js这么复杂的技术了,iOS的屏幕高度是固定的几个,直接判断屏幕高度和设备型号就可以了。
3. 获取状态栏高度
顶部状态栏比较复杂,如果webview设了全屏,那么状态栏高度就为0。
如果设置了沉浸式状态栏,状态栏透明了,虽然状态栏存在理论高度,但webview高度是全屏的。
plus.navigator.getStatusbarHeight(),这个api专门获取状态栏高度。
4. 获取输入法高度
当弹出输入法时,在Android上,webview的高度会自动减少,留出空间给软键盘。
那么输入法高度=屏幕高度-状态栏高度-webview高度
在小米note上,默认输入法高度是 863px。
图2(此图中,物理分辨率是蓝色字体,逻辑分辨率是黑色字体)
5. 流应用任务栏高度
在流应用环境中,比如iOS流应用,会有一个流应用任务栏,这个任务栏的出现会挤压webview的高度。
如果开发者要设置一个元素居底,请使用bottom方法,而不是通过屏幕高度-webview高度设top,以避免出现流应用任务栏时高度错位。
说说HTML里的几个高度
其实HTML自己也提供了很多高度相关的api,除了screen.height还有document.body.clientHeight,document.body.scrollHeight,感觉也很容易混淆。
document.body.clientHeight是网页内容区的有效高度,符合盒模型。document.body.scrollHeight是网页可滚动区域的高度。
如图2所示:
- 此时document.body.clientHeight小于webview高度,而document.body.scrollHeight等于webview高度,即document.body.scrollHeight=plus.android.invoke(plus.android.currentWebview(),"getHeight") 。
- 如果数字不是1-5,而是1-10,那么document.body.clientHeight会继续增加,但内容不够多,不会滚动,document.body.scrollHeight不变,仍是webview高度。
- 如果网页内容非常多,数字到了40,那document.body.clientHeight会继续增加,并且只要发生了滚动,则document.body.clientHeight=document.body.scrollHeight
其他相关知识。
- 监控软键盘是否弹出,Android上可以使用HTML自带的resize事件。
但是要判断横竖屏,因为横竖屏切换也会造成resize,所以高度变而宽度不变,就是软键盘弹出或消失了。 - 强制弹出键盘,也有Native.js示例,http://ask.dcloud.net.cn/question/2324
- hello uni-app和hello mui都有聊天示例模板,有底部输入框跟随键盘顶起的示例,可以参考下。




















