赵工的个人空间


专业技术部分转网页计算转业余爱好部分


 手持终端

首页 > 专业技术 > 手持终端 > 使用PhoneGap开发Android应用程序
使用PhoneGap开发Android应用程序
1.PhoneGap的生命周期事件:

在PhoneGap中,系统通过JavaScript截获来自于硬件的信息,包括网络、电量、音量、按钮等方面的信息。当使用PhoneGap编写的应用处于运行状态时,如果系统接收到某种信号,那么系统就能够做出相应的反馈。PhoneGap生命周期可以划分为15种不同的事件:


名称

说明

deviceready

当设备加载完毕后会触发该事件

pause

当程序被暂停到后台运行时会触发该事件

resume

当程序被从后台激活到前台运行时会触发该事件

online

当设备网络状态改变且是从网络断开状态切换到连接状态时触发该事件

offline

当设备网络状态改变且是从网络连接状态切换到断开状态时触发该事件

batterycritical

当设备电量过低超过了某个临界点时该事件被触发,临界点值由设备决定,一般为10%

batterylow

当设备剩余电量低于某个开发者或用户指定的值时该事件被触发

batterystatus

当电池剩余电量发生1%的改变时会触发该事件

backbutton

当用户单击“返回”按钮时该事件被触发

menulbutton

当用户单击“菜单”按钮时会触发该事件

startcallbutton

当用户“按下”通话按钮时会触发该事件

endcallbutton

当用户“挂断”通话按钮时会触发该事件

volumedownbutton

当用户按下“音量减小”按钮时会触发该事件

volumeupbutton

当用户按下“音量增大”按钮时会触发该事件

searchnutton

当用户按下“搜索”按钮时触发该事件

并不是每部手机设备都具有这些按钮,比如主流安卓手机一般省略了“搜索键”,只有“返回”、“菜单”键以及PhoneGap中没有提到Home键。 这些事件可以分为被动信息事件和主动信息事件两类:

1)被动信息事件:

用于对程序运行期间设备发生的一些变化进行处理,如电池电量的变化、网络状态变化等,包括online、offline、batterycritical、batterylow、batterystatus。

2)主动信息事件:

包括backbutton、menubutton、startcallbutton、endcallbutton、volumedownbutton、volumeupnutton、searchbutton事件。
对音量增减按钮的触发事件由于与系统本身的音量功能冲突,所以在大多数场合下是无效的。目前大多数手机已经没有了通话按钮和通话结束按钮。

2.PhoneGap的消息提示:

PhoneGap的notification类中封装了一系列设备视觉、听觉和触觉的通知,可以为应用定制消息推送、警告或提示。主要包括:
利用notification.alert()弹出一个警告或者对话框
利用notification.confirm()显示一个可定制的确认对话框
利用notification.prompt()弹出一个对话框
利用notification.beep()控制蜂鸣器发出蜂鸣声
利用notification.vibrate()控制产生一定时长的振动
它们都可以使用window.navigator对象访问。

1)notification.alert():

该方法弹出一个可定制的警告或者对话框。使用语法为:
navigator.notification.alert('显示信息',alertDismissed,'标题','按钮名称');
其中,alertDismissed为警告被忽视的回调函数。这种方法,可以定义对话框的内容、回调函数、标题和按钮显示字串。当对话框弹出时,不一定要单击对话框中的按钮,单击屏幕四周的空白区域同样可以让对话框消失,这时就会调用回调函数。
大多数平台上,这种方法与JavaScript的alert方法都将会显示原生SDK相同的对话框样式。

2)notification.confirm():

该方法弹出一个可定制的验证对话框。使用语法为:
navigator.notification.confirm('显示信息',onConfirm,'标题','按钮名称');
这里,当对话框弹出时,要单击对话框中的按钮才会执行回调函数onConfirm。

3)notification.prompt():

使用语法为:
navigator.notification.prompt('显示信息',onPrompt,'标题',['是','否']);
其中,第4个参数是一个数组,可以最多定义三个按钮。回调函数中可以使用results. buttonIndex存储的对话框中按键的索引和results.input1存放的编辑框中输入的文本。

4)notification.beep():

该方法使设备发出beep声。使用语法为:
navigator.notification.beep(3);
这种方法使蜂鸣器发出声音,其中的数值为发声的次数。

5)notification.vibrate():

该方法使设备在指定时长内振动。使用语法为:
navigator.notification.vibrate(2000);
这种方法使设备振动,其中的数值为振动的时间,单位为ms。

3.获取运动传感器数据:

Accelerometer可以检测设备运动传感器,捕获设备当前加速度的偏移量,包括x、y、z三个方向的数值,并由此来触发事件。
Accelerometer提供了3种方法:
·accelerometer.getCurrentAcceleration():获取当前的加速度偏移量
·accelerometer.watchAcceleration():设置监控,以特定时间间隔获取加速度偏移量
·accelerometer.clearWatch():清除监控设置

1)获取当前的加速度偏移量:

accelerometer.getCurrentAcceleration()方法获取当前加速度偏移量,有两个参数,分别是成功后的回调函数和出现错误后的回调函数。一般情况下,该方法都应该在PhoneGap完成加载后调用。示例:
function onSuccess(acceleration){
alert('Acceleration X: '+acceleration.x+'\n'+'Acceleration Y: '+acceleration.y+'\n'+
'Acceleration Z: '+acceleration.z+'\n'+'Timestamp: '++acceleration.timestamp+'\n');
}
function onError(){
alert('onError!');
};
document.addEventListener('deviceready',onDeviceReady,false);
//PhoneGap完成加载
function onDeviceReady(){
  navigator.accelerometer.getCurrentAcceleration(onSuccess,onError);
}

2)acceleration对象属性:

支持Android平台和iOS平台。监听方法会返回一个acceleration对象,该对象包含一个特殊时间点捕获的加速度偏移量数据,包含以下几个属性:


属性

功能描述

x

x轴的偏移量,范围(0,1](Number类型)

y

y轴的偏移量,范围(0,1](Number类型)

z

z轴的偏移量,范围(0,1](Number类型)

timestamp

以ms为单位的时间戳,表示捕捉到的时间

3)以特定时间间隔获取加速度偏移量:

accelerometer.watchAcceleration()方法可以监控加速度改变,它每隔一定的时间获取一次加速度。每获取一次加速度,都会执行onSuccess回调函数,或者出现错误就会执行onError回调函数。时间间隔可以使用第三个参数设定,第三个参数是一个对象,该对象包含一个属性ferquency,用于以ms为单位指定间隔时间。
该方法返回一个id,可以与accelerometer.clearAcceleration()方法一起使用来终止加速度监控。

4.获取设备手持方向--罗盘:

对带有罗盘的手机,通过PhoneGap API可以获取罗盘的当前朝向,即设备的手持方向。有3种方法:
·compass.getCurrentHeading():获取当前的朝向
·compass.watchHanding:设置监控,以特定时间间隔获取朝向
·commpass.clearWatch:清除监控设置
语法格式为:
navigator.compass.getCurrentHeading(compassSuccess,compassError,compassOptions);
var wchID=navigator.compass.watchHeading(compassSuccess,compassError,[compassOptions]);
navigator.compass.clearHeading(wchID);
这三种方法与运动传感器的3种方法使用完全一致,只是返回值是朝向,是一个0~359.99之间的数字。

5.多媒体控制:

1)使用camera从照相机捕捉画面:

使用camera.getPicture()方法可以从设备照相机获取图片,也可以从设备上的相册库中获取图片。图片会以base64编码的字符串或者包含本地图片路径的uri方式返回。语法格式:
navigator.camera.getPicture(onSuccess,onError[,cameraOptions]);
如果设置Camera.sourceType为Camera.PictureSourceType.CAMERA(为默认值),可以打开设备默认的camera程序使用户可以拍照,拍照结束则会关闭camera程序,切换到PhoneGap。
如果设置Camera.sourceType为Camera.PictureSourceType.PHONOLIBRARY或者Camera. PictureSourceType.SAVEDPHOTOALBUM,则会显示选择图片对话框,可以从指定的相册中选择图片。
⑴处理数据:
当成功获取图片数据后,会触发onSuccess函数,并且返回值将被作为参数发送到onSuccess函数,根据所指定的caneraOptions,返回值有两种:按照base64编码的图片数据、代表本地存储系统中图片文件位置的路径字符串。
一旦获取图片数据,可以使用img标记渲染图片,或存储为本地数据,也可以发送到服务器端。示例:
navigator.camera.getPicture(onSuccess,onError,{quality:50});
function onSuccess(imageData){
var image=document.getElementById('myImage'); //获取img元素
image.src="data:image/jpeg;base64,"+imageData;
}
function onError(message){
alert('Failed because: '+message);
}
上述代码,将从相机捕捉到的数据保存为base64编码的字符串,然后在一个img元素内显示。如果要将相机捕捉到的数据保存为文件,然后在一个img元素内显示,代码为:
navigator.camera.getPicture(onSuccess,onError,{quality:50,destinationType: Camera.DestinationType.FILE_URI});
function onSuccess(imageData){
var image=document.getElementById('myImage'); //获取img元素
image.src=imageURI;
}
一些设备上的camera分辨率比较高,产生的图片比较大,推荐使用FILE_URI作为Camera. DestinationType的值,这会将图片保存为文件。
⑵cameraOptions参数:
参数cameraOptions有4个属性,默认值为:
{
quality:75,
destinationType:Camera.DestinationType.DATA_URL,
sourceType:Camera.PictureSourceType.CAMERA,
allowEdit:true
}
其中,属性quality定义保存图片的质量,取值范围[0,100];属性destinationType定义选择返回数据格式,有DATA_URL和FILE_URL两种,分别表示返回图片作为base64编码字符串和作为文件;属性sourceType设置图片来源,取值是3个常量,PHONOLIBRARY表示从图片库,CAMERA表示从相机,SAVEDPHOTOALBUM表示从保存的相册;属性allowEdit是一个逻辑值,用于设置在选择图片进行操作之前是否允许对其进行简单的编辑。
但Android平台会忽略allowEdit参数,而SAVEDPHOTOALBUM与PHONOLIBRARY显示同一个相册。iOS平台上,quality一般要设低于50,使用FILE_URL时使用Documents/tmp目录存储文件,并在程序结束后删除此目录。

2)使用capture录制语音视频和捕捉图片:

使用capture对象不但可以从照相机捕捉画面,还可以录制语音和视频。capture对象由navigator.device.capture属性获取。
var capture=navigator.device.capture;
⑴使用属性检测支持的格式:
capture对象有3个属性用于检测格式:


属性

功能描述

supportedAudioModes

返回设备支持的录音格式

supportedImageModes

返回设备支持的照相图片大小及格式

supportedVideoModes

返回设备支持录像的分辨率格式

这三个属性返回的都是ConfigurationData对象,该对象封装了一个设备所支持的多媒体参数集合,包含了MIME类型、采集尺寸(对视频、图像)信息。MIME类型采用了RFC2046所规定的标准,比如:video/3gpp image/jpeg audio/amr
ConfigurationData对象包含的属性:


属性

功能描述

数据类型

type

用小写ASCII编码字符串表示的MIME类型

DOMString

height

图像高度或者视频的高度,以像素为单位,音频的值为0

Number

width

图像高度或者视频的宽度,以像素为单位,音频的值为0

Number

⑵录音:
使用capture.captureAudio()方法可以录音,并最终返回采集到的音频剪辑文件。语法:
navigator.device.capture.captureAudio(captureSuccess,captureError[,captureOptions]);
该方法使用异步的方式通过设备默认的音频录制程序采集音频,并允许设备使用者可以一次采集多个文件。当用户退出音频录制程序或者录制数达到上限时,采集动作会自动结束。可以通过指定参数CaptureAudioOptions的limit属性来修改最大录制数。如果没有设置此参数,默认值为1。
当采集操作完成后,会自动调用回调函数captureSuccess,该函数的参数为MediaFile对象数组。每个MediaFile对象都表明了一个被采集到的媒体文件。如果在采集到一个音频剪辑之前用户就结束了操作,那么回调函数captureError将被调用,返回的错误代码可以通过error. code属性访问到。
参数captureOptions封装音频采集的配置选项,有几个属性:


属性

功能描述

limit

指定在一个会话期间能够录制的最多音频剪辑数量,默认为1

duration

指定一个音频剪辑的最长时间,以s为单位

mode

指定音频模式,值必须与capture.supportedAudioModes返回值中的type属性值匹配

Android平台不支持duration和mode,iOS对3个属性都不支持。

3)捕捉图片:

使用capture.captureImage()方法可以启用照相程序捕捉图片,并且返回采集到的图像文件。语法格式:
navigator.device.capture.captureImage(captureSuccess,captureError[,captureOptions]);
这个方法用异步的方式启动设备的照相程序以采集图片,并允许设备使用者一次捕捉多张图片。当用户退出照相程序或者采集数达到上限时,采集动作会自动结束。可以通过指定参数CaptureImageOptions的limit属性来修改最大录制数。如果没有设置此参数,那么默认值为1。
参数captureOptions封装图片采集的配置选项,有几个属性:


属性

功能描述

limit

指定在一个会话期间能够捕捉的最多图片数量,默认为1

mode

指定图形模式,值必须与capture.supportedImageModes返回值中的type属性值匹配

Android平台不支持参数mode,只能保存为jpeg格式;iOS对2个属性都不支持。

4)录制视频:

使用capture.captureVideo()方法可以开启默认的录像应用程序,并且返回采集到的视频剪辑文件的相关信息。语法格式:
navigator.device.capture.captureVideo(captureSuccess,captureError[,captureOptions]);
该方法用异步的方式启动设备的视频录像程序以采集视频,并允许设备使用者一次捕捉多个视频片段。当用户退出视频录制程序或者录制数达到上限时,采集动作会自动结束。可以通过指定参数captureOptions的limit属性来修改最大录制数。如果没有设置此参数,那么默认值为1。
参数captureOptions封装视频采集的配置选项,有几个属性:


属性

功能描述

limit

指定在一个会话期间能够录制的最多视频剪辑数量,默认为1

duration

指定一个视频剪辑的最长时间,以s为单位

mode

指定视频模式,值必须与capture.supportedVideoModes返回值中的type属性值匹配

Android平台不支持duration和mode,iOS对3个属性都不支持。

5)获取多媒体文件信息:

MediaFile封装了一个被采集的多媒体文件的信息,包含以下属性:


属性

功能描述

数据类型

name

文件的名字,不包含路径

DOMString

fullPath

文件的全路径名

DOMString

type

文件的MIME类型

DOMString

lastModifiesDate

文件的最后修改时间

Date

size

文件大小,以byte为单位

Number

除此之外,使用mediaFile.getFormatData()方法还可以获取被采集的媒体文件的格式信息。语法格式为:
mediaFile.getFormatData (MediaFileSuccessCB successCallback[,MediaFileDataErrorCB errorCallback]);
该方法使用异步方式获得媒体文件的格式,如果成功则调用回调函数successCallback,如果失败则调用回调函数errorCallback。
MediaFileData对象封装了一个媒体文件的格式信息,包含以下属性:


属性

功能描述

数据类型

codecs

音频及视频内容的实际格式

DOMString

bitrate

内容的平均比特率,对图形文件为0

Number

height

图形或视频以像素为单位的高度,音频剪辑的值为0

Number

width

图形或视频以像素为单位的宽度,音频剪辑的值为0

Number

duration

视频或音频剪辑的时长,以s为单位,图形文件的值为0

Number

Android不支持codecs和bitrate属性,iOS不支持codecs属性。

6)使用Media录制音频和控制音频播放:

使用PhoneGap的Media类可以实现录音功能和对音频的播放控制。使用构造方法可以创建一个Media示例,语法格式为:
var media=new Media(src[,mediaSuccess[,mediaError]]);
其中,参数src指定要播放的音频文件,通常是一个MP3或AAC编码文件;参数mediaSuccess指定一个回调函数,当Media对象播放、录制结束或者停止播放时就会调用该函数;参数mediaError可选,指定一个回调函数,当Media对象的操作出现错误时调用该函数。iOS系统还可以使用第4个参数,预处理加载音频文件。
类定义有如下方法:


方法

功能描述

media.getCurrentPosition

返回当前的播放位置

media.getDuration

返回当前音频的长度

media.play

开始播放或继续以前暂停的播放

media.pause

暂停播放

media.release

释放占用的操作系统的音频资源

media.startRecord

开始录制音频

media.stopRecord

停止录制

media.stop

停止播放

⑴media.getCurrentPosition方法:
该方法获取当前的播放位置,如果成功,就调用回调函数mediaSuccess,并将位置信息作为参数传递给该函数,也可以定义可选的参数mediaError,当操作错误时就会调用该函数,语法格式:
media.getCurrentPosition(mediaSuccess[,mediaError])
⑵media.getDuration方法:
该方法返回当前音频的长度,以秒为单位,如果长度未知,则返回-1。该方法没有参数。语法格式:
media.getDuration();
⑶media.play、media.pause和media.stop方法:
分别表示播放、暂停和停止。暂停播放后,还可以使用media.play方法在暂停的位置恢复播放。
⑷media.release方法:
释放占用的操作系统的音频资源,该方法对Android系统非常重要。
⑸media.startRecord和media.stopRecord方法:
分别用来开始录制和停止录制。
⑹MediaError对象:
出错回调函数的参数是一个MediaError对象,包含code和message两个属性,分别为出错码和出错描述信息字符串。其中的出错码是以下常量之一:
MediaError.MEDIA_ERR_ABORTED
MediaError.MEDIA_ERR_NETWORK
MediaError.MEDIA_ERR_DECODE
MediaError.MEDIA_ERR_NONE_SUPPORTED

6.获取连接信息:

使用PhoneGap API可以判断连接类型,也可以检测连接能否建立。

1)判定连接类型:

使用Connection类的type属性可以获取当前设备的网络连接类型,返回值为以下常量:
Connection.UNKNOWN    Connection.ETHERNET    Connection.WIFI  
Connection.CELL_2G    Connection.CELL_3G    Connection.CELL_4G
Connection.NONE
window.connect属性可以返回Connection类的一个实例,然后可以调用type属性。示例:
function checkConnect(){
var networkState=navigator.network.connection.type;
var states={};
states[Connect.UNKNOWN]='未知的连接类型';
states[Connect.ETHERNET]='Ethernet连接';
states[Connect.WIFI]='WiFi连接';
states[Connect.CELL_2G]='Cell 2G连接';
states[Connect.CELL_3G]='Cell 3G连接';
states[Connect.CELL_4G]='Cell 4G连接';
states[Connect.NONE]='没有网络连接';
alert('当前连接类型:'+states[networkStates]);
}
checkConnection();

2)判定连接能否建立:

PhoneGap内置的network对象的isReachable()方法可用于检查当前连接是否可以连接到指定域名。如果可以连接,通过返回的数据,可以获取连接通过何种类型连接。语法为:
network.isReachable(reachableHostname,reachableCallback[,reachableOptions])
其中,reachableHostname定义一个字符串,用于表示要检测的远程主机。可以是一个域名或一个IP地址。下面都是有效的主机名:
var hostname='phonegap.com';
var hostname='192.168.0.1';
var hostname='localhost';
参数reachableOptions可选,用于指定选项,它是一个对象,目前仅可以指定isIpAddress属性,该属性表示reachableHostname是否为IP地址,默认为false。
{isIpAddress:false}
参数reachableCallback指定一个结果处理的回调函数,因为network.isReachable()是一个异步方法,所有网络状态将通过该回调函数返回。
function reachableCallback(reachability){
//检测可到达性的状态
}
回调函数有一个参数reachability,表示设备的网络状态,返回值可以使用NetworkStatus对象值定义的3个常量之一表示:
NetworkStatus.NOT_REACHABLE
NetworkStatus.REACHABLE_VIA_WIFI_NETWORK
NetworkStatus.REACHABLE_VIA_CARRIER_DATA_NETWORK
这3个常量分别表示:不可到达、通过WIFI连接到、通过蜂窝电话网络连接到。但是,每个平台对reachability参数的支持不一致,可以直接使用reachability,也可以使用reachability. code,或者reachability.message,一般都可以使用reachability.code,获取返回值,可以在下面的平台细节列表中查看相关内容。示例代码:
function reachableCallback(reachability){
//没有可到达性的一致格式
var networkState=reachability.code||reachability;
var states={};
states[NetworkStatus.NOT_REACHABLE]='无网络连接';
states[NetworkStatus.REACHABLE_VIA_WIFI_NETWORK]='WiFi网络';
states[NetworkStatus.REACHABLE_VIA_CARRIER_DATA_NETWORK]='蜂窝网络';
alert('连接类型:'+states[networkStates]);
}
navigator.network.isReachable('phonegap.com',reachableCallback);
iOS只提供当前有效连接的类型,并不能检查主机是否有效,代码为:
function reachableCallback(reachability){
//没有可到达性的一致格式
var networkState=reachability.code;
alert('连接类型:'+networkStates+'-'+reachability.message);
}

7.获取设备相关信息:

使用device对象可以获取设备的硬件和软件的相关信息,属性见下表:


属性

功能描述

device.name

返回设备的型号名称,一般由生产厂商设置,有可能包含版本号

device.phonegap

返回PhoneGap版本号

device.platform

返回设备使用的操作系统名称,如Android、iPhone、iOS

device.uuid

返回标示该设备的唯一ID。UUID是由设备生产商以及特定平台决定

device.veision

返回操作系统的版本号

示例代码:
document.addEventListener("deviceready",onDeviceReady,false);
//PhoneGap准备完毕
function onDeviceReady(){
 alert('Device Name: '+device.name+"\n"+'Device PhoneGap: '+device.phonegap+"\n"
+'Device Platform: '+device.platform+"\n"+'Device UUID: '+device.uuid+"\n"
+'Device Version: '+device.version+"\n");
}

8.处理事件:

PhoneGap在生命周期内可能产生4个事件,见下表:


属性

功能描述

backbutton

当用户在Android系统上点击“后退”按钮时触发该事件

deviceready

只有当PhoneGap被完全加载后这个事件才被触发

pause

当PhoneGap程序被放到后台时触发此事件

resume

当PhoneGap程序从后台回复到前台运行时触发此事件

对于任何一个PhoneGap应用程序来说,deviceready都非常重要,而且一定会用到。PhoneGap包含原生代码库和JavaScript代码库两套代码库。当原生代码加载时,表示正在加载的图片会被显示出来,一旦DOM加载完成,JavaScript也会加载,有可能Web应用程序在PhoneGap原生库加载完成之前就会调用一个PhoneGap JavaScript API,这是不完全的。PhoneGap一旦加载完成就会发出一个deviceready事件,当设备发出这个事件后,就可以很安全地调用PhoneGap JavaScript API。示例代码:
document.addEventListener("deviceready",onDeviceReady,false);
//PhoneGap准备完毕
function onDeviceReady(){
 //这里写调用PhoneGap JavaScript API 的代码
}

9.地理位置定位Geolocation:

对尚未实现W3C的Geolocation的设备,PhoneGap将使用设备内置的实现来执行Geolocation功能。API与W3C的Geolocation完全相同。

10.Web SQL Database和Web存储:

对尚未实现W3C的Web SQL Database和Web Storage,PhoneGap将使用设备内置的实现来执行Web SQL Database和Web Storage功能,API与W3C的Web SQL Database和Web Storage完全相同。

11.管理手机通讯录数据库:

可以使用PhoneGap的API管理手机内置的通讯录数据库来创建、删除、更新联系人,也可以查询联系人。PhoneGap将一个联系人使用一个Contact对象表示,该对象包含联系人的各种信息字段,如姓名、地址、电话等,每个信息字段就是Contact对象的一个属性。

1)联系人信息字段:

Contact对象包含了一些属性用于描述该联系人的信息,通过更改或者读取这些属性就可以管理联系人。属性见下表:


属性

功能描述

数据类型

id

全局唯一id标识

DOMString

displayname

联系人名称

DOMString

name

包含联系人个人全名的一个对象

ContactName

nickname

联系人昵称

DOMString

phoneNumber

包含联系人全部联系电话号码的数组

ContactField[]

emails

包含联系人全部E-mail地址的数组

ContactField[]

address

包含联系人全部联系地址的数组

ContactAddresses[]

ims

包含联系人全部IM地址的数组

ContactField[]

organizations

包含联系人所属全部组织的数组

ContactOrganization[]

revision

联系人数据最后一次更新的时间

DOMString

birthday

联系人生日

Date

gender

联系人性别

DOMString

node

联系人的说明

DOMString

photos

联系人头像的数组

ContactField[]

categories

放置联系人所属类别的数组

ContactField[]

urls

放置与联系人相关网页的数组

ContactField[]

timezone

联系人所属时区

DOMString

并不是所有平台都支持以上所列的字段,而且随平台版本也有差别。
使用Contact对象公开的属性和方法,可以处理联系人信息,一个Contact对象代表一个联系人。Contact对象可以从设备通讯录数据库中被建立、存储或者删除,同样可以使用contacts. find方法从数据库中检索出Contact对象。一旦获得了对Contact对象的引用,就可以使用Contact公开的属性和方法处理该联系人。

2)联系人信息字段所使用的复杂数据类型:

联系人信息某些字段使用的数据类型是一些复杂数据类型,是一些对象,包括ContactField、ContactName、ContactAddress和ContactOrganization。
⑴ContactField:
该对象表示在Contact对象中使用的通用字段,一些属性,如email、phone、url,使用ContactField对象存储。该对象包含的属性见下表:


属性

功能描述

数据类型

type

说明字段类型的字符串

DOMString

value

字段的值,如电话号码或者E-mail地址

DOMString

pref

如果自定义字段包含用户偏好设置,这个字段用设为true

Boolean

大多数情况下,一个ContactField对象中type属性的值并不能预先确定,比如电话号码可能有home、work、iphone类型值。对通讯录头像,type字段指示图片的格式,URL指示value字段中是一个指向图片的URL地址,而base64则指示value字段内包含经base64编码的图片数据。Android和iOS都不支持pref属性,总返回false。
⑵ContactName:
是通讯录中存储联系人姓名的对象,该对象可以使用的属性见下表:


属性

功能描述

数据类型

formatted

联系人全名

DOMString

familyName

联系人的姓氏

DOMString

givenName

联系人的名字

DOMString

middleName

联系人的中间名

DOMString

honorificPrefix

联系人称呼前缀,如Mr.

DOMString

honorificSuffix

联系人的名字后缀,如Esq.和PhD.

DOMString

Android可以读取formatted字段,将返回后面5个字段的连接字符串作为结果,但不会存储该属性的值。
⑶ContactAddress:
表示Contact对象的一个address,每个Contact对象可以包含多个ContactAddress,每个ContactAddress可以使用下述属性描述:


属性

功能描述

数据类型

formatted

全地址格式显示

DOMString

streeAddress

全街道地址显示

DOMString

locality

城市或区域

DOMString

region

地区或国家

DOMString

postalCode

邮政编码

DOMString

country

国家名称

DOMString

iOS不支持formatted属性。
⑷ContactOrganization:
该对象用于存储联系人所属组织的属性,一个联系人对象可以在数组中存储一个或多个ContactOrganization对象。该对象可以使用的属性见下表:


属性

功能描述

数据类型

name

组织名称

DOMString

department

联系人工作的部门

DOMString

title

联系人在组织内的头衔

DOMString

Android不支持title属性。

3)创建一个新的联系人:

使用contacts.create()方法可以创建一个新的联系人,该方法同时返回一个新的Contact对象。语法格式为:
var contact=navigator.service.contacts.create([properties]);
其中,参数properties是可选的,指定一个Object,该对象包含有描述该联系人的信息。如果省略该参数,那么可以在返回Contact对象后使用属性添加这些信息。
但是,该方法不会立即更新设备上的通讯录数据库,需要调用Contact.save()方法才能更新。
示例:
var ocontact=navigator.service.contacts.create("displayName":"张三","gender":"男");

4)查询联系人:

使用contacts.find()方法可以查询设备通讯录数据库,返回一个或多个Contact对象。一个Contact对象表示一个联系人,其字段包含指定的联系人信息字段。返回的Contact对象会作为参数传递给回调函数contactSuccess。语法格式为:
navigator.service.contacts.find(contactFields,contactSuccess,contactError,contactFindOptions);;
其中,参数contactFields定义搜索限定词,也就是联系人的信息字段,在返回的Contact对象中仅包含这些指定的信息字段;参数contactSuccess定义一个回调函数,当从通讯录数据库中成功返回Contact对象时调用该函数,并将Contact对象数组作为参数传递给该回调函数;参数cantactError定义一个回调函数,当发生错误时调用此函数;参数contactFindOptions定义过滤通讯录的搜索选项,这是一个Object,包含很多属性,每个属性定义一些过滤特征。
示例:
function onSuccess(contacts){
alert('共有'+contacts.length+'联系人符合查询条件');
};
function onError(){
alert('查询操作范围!');
}
var options=new ContactFindOptions();
options.filter="Bob";
var fields=["displayName","name"]; //结果中包含这两个信息字段
navigator.service.contacts.find(fields,onSuccess,onError,options);
主要,必须在contactFields参数中指定通讯录中的信息字段以作为搜索限定词,一个0长度的contactFields参数将返回一个只包含id属性的Contact对象数组。参数contactFindOptions中的filter属性指定一个字符串作为查询通讯录数据时的搜索过滤器。filter属性的值不区分大小写,匹配部分值的规则应用到contactFields参数的每个字段。
在没有符合条件的结果时,iOS返回数组属性为null,其他平台则返回一个空数组。
contactFindOption是用于对contacts.find的返回结果进行过滤操作,是一个Object,包括属性见下表:


属性

功能描述

数据类型

filter

用于搜索通讯录的搜索字符串,默认值为空字符串

DOMString

multiple

确定查找操作是否可以返回多条通讯录的内容,默认值为ture

Boolean

updatedSince

返回自指定日期之后更新内容的通讯录,默认为空字符串

Date

Android平台不支持updatedSince属性。
ContactError对象用于所有出错回调函数的参数,该对象有一个code属性,属性值对应下面几个常量:
ContactError.UNKNOWN_ERROR、ContactError.INVALID_ARGUMENT_ERROR、
ContactError.NOT_FOUND_ERROR、ContactError.TIMEOUT_ERROR、
ContactError.PENDING_OPERATION_ERROR、ContactError.IO_ERROR、
ContactError.NOT_SUPPORTED_ERROR、ContactError.PERMISSION_DENIED_ERROR

5)克隆联系人:

使用Contact.clone()方法可以克隆一个Contact对象,返回Contact对象的一个副本。这个克隆是一个深度克隆,字段及其值完全相同,只是id属性被设置为null。该方法没有参数,示例:
var clone=oContact.clone();
clone.name.givenName="John";
console.log("原有名字="+oContact.name.givenName);
console.log("副本名字="+clone.name.givenName);

6)删除联系人:

使用Contact.remove()方法可以从通讯录数据库中删除某个联系人。该方法的语法格式为:
oContact.remove(onSuccess,onError);
如果删除操作成功,就会调用回调函数onSuccess,这个回调函数没有参数。如果删除操作没有成功,就会调用出错回调函数onError,并将ContactError对象作为参数传递给回调函数。
示例:
function onSuccess(){
alert("删除操作成功");
}
function onError(contactError){
alert("删除操作失败="+contactError.code);
};
oContact.remove(onSuccess,onError);

7)保存联系人:

使用Contact.save()方法可以将一个新联系人存储到通讯录数据库中,如果通讯录数据库中包含有与当前Contact相同id的记录,那么将执行更新操作。语法格式为:
oContact.save(onSuccess,onError);
如果操作成功,就会调用回调函数onSuccess,这个回调函数没有参数。如果操作没有成功,就会调用出错回调函数onError,并将CantactError对象作为参数传递给回调函数。示例:
document.addEventListener("deviceready",onDeviceReady,false);
function onDeviceReady(){
var oContact=navigator.service.contacts.create();
oContact.displayName="李四";
oContact.gender="男";
var name=new ContactName();
name.givenName="元霸";
name.familyName="李";
oContact.name=name;
oContact.save(onSuccess,onError);
}
function onSuccess(contacts){
alert("成功");
}
function onError(contactError){
alert("失败:"+contactError.code);
}

12.文件系统处理:

PhoneGap也定义了用于文件系统处理的API,包含多个类和接口。

1)获取文件系统:

LocalFileSystem接口提供了一种获得根系统文件系统的方式,window实现了该接口。它定义了两种方法获取根文件系统:
·requestFileSystem:请求一个文件系统
·resolveLocalFileSystemURL:以本地URI为参数获得DirectoryEntry及FileEntry。
还定义了几个常量用作方法的参数有:
·LocalFileSystem.PERSISTENT:表示不经过应用程序或者用户允许,就无法修改存储,一般用于持久化存储
·LocalFileSystem.TEMPORARY:用于不需要保证持久化的存储类型
示例:
function onSuccess(fileSystem){
console.log(fileSystem.name);
console.log(fileSystem.root.name);
}
function onError(error){
alert(error.code);
}
window.requestFileSystem(LocalFileSystem.PERSISTENT,0,onSuccess,onError);
回调函数的参数是一个FileSystem对象,它表示了文件系统的信息,文件系统的名字是唯一的,使用name属性可以返回。root属性可以返回文件系统根目录,这是一个DirectoryEntry对象。
解析本地文件系统URI的简单示例:
function onSuccess(fileEntry){
console.log(fileEntry.name);
}
function onError(error){
alert(error.code);
}
window.resolveLocalFileSystemURI("file:///example.txt",onSuccess,onError);

2)目录处理:

PhoneGap使用DirectoryEntry类来处理文件系统目录,一个DirectoryEntry示例就代表文件系统内的一个目录,使用其公开的方法和属性可以处理目录。属性见下表:


属性

功能描述

数据类型

isFile

总是返回false

Boolean

isDirectory

总是返回true

Boolean

name

DirectoryEntry的名字,不包含前置目录

DOMString

fullPath

从根到此目录条目完整的绝对路径

DOMString

W3C规范内定义了filesystem属性用于获取目录所在的文件系统,但PhoneGap并不支持。
DirectoryEntry对象的方法见下表:


方法

功能描述

getMetadata

获得目录的元数据

moveTo

移动一个目录到文件系统中不同的位置

copyTo

复制一个目录到文件系统中不同的位置

toURI

返回一个可以定位目录的URI

remove

删除一个目录,这个目录必须是空的

getParent

查找父级目录

createReader

建立一个可以从目录中读取条目的新DirectoryReader对象

getDirectory

建立或者寻找一个目录

getFile

建立或者寻找一个文件

removeRecusively

删除一个目录以及它内部的所有内容

⑴getMetadata方法:
该方法用来查找目录的元数据,语法格式为:
getMetadata(onSuccess,onError)
其中,参数onSuccess定义一个回调函数,成功执行该方法后就调用这个回调函数,并传递一个Metadata对象作为参数。参数onError定义一个回调函数,当该方法出现错误后就调用这个回调函数,并传递一个FileError对象作为参数。示例:
function onSuccess(metadata){
console.log("Last Modified: "+metadata.modificationTime);
}
function onError(error){
alert(error.code);
}
entry.getMetadata(onSuccess,onError);
回调函数返回的元数据对象代表了文件或目录的元信息,DirectoryEntry.getMetadata()方法和FileEntry.getMetadate()方法都可以返回元数据对象。当前,该对象仅包含一个属性modificationTime,用于表示最后修改的时间。
⑵moveTo方法:
该方法用来移动一个目录到文件系统中不同的位置。在把一个目录移动到另外的一个已经存在的空目录上时,PhoneGap会尝试去删除或者替换已存在的目录。语法格式:
entry.moveTo(parentEntry,newName,onSuccess,onError);
其中,参数parentEntry指定一个标示父级目录的DirectoryEntry对象;参数newName可选,指定目录的新名字,如果没有指定则为当前名字;参数onSuccess定义一个回调函数,成功执行该方法后就调用这个回调函数,并传递一个DirectoryEntry对象作为参数;参数onError定义一个回调函数,当该方法执行出现错误后就调用这个回调函数,并传递一个FileError对象作为参数。示例:
function onSuccess(entry){
console.log("New Path: "+entry.fullPath);
}
function onError(error){
alert(error.code);
}
function moveDir(entry){
var parentEntry=new DirectoryEntry({fullPath:"/document"});
entry.moveTo(parentEntry,newName,onSuccess,onError);
}
做以下尝试会发生错误:移动目录到其自身,或移动到其任意深度的子目录中;在当前父目录中移动,但没有指定一个不同的目录名;目录所要移动到的目标路径以及有同名的文件;目录所要移动到的目标路径已经有同名并且不为空的目录。
⑶copyTo方法:
该方法用来复制一个目录到文件系统不同的路径,目录复制总是递归的,它们会复制目录中的所有内容。语法格式为:
entry.copyTo(parentEntry,newName,onSuccess,onError);
其中,参数parentEntry指定一个标示父级目录的DirectoryEntry对象;参数newName可选,指定目录的新名字,如果没有指定则为当前名字;参数onSuccess定义一个回调函数,成功执行该方法后就调用这个回调函数,并传递一个DirectoryEntry对象作为参数;参数onError定义一个回调函数,当该方法执行出现错误后就调用这个回调函数,并传递一个FileError对象作为参数。
做以下尝试时会发生错误:复制一个目录到其任意深度的子目录中;还是在当前父目录中复制,但是没有指定一个不同的目录名。
⑷remove方法:
该方法用来删除一个目录。语法格式为:
entry.remove(onSuccess,onError);
其中,参数onSuccess定义一个回调函数,成功执行该方法后就调用这个回调函数,该函数没有参数;参数onError定义一个回调函数,当该方法执行出现错误后就调用这个回调函数,并传递一个FileError对象作为参数。
当有以下行为时会发生错误:删除一个非空目录;删除文件系统的根目录。示例:
function onSuccess(entry){
console.log("Removal succeeded ");
}
function onError(error){
alert('操作没有成功:'+error.code);
}
entry.remove(onSuccess,onError);
⑸getParent方法:
该方法用来查找包含此目录的父级目录。语法格式为:
entry.getParent(onSuccess,onError);
其中,参数onSuccess定义一个回调函数,成功执行该方法后就调用这个回调函数,并传递标示父级目录的DirectoryEntry对象作为参数;参数onError定义一个回调函数,当该方法执行出现错误后就调用这个回调函数,并传递一个FileError对象作为参数。
⑹createReader方法:
该方法建立一个新的DirectoryReader对象,用来读取目录的条目。语法格式为:
entry.createReader();
⑺getDirectory方法:
该方法用来新建或查询一个已经存在的目录。语法格式为:
entry.getDirectory(path,options,onSuccess,onError);
其中,参数path定义用来查找或建立目录的路径,可以是一个绝对路径或者是一个相对路径;参数options是一个Object,用于指定当指定目录不存在时是否新建目录;参数onSuccess定义一个回调函数,成功执行该方法后就调用这个回调函数,并传递一个DirectoryEntry对象作为参数;参数onError定义一个回调函数,当该方法执行出现错误后就调用这个回调函数,并传递一个FileError对象作为参数。
参数options可以指定的属性见下表:


属性

功能描述

create

用于说明文件或者目录如不存在是否将被建立

exclusive

单独使用此参数不会有任何影响;配合create使用,当目标路径存在时,有可能导致建立目录或文件失败

在试图建立一个不存在直接父级目录的目录时会发生错误。
示例:
function onSuccess(parent){
console.log("Parent Name:"+parent.name);
}
function onError(error){
alert('操作没有成功:'+error.code);
}
entry.getParent(onSuccess,onError);
⑻getfile方法:
该方法用来创建或者查找一个文件。语法格式为:
entry.getFile(path,options,onSuccess,onError);
其中,参数path定义用来查找或建立文件的路径,可以是一个绝对路径或者是一个相对路径;参数options是一个Object,用于指定当指定文件不存在时是否新建文件;参数onSuccess定义一个回调函数,成功执行该方法后就调用这个回调函数,并传递一个DirectoryEntry对象作为参数;参数onError定义一个回调函数,当该方法执行出现错误后就调用这个回调函数,并传递一个FileError对象作为参数。
当试图建立一个不存在直接父级目录的文件时会发生错误。
⑼removeRecursively方法:
该方法用来删除一个目录及其内容。如果接收到一个错误信息(如目录中包含不能删除的文件),这时一部分文件就会被删除掉。语法格式为:
entry.removeRecursively(onSuccess,onError);
其中,参数onSuccess定义一个回调函数,成功执行该方法后就调用这个回调函数,该函数没有参数;参数onError定义一个回调函数,当该方法执行出现错误后就调用这个回调函数,并传递一个FileError对象作为参数。
如果试图删除文件系统中的根目录则会发生错误。

3)遍历目录:

DirectoryReader表示目录中文件及子目录组成的列表,可以使用readEntries()方法读取列表中的条目,然后遍历这些条目。语法格式:
directoryReader.readEntries(onSuccess,onError);
其中,参数onSuccess定义一个回调函数,成功执行该方法后就调用这个回调函数,并传递一个DirectoryEntry对象作为参数;参数onError定义一个回调函数,当该方法执行出现错误后就调用这个回调函数,并传递一个FileError对象作为参数。示例:
function onSuccess(entries){
var i;
for(i=0;i<entries.length;i++){
console.log(Entries[i].name);
}
}
function onError(error){
alert('Failed to list directory contents:'+error.code);
}
var directoryReader=dirEntry.createReader;
directoryReader.readEntries(onSuccess,onError);

4)文件处理:

PhoneGap使用FileEntry类来处理文件系统目录,一个FileEntry实例就代表文件系统内的一个文件,使用其公开的属性和方法可以处理文件。FileEntry的属性见下表:


属性

功能描述

数据类型

isFile

总是返回true

boolean

isDirectory

总是返回false

boolean

name

FileEntry的名字,不包含前置目录

DOMString

fullPath

从根到此文件条目完整的绝对路径

DOMString

W3C规范定义了filesystem属性,用于获取文件所在的文件系统,但PhoneGap并不支持。
FileEntry对象的方法见下表:


方法

功能描述

getMetadata

获得文件的元数据

moveTo

移动一个文件到文件系统中不同的位置

copyTo

复制一个文件到文件系统中不同的位置

toURI

返回一个可以定位文件的URI

remove

删除一个文件

getParent

查找父级目录

createWriter

建立一个可用于写文件的FileWrite对象

file

建立一个包含文件属性的File对象

这些方法的使用与前面目录操控的方法基本相同,但有专用的文件操控方法:
⑴file()方法:
该方法返回文件的当前状态,此状态用File对象来表示。语法格式:
entry.file(onSuccess,onError);
其中,参数onSuccess定义一个回调函数,成功执行该方法后就调用这个回调函数,并传递一个File对象作为参数;参数onError定义一个回调函数,当该方法执行出现错误后就调用这个回调函数,并传递一个FileError对象作为参数。
File对象可以使用的属性见下表:


属性

功能描述

数据类型

name

文件名字

DOMString

fullPath

从根到此文件条目完整的绝对路径

DOMString

type

文件的MIME类型

DOMString

lastModifiedDate

文件最后修改时间

Date

size

文件的byte大小

long

示例:
function onSuccess(file){
console.log("File size: "+file.size);
}
function onError(error){
alert(error.code);
}
entry.file(onSuccess,onError);
⑵createWrite()方法:
该方法建立一个与当前文件关联的FileWrite对象,使用FileWrite对象可以修改文件的内容。语法格式为:
entry.createWrite(onSuccess,onError);
其中,参数onSuccess定义一个回调函数,成功执行该方法后就调用这个回调函数,并传递一个FileWrite对象作为参数;参数onError定义一个回调函数,当该方法执行出现错误后就调用这个回调函数,并传递一个FileError对象作为参数。示例:
function onSuccess(write){
writer.write("Some text to the file ");
}
function onError(error){
alert(error.code);
}
entry.createWriter(onSuccess,onError);

5)修改文件内容:

使用FileWriter类可以修改文件的内容。首先使用FileEntry.createWriter()方法返回一个FileWriter实例,然后就可以应用该类的方法和属性。FileWriter类的属性见下表:


属性

功能描述

数据类型

readyState

其值为以下3个字符串之一:INIT、WRITING、DONE

DOMString

fileName

要写入的文件的文件名

DOMString

length

要写入内容的长度

long

position

当前的位置指针

long

error

包含错误信息的对象

FileError

onwritestart

当开始写时被调用

Function

onprogress

正在写文件时被调用,反馈写入进度(当前未支持)

Function

onwrite

当请求成功完成后被调用

Function

onabort

当终止写文件时被调用,如调用abort方法

Function

onerror

当发生错误时被调用

Function

onwriteend

当请求完成后调用,成功或失败都会调用

Function

FileWriter对象可调用的方法见下表:


方法

功能描述

abort

终止写文件

seek

移动文件指针到指定位置

truncate

按照指定长度截断文件

write

向文件中写数据

⑴使用seek方法的示例代码:
function onSuccess(write){
writer.seek(writer.length); //将文件指针快速指向文件尾
}
function onError(error){
alert(error.code);
}
entry.createWriter(onSuccess,onError);
⑵使用truncate方法的示例代码:
function onSuccess(write){
writer.truncate(10); //从指针10处截断
}
function onError(error){
alert(error.code);
}
entry.createWriter(onSuccess,onError);
⑶使用write方法的示例代码:
function onSuccess(write){
writer.onwrite=function(evt){
console.log("成功写入");
};
writer.write("some sample text");
}
function onError(error){
console.log(error.code);
}
entry.createWriter(onSuccess,onError);
⑷向文件追加数据的示例代码:
function onSuccess(write){
writer.onwrite=function(evt){
console.log("成功写入");
};
writer.seek(writer.length); //将文件指针快速指向文件结尾
writer.write("appended text"); //然后写入
}
function onError(error){
console.log(error.code);
}
entry.createWriter(onSuccess,onError);

6)读取文件内容:

使用FileReader类可以读取文件的内容。文件可以当成文本或者base64编码的数据字符串读出来。首先要使用构造方法创建一个实例,然后就可以应用该方法和属性。语法格式为:
var reader=new FileReader();
FileReader类的属性见下表:


属性

功能描述

数据类型

readyState

当前要读取文件的状态,3个字符串之一:EMPTY、LOADING、DONE

DOMString

result

读取出来的文件内容

DOMString

error

包含错误信息的对象

FileError

onloadstart

开始读取文件时被调用

Function

onprogress

正在读取文件过程中被调用,反馈读取进度(当前未支持)

Function

onload

当读取安全完成时被调用

Function

onabort

当取消读取文件时被调用,如调用abort方法

Function

onerror

当读取失败时被调用

Function

onloadend

当请求完成后调用,成功或失败都会调用

Function

FileReader对象的方法见下表:


方法

功能描述

abort

终止读取文件

readAsDataURL

读取文件,并将数据按照base64编码方式返回

readAsText

读取文本文件

⑴readAsDataURL()方法:
该方法将一个文件读取为base64编码的字符串。语法格式为:
reader.readAsDataURL(fileName);
其中,参数fileName指定要读取的文件的路径。示例:
function onSuccess(evt){
console.log(evt.target.result);
}
function onError(error){
console.log(evt.target.error.code);
}
var paths=navigator.fileMgr.getRootPaths();
var reader=new FileReader();
reader.onload=onSuccess;
reader.onerror=onError;
reader.readAsDataURL(paths[0]+"readme.txt");
⑵readAsText()方法:
该方法将一个文件读取为文本字符串。语法格式为:
reader.readAsText(fileName[,encoding]);
其中,参数fileName指定要读取的文件的路径;参数encoding指定文件内容的编码格式,默认为UTF8。示例:
function onSuccess(evt){
console.log(evt.target.result);
}
var fail=function(evt){
console.log(evt.target.error.code);
}
var paths=navigator.fileMgr.getRootPaths();
var reader=new FileReader();
reader.onload=onSuccess;
reader.onerror=fail;
reader.readAsText(paths[0]+"readme.txt");
iOS不支持encoding参数,必须使用UTF8格式,不支持readAsDataURL()方法。

7)出错处理:

当文件操作发生错误时,会调用回调函数,并传递一个FileError对象作为参数,该对象可以使用属性code返回出错代码,属性值可以是下面的常量之一:
FileError.NOT_FOUND_ERR、FileError.SECURITY_ERR、FileError.ABORT_ERR、
FileError.NOT_READABLE_ERR、FileError.ENCODING_ERR、、FileError.SYNTAX_ERR
FileError.NO_MODIFICATION_ALLOWED_ERR、FileError.INVALID_STATE_ERR

8)文件上传:

使用FileTransfer.upload()方法可以上传文件到服务器。它使用HTTP multi-part POST请求向服务器端上传文件,支持HTTP以及HTTPS协议。语法格式为:
FileTransfer.uoload(fileURI,serverURI,onSuccess,onError,options);
其中,参数fileURI指定要上传的文件的URI;参数serverURI指定服务器目标地址;onSuccess定义一个回调函数,成功执行该方法后就调用这个回调函数,并传递一个FileUploadResult对象作为参数;参数onError定义一个回调函数,当该方法执行出现错误后就调用这个回调函数,并传递一个FileTransferError对象作为参数;参数options是一个FileUploadOption对象,用于设置上传的功能项。
FileUploadResult对象包含的属性见下表:


属性

功能描述

数据类型

bytesSent

上传文件时向服务器所发送的字节数

Number

responsecode

服务器端返回的HTTP响应代码

DOMString

response

服务器端返回的HTTP响应

DOMString

iOS不能获取responseCode和bytesSent属性。
FileTransferError对象包含的code,其值可以是以下的常量之一:
FileTransferError.FILE_NOT_FOUND_ERR、FileTransferError.INVALID_URL_ERR、
FileTransferError.CONNECTION_ERR
FileUploadOption对象可以定义以下属性:


属性

功能描述

数据类型

fileKey

form的name属性值,如果没有设置,默认为file

DOMString

fileName

希望上传到服务器后所使用的文件名,如果没有设置,默认image.jpg

DOMString

mimeType

上传文件所使用的MIME类型,如果没有设置,默认为image/jpeg

DOMString

params

通过HTTP请求发送到服务器的一系列键/值对所组成的集合

Object

示例:
function onSuccess(r){
console.log("Code="+r.responseCode);
console.log("Response="+r.response);
console.log("Sent="+r.bytesSent);
}
var fail=function(error){
alert(error.code);
}
var options=new FileUploadOptions();
options.fileKey="file";
options.fileName=fileURI.substr(fileURI.lastIndexof('/')+1);
options.mimeType="text/plain";
var params=new Object();
params.value1="text";
params.value2="param";
options.params=params;
var ft=new FileTransfer();
ft.upload(fileURL,"http://localhost/upload.php",onSuccess,onError,options);

Copyright@dwenzhao.cn All Rights Reserved   备案号:粤ICP备15026949号
联系邮箱:dwenzhao@163.com  QQ:1608288659