手持终端
Eclipse平台下Android开发环境的搭建
PhoneGap配置到Eclipse开发环境
使用PhoneGap开发Android应用程序
PhoneGap3.0以上版本配置到Eclipse开发环境
使用PhoneGap3.0版本开发Android应用程序
PhoneGap3.0的第三方Android插件
Cordova配置到Android Studio开发环境
Android系统基本架构
Android的字符串颜色图片样式
Android的常用控件及菜单
Android的消息提示及传递
Android系统的组件通信
Android系统的Service
Android的广播消息接收
Android的数据存储与访问
Android系统的网络应用
Android图形图像处理
Android的Fragment框架
Android系统的并发编程
Java源文件结构与保留字
Java语言的数据类型与变量
Java的运算符与流程控制
Java语言的数组及操作
Java面向对象编程
Java的常用类
Android开发常用工具及命令
Android应用程序权限管理
Android系统提供的R类内置资源
Android系统的控件类及其方法
Android系统的菜单类及其方法
Android系统的对话框
Android应用程序模型及组件
Android的绘图类及方法
Android系统的动画效果
Android的数据库操作
Android的多媒体功能
Android系统照相机的使用
Android的文本朗读TTS
获取Android系统信息
Android系统的电话操作
Android系统的定位
Android系统的传感器
使用PhoneGap开发手持设备App时,除了使用一些标准的插件外,还可以使用第三方开发插件,实现很多有特色的功能。这种第三方插件网上有很多,版本更新也很快,可以在网上搜索查找。
1.通知栏消息提示:
StatusBarNotification插件可以实现通知栏消息提示,下载网址为:
https://github.com/phonegap/phonegap-plugins/tree/DEPRECATED/Android/StatusBarNotification
1)插件配置:
工程src目录下新增一个目录:
src/phonegap/plugins/statusBarNotification
将下载的StatusBarNotification.java和StatusNotificationIntent.java移至该目录下,要进行几处修改:
在StatusNotificationIntent.java文件中添加一行代码,导入该工程的资源,形式为:
import com.my.app.R;
其中的com.my.app是当前的工程包名
在res/xml/config.xml配置文件中添加插件的引用:
<feature name="StatusBarNotification"><param name="android-package" value="com.phonegap.plugins.statusBarNotification.StatusBarNotification" /></feature>
引入statusbarnotification.js文件,其中包含插件公开成员的对象、方法、属性、事件等,然后将插件公开的成员放在插件列表中,在cordova_plugins.js文件的module.exports属性值中添加数组元素:
,{"file":"plugins/statusbarnotification.js",
"id":"com.phonegap.plugins.statusBarNotification.StatusBarNotification",
"merges":["window.plugins.statusBarNotification"]}
配置完成,就可以使用JavaScript程序代码来实现消息提示了。
2)通知栏消息提示的管理:
插件中定义了StatusBarNotification类和Flag类,前者用来实现消息提示管理,后者提供功能选项常量。
先创建StatusBarNotification实例,然后可以调用其两个方法对消息提示进行管理:
var notification=window.plugins.statusBarNotification;
statusBarNotification.notify()方法可以广播一个消息显示在提示栏上,语法格式:
statusBarNotification.notify(title,message,flag);
其中参数title定义消息的标题,参数message定义消息的主体,参数flag可选,定义通知的选项,值为Flag.FLAG_AUTO_CANCEL和Flag.FLAG_NO_CLEAR,分别表明在点击了消息后自动清除该消息(默认值)和点击通知栏中的清除通告按钮后此通知不清除。
statusBarNotification.clear()方法用来删除一个提示消息。示例:
notification.clear();
2.条形码扫描和识别:
使用第三方编写的BarcodeScanner插件可以轻松实现条码扫描功能,可以从下面网址下载:
https://github.com/wildabeast/BarcodeScanner
BarcodeScanner有多个版本,每个版本都有一个LibraryProject目录,该目录下是一个Eclipse工程,可以将该工程导入现有工程。
1)支持库配置:
LibraryProject目录下是BarcodeScanner插件的一个支持库,应该首先编译该库,然后在工程中引用。Eclipse菜单File--New--Project--Android Project from Existing Source,系统自动识别工程名,然后可以看到新建的工程。
在工程属性中选Android,属性对话框中勾选Is Library,这样支持库就准备完毕了。在自建的工程中的Properties中选择Android,在底部Library选项内使用Add按钮,把刚才新建的工程加进来。
某些情况下,用户需要先编译一下该工程,使用工程菜单的Build Project编译即可。
2)BarcodeScanner插件配置:
在工程src目录下新建目录src/com/phonegap/plugins/barcodescanner,将下载的src目录下的BarcodeScanner.java文件移至该目录下,刷新工程。
在res/xml/config.xml配置文件中添加插件的引用:
<feature name="BarcodeScanner"><param name="android-package" value="com.phonegap.plugins.barcodescanner.BarcodeScanner" /></feature>
在www\plugins\目录下新建barcodescanner..js文档,将下载的barcodescanner..js文件中的代码放在下面的定义中:
cordova.define("com.phonegap.plugins.barcodescanner.BarcodeScanner",
function(require,exports,module){
//放置下载的barcodescanner.js文件中的代码
});
然后要将插件的成员放在插件列表中,在cordova_plugins.js的module.exports属性值中添加一个数组元素:
,{"file":"plugins/barcodescanner.js",
"id":"com.phonegap.plugins.barcodescanner.BarcodeScanner",
"merges":["window.plugins.barcodeScanner"]}
在下面的网址下载encode.xml,放置在platforms\android\res\menu目录下:
http://zxing.googlecode.com/svn/trunk/android/res/menu/encode.xml
打开AndroidManifest.xml文件,在<application>节点下增加配置:
<activity android:name="com.google.zxing.client.android.CaptureActivity"
android:screenOrientation="landscape"
android:clearTaskOnLaunch="true"
android:configChanges="orientation|keyboardHidden"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:windowSoftInputMode="stateAlwaysHidden"
android:exported="false">
<intent-filter>
<action android:name="com.phonegap.plugins.barcodescanner.SCAN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity android:name="com.google.zxing.client.android.encode.EncodeActivity"
android:label="@string/share_name">
<intent-filter>
<action android:name="com.phonegap.plugins.barcodescanner.ENCODE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity android:name="com.google.zxing.client.android.HelpActivity"
android:label="@string/share_name">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
还要在<application>节点下增加下面的两行配置来授权:
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
配置完成,就可以使用JavaScript程序代码来实现条形码的译码和编码了。
3)使用BarcodeScanner插件:
插件公开了BarcodeScanner类和BarcodeScanner.Encode类,前者用来实现条形码的译码和编码,后者提供功能选项常量。使用下面的代码可以创建BarcodeScanner实例:
var barcodeScanner=window.plugins.barcodeScanner;
然后就可以调用其公开的两个方法。
barcodeScanner.scan()方法可以扫描条形码并将其译码为字符串,语法格式:
barcodeScanner.scan(onSuccess,onError);
成功回调函数包含一个参数,该参数是一个Object类型,包含几个属性,text包含有译码后的字符串,type包含侦测到的条形码类型,Cancelled用来确定用户是否取消了扫描。该插件可以自动识别下列类型的条形码:QR_CODE、DATA_MATRIX、UPC_E、UPC_A、EAN_8、EAN_13、CODE_128、CODE_39、CODE_93、CODABAR、ITF、RSS14、PDF417、RSS_EXPANDED。
barcodeScanner.encode()方法用来将字符编码成一个条形码呈现出来,语法格式为:
barcodeScanner.scan(type,data,onSuccess,onError,options);
参数type定义要产生的条形码的类型,值可以是下面的常量,表示不同的条形码:
BarcodeScanner.Encode.TEXT_TYPE
BarcodeScanner.Encode.EMAIL_TYPE
BarcodeScanner.Encode.PHONE_TYPE
BarcodeScanner.Encode.SMS_TYPE
分别表示普通文本、电子邮件地址、电话号码、短信地址。
参数data是一个字符串,定义要编码的数据。参数options其实没有任何作用,赋值为null即可。示例:
function scan(){
barcodeScanner.scan(
function(result){
alert("条形码解码完毕:\n"+"条形码:"+result.text+"\n"
"条形码类型:"+result.format+"\n"+"是否取消:"+result.canceled);
},
function(err){
alert("条形码解码完毕:\n"+err);
}
);
}
function encode(){
barcodeScanner.encode(
barcodeScanner.Encode.TEXT_TYPE,"http://www.phonegap.com",
function(success){
console.log("成功编码:"+success);
},
function(err){
alert("编码失败:"+err);
},
null
);
}
编码函数将字符串编码为QR_CODE码。
3.短信发送和接收功能:
使用第三方的SendSmsCordovaPlugin插件和ReadSmsCordovaPlugin可以分别实现短信的发送和读取,下载网址为:
https://github.com/dimitrismistriotis/SendSmsCordovaPlugin
https://github.com/dimitrismistriotis/ReadSmsCordovaPlugin
1)插件配置:
在工程src目录下新增目录src/net/webootu/cordova/plugin,并将下载的SendSms.java文件和ReadSms.java移至该目录下。使用Eclipse打开java文件,添加import org.apache.cordova.*;删除旧版本的相应import语句。
在res/xml/config.xml配置文件中添加插件的引用:
<feature name="SendSms"><param name="android-package" value="net.webootu.cordova.plugin.SendSms" /></feature>
<feature name="ReadSms"><param name="android-package" value="net.webootu.cordova.plugin.ReaddSms" /></feature>
在www\plugins\目录下新建两个文档sendSms.js和readSms.js,输入以下代码:
cordova.define("net.webootu.cordova.plugin.SendSms",
function(require,exports,module){
var exec=require("cordova/exec");
var SendSmsPlugin=function(){};
SendSmsPlugin.prototype.sendSms=function(phoneNumber,textMessage,
successCallback,failureCallback){
return exec(successCallback,failureCallback,"sendSms",
"SendSms",[phoneNumber,textMessage]);
};
module.exports=new SendSmsPlugin();
});
readSms.js代码:
cordova.define("net.webootu.cordova.plugin.ReadSms",
function(require,exports,module){
var exec=require("cordova/exec");
var ReadSmsPlugin=function(){};
ReadSmsPlugin.prototype.getTexts=function(phoneNumber,numberOfTextsToRead,
successCallback,failureCallback){
return exec(successCallback,failureCallback,"ReadSms",
"GetTexts",[phoneNumber,numberOfTextsToRead]);
};
ReadSmsPlugin.prototype.getTextsAfter=function(phoneNumber,timeStamp,
successCallback,failureCallback){
return exec(successCallback,failureCallback,"ReadSms",
"GetTextsAfter",[phoneNumber,timeStamp]);
};
module.exports=new ReadSmsPlugin();
});
然后将插件成员放在插件列表中,在cordova_plugins.js的module.exports属性值中添加一个数组元素:
,{"file":"plugins/sendSms.js",
"id":"net.webootu.cordova.plugin.SendSms",
"merges":["window.plugins.SendSmsPlugin"]}
,{"file":"plugins/readSms.js",
"id":"net.webootu.cordova.plugin.ReadSms",
"merges":["window.plugins.ReadSmsPlugin"]}
编辑AndroidManifest.xml配置,配合插件的使用,添加相应的授权:
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
配置完成,用户可以使用JavaScript程序代码来实现短信发送和读取短信了。
2)短信发送:
插件公开了SendSmsPlugin类,调用sendSms()方法发送消息:
var sendSmsPlugin=window.plugins.SendSmsPlugin;
sendSmsPlugin.sendSms(phoneNumber,textMessage,successCallback,failureCallback);
参数phoneNumber用来定义目标电话号码,这是一个字符串类型;参数textMessage用来定义消息主体。成功回调函数successCallback包含一个参数,该参数是一个Object,有三个属性,sms_send是一个逻辑值,用来表示短信发送成功与否;属性receiving_number包含了发送的目标电话号码;属性send_text包含了消息主体。成功回调函数被调用仅仅表示方法执行成功,至于短信是否发送成功,还要通过属性sms_send来判断。
3)读取短信:
插件公开了ReadSmsPlugin类,创建ReadSmsPlugin实例,然后调用getTexts()方法和getTextsAfter()方法来读取消息:
var readSmsPlugin=window.plugins.ReadSmsPlugin;
readSmsPlugin.getTexts(phoneNumber,numberOfTextsToRead,successCallback,failureCallback);
readSmsPlugin.getTextsAfter(phoneNumber,timeStamp,successCallback,failureCallback);
参数phoneNumber用来定义目标电话号码,这是一个字符串类型;参数numberOfTextsToRead用来定义要读取的短信数量,负值表示读取全部;参数timeStamp用来定义一个时间戳,只有在该时间戳后的短信才会被读取。
成功回调函数successCallback包含一个参数,该参数是一个Object,有一个texts属性,该属性值是一个数字索引数组,每个元素就是一条消息,这个消息是一个Object,它有两个属性,time_received表示该消息接收到的时间,message表示消息正文。示例:
function onSuccess(data){
for(var i=0;i<data.texts.length;i++){
console.log("["+(new Date(Number(data.texts[i].time_received))).toString()
+"]"+data.texts[i].message);
}
}
下面的代码实现获取01015988888888号码发来的全部短信:
var readSmsPlugin=window.plugins.ReadSmsPlugin;
readSmsPlugin.getTexts("01015988888888",-1,onSuccess,onError);
下面的代码获取号码01015988888888发过来的自2017年6月10日的全部短信:
readSmsPlugin.getTextsAfter("01015988888888",(new Date(2017,6,9,23,59,59)).getTime(),,onSuccess,onError);
4.文本朗读:
TTS是Text To Speech的缩写,可以帮助有视觉障碍的人阅读计算机上的信息,或者只是简单地增加文档的可读性。Android从1.6版本开始支持TTS,使用Pico语音合成引擎,但只支持English、French、German、Italian和Spanish,从4.0版本开始支持中文朗读。
使用第三方TTS插件可以访问Android默认的TTS引擎实现文本朗读,插件网址:
https://github.com/macdonst/TTS
1)插件配置:
在工程src目录下新建一个src/com/phonegap/plugin/speech目录,并将下载的TTS.java移至该目录下。使用Eclipse打开TTS.java,,添加import org.apache.cordova.*;删除旧版本的相应import语句。
在res/xml/config.xml配置文件中添加插件的引用:
<feature name="TTS"><param name="android-package" value="com.phonegap.plugins.speech.TTS" /></feature>
将下载的tts.js放入www\plugins\目录下,然后将插件的公开成员放置到插件列表中,在cordova_plugins.js文件的module.exports属性值中添加数组元素:
,{"file":"plugins/tts.js",
"id":"com.phonegap.plugins.speech.TTS",
"merges":["window.plugins.tts"]}
配置完成,就可以使用JavaScript程序代码来实现文本朗读了。
2)建立文本朗读程序:
使用下面的方法创建TTS的实例:
var tts=window.plugin.tts;
然后可以调用它的方法,示例:
function onDeviceReady(){
window.plugins.tts.startup(startupSuccess,onError);
}
function startSuccess(result){
if(result==TTS.STARTED){
window.plugins.tts.speak("The tts is ready!");
window.plugins.tts.getLanguage(onGetLanguageSuccess,onError);
window.plugins.tts.isLanguageAvailable("en",function(){
addLang("en");
},onError);
window.plugins.tts.isLanguageAvailable("zh_CN",function(){
addLang("zh_CN");
},onError);
window.plugins.tts.isLanguageAvailable("zh_TW",function(){
addLang("zh_TW");
},onError);
}
}
function addLang(lang){
var langs=document.getElementById('langs');
var anOptions=document.createElement('option");
anOption.innerText=lang;
anOption.Value=lang;
langs.options.add(anOption);
}
function changeLang(){
var langs=document.getElementById('langs');
window.plugins.tts.setLanguage(langs.options[langs.selectedIndex].value,
onSetLanguageSuccess.onError);
}
function onGetLanguageSuccess(result){
console.log("Language:"+result);
}
function onSetLanguageSuccess(result){
console.log("Language changed:"+result);
}
function onError(result){
console.log("Error:"+result);
}
function speak(){
window.plugins.tts.speak(document.getElementById('playMe').value);
}
3)使用TTS管理引擎:
·tts.startup()方法:
该方法用来启动TTS引擎,只有启动引擎后才能进行朗读,这是使用TTS的第一步:
tts.startup(successCallback,errorCallback);
在成功启动引擎后,会调用成功回调函数,此时才可以调用其他的方法。
·tts.shutdown()方法:
当不再需要TTS服务时,调用该方法停止TTS引擎,从而可以释放其所占用的资源:
tts.shutdown(successCallback,errorCallback);
·tts.speak()方法:朗读指定的文本
tts.speak(text[,successCallback[,errorCallback]]);
参数text指定要朗读的文本,回调函数是可选的。
·tts.silence()方法:暂停若干时间
tts.silence(duration,successCallback,errorCallback);
参数duration定义暂停的时间,是一个Number类型,以毫秒为单位。
·tts.getLanguage()方法:获取当前TTS引擎所用的语言
tts.getLanguage(successCallback,errorCallback);
成功回调函数有一个参数,包含了当前TTS引擎所用的语言标示,使用区域化标示来代表。
·setLanguage()方法:设置当前TTS引擎所用的语言
tts.getLanguage(lang,successCallback,errorCallback);
参数lang指定一个语言,语言使用区域化标示来代表。在设置之前,应该使用isLanguageAvailable()方法检测是否支持该语言。
·isLanguageAvailable()方法:检测TTS引擎是否支持指定的语言
tts.isLanguageAvailable(lang,successCallback,errorCallback);
参数lang指定一个语言,语言使用区域化标示来代表。
还有几个常量可以使用:
TTS.STOPPED=0; //表示TTS引擎已经停止
TTS.INITIALIZING=1 //表示TTS引擎正在初始化
TTS.STARTED=2; //表示TTS引擎已经启动
5.语音识别:
语音识别技术是在Android1.5版本加入的,通过将录制的语音数据发送给Google语言识别服务器进行识别,然后将识别结果再发送回来。使用第三方编写的SpeechRecognizer插件可以访问Android默认的SpeechRecognizer服务实现语言识别,从下面的网址可可以下载插件:
https://github.com/poiuytrez/SpeechRecognizer
1)配置插件:
这个插件已经符号PhoneGap3标准,可以使用下面的命令添加插件:
phonegap plugin add https://github.com/poiuytrez/SpeechRecognizer
但因为是放在GitGub上,所有还需要安装git命令行工具才能正确执行这个命令。git命令行工具可以从下面的网址下载:
https://windows.github.com/
另外也可以直接使用源代码来放置到工程中。
将下载的SpeechRecognizer.js移动到工程内的www\plugins\目录下,稍做修改:
cordova.define("com.phonegap.plugins.speech.SpeechRecognizer",
function(require,exports,module){
var exec=require('cordova/exec');
function SpeechRecognizer(){
SpeechRecognizer.prototype.startRecognizer=function(
successCallback,errorCallback,maxMatches,promptString,language){
return cordova.exec(successCallback,errorCallback,"SpeechRecognizer",
"startRecognizer",[maxMatches,promptString,language]);
};
SpeechRecognizer.prototype.getSupportedLanguages=function(
successCallback,errorCallback){
return cordova.exec(successCallback,errorCallback,
"SpeechRecognizer","getSupportedLanguages",[]);
};
module.exports=new SpeechRecognizer();
});
在res/xml/config.xml配置文件中添加插件的引用:
<feature name="SpeechRecognizer"><param name="android-package" value="com.phonegap.plugins.speech.SpeechRecognizer" /></feature>
然后将插件的公开成员放置到插件列表中,在cordova_plugins.js文件的module.exports属性值中添加数组元素:
,{"file":"plugins/SpeechRecognizer.js",
"id":"com.phonegap.plugins.speech.SpeechRecognizer",
"merges":["window.plugins.speechrecognizer"]}
配置完成,就可以使用JavaScript程序代码来实现语音识别了。
2)语音识别:
插件中SpeechRecognizer类,用来实现语言识别管理。首先创建SpeechRecognizer的实例:
var speech=window.plugins.speechrecognizer;
然后就可以调用它的方法。
getSupportedLanguages()方法获取语音识别引擎所支持的语言列表,使用方法为:
window.plugins.speechrecognizer.getSupportedLanguages(onSuccess,onError);
成功回调函数内检查所要使用的语言是否支持。
startRecognize()方法开始识别,会启动内置服务,打开一个对话框当用户发声,语法格式:startRecognize(recognizeOk,recognizeFail,reqCode,maxMatches,promptString);
如果执行成功就会调用回调函数,回调函数会传递一个参数,包含了识别的结果。返回的结果是一个由识别结果组成的数组,用户可以解析这个数组获取其中的信息。
参数reqCode是一个整数,用来定义一个请求代码,当识别完成后这个代码会作为成功回调函数的参数返回,用于前后进行匹配。参数maxMatches指定返回语音识别结果的最大条数,因为语音识别是模糊识别,所以可能会识别出多种结果,并且会把这些结果都发送出来供挑选,用户可以使用这个参数定义返回的结果条数,如果指定该值为0,将由服务器决定返回的结果条数。参数promptString指定一个字符串,当打开语音识别对话框时可以显示为提示字符串。
示例:
function supportedLanguages(){
window.plugins.speechrecognizer.getSupportedLanguages(
function(languages){alert(languages);},
function(err){alert("不能获取语音识别引擎所支持的语言列表!")};
);
}
function recognizeSpeech(){
var reqCode=1234;
var maxMatches=5;
var promptString="请开始说话";
window.plugins.speechrecognizer.startRecognize(
function(result){
if(result){
var list="<ul>";
for(x in result){
list+="<li>"+result[x]+"</li>";
}
list+="</ul>";
var info=document.getElementById('info');
info.innerHTML=list;
}
},
function(err){
alert("失败:"+err);
},
reqCode,maxMatches,promptString);
}
用户点击Speak按钮显示语言识别对话框,用户说完话后,系统将内容提交到服务器进行识别;服务器识别完成后,返回并显示识别结果。
6.屏幕截图:
屏幕截图是最常用的软件功能,使用第三方编写的Screenshot插件可以实现该功能。可以从下面网址下载插件:
https://github.com/phonegap-plugins/tree/DEPRECATED/Android/Screenshot(网址已不可用,可用可在github网站上搜索cordova android Screenshot)
1)插件配置:
在工程src目录下新建src/org/apache/cordova目录,并将下载的Screenshot.java移至该目录下。需要在Eclipse中打开此java文件,进行适当修改,适合新版本。
在res/xml/config.xml配置文件中添加插件的引用:
<feature name="Screenshot"><param name="android-package" value="org.apache.cordova.Screenshot" /></feature>
然后将插件的公开成员放置到插件列表中,在cordova_plugins.js文件的module.exports属性值中添加数组元素:
,{"file":"plugins/screentshot.js",
"id":"org.apache.cordova.Screenshot",
"merges":["window.plugins.screenshot"]}
编辑AndroidManifest.xml配置,配合插件的使用,因为要使用SD卡,添加相应的授权:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
配置完成,就可以使用JavaScript程序代码来实现屏幕截图了。
2)实现屏幕截图:
插件公开了Screenshot类,使用下面的方法可以创建Screenshot的一个实例:
var screenshot=window.plugins.screenshot;
然后可以调用它的唯一一个方法saveScreenshot()保存当前屏幕,这个方法没有参数。
screenshot.saveScreenshot();
也可以直接使用:
window.plugins.screenshot.saveScreenshot();
屏幕截图默认保存在SDCard中名为Pictures的目录中,如果想改变默认的保存位置,可以修改Screenshot.java中的代码,比如改为:
File folder=new File(Environment.getExternalStorageDirectory()."Myphotos");
7.电话状态监听:
电话状态监听对于手机应用程序来说至关重要,因为当运行一个程序时,如果有电话打进来,电话程序将会覆盖在你的程序之上,程序就必须对这个状态进行处理。使用第三方编写的PhoneListener插件可以轻松实现该功能,可以从下面的网址下载:
https://github.com/devgeeks/PhoneListener
1)插件配置:
在工程src目录下新建src/org/devgeeks目录,并将下载的PhoneListener.java移至该目录下。需要在Eclipse中打开此java文件,进行适当修改,适合新版本,网页上有示例代码。
在res/xml/config.xml配置文件中添加插件的引用:
<feature name="PhoneListener"><param name="android-package" value="org.devgeeks.PhoneListener" /></feature>
在www\plugins\目录下,复制进来下载的PhoneListener.js文件,并修改下面的代码:
cordova.define("org.devgeeks.PhoneListener",
function(require,exports,module){
var exec=require('cordova/exec');
var PhoneListener=function(){};
PhoneListener.prototype.start=function(successCallback,failureCallback){
cordova.exec(successCallback,failureCallback,"PhoneListener",
"startMonitoringPhoneState",[]);
};
PhoneListener.prototype.stop=function(successCallback,failureCallback){
cordova.exec(successCallback,failureCallback,"PhoneListener",
"stoptMonitoringPhoneState",[]);
};
module.exports=new PhoneListener();
});
然后将插件的公开成员放置到插件列表中,在cordova_plugins.js文件的module.exports属性值中添加数组元素:
,{"file":"plugins/PhoneListener.js",
"id":"org.devgeeks.PhoneListener",
"merges":["window.PhoneListener"]}
编辑AndroidManifest.xml配置,配合插件的使用,因为读取电话的状态,要添加相应的授权:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
配置完成,就可以使用JavaScript程序代码来实现电话状态监听了。
2)实现电话状态监听:
这个插件在PhoneListener对象上公开了两个方法,分别用来启动电话状态监听和关闭电话状态监听。
PhoneListener.start(successCallback,failureCallback);
PhoneListener.stop(successCallback,failureCallback);
start()方法的成功回调函数包含一个参数,该参数描绘了电话的当前状态,参数的可能值包括RINGING、OFFHOOK、IDLE。RINGING表示有来电,OFFHOOK表示正在通话尚未挂机,IDLE表示电话空闲状态。stop()方法的成功回调函数没有参数。
失败回调函数failureCallback都有一个参数,值是一个字符串,简单描述了出错原因。
示例:
页面加两个按钮:
<input disabled id="startBtn" type="button" onclick = "PhoneListener. start( onPhoneStateChanged, onError") value="启动电话状态监听" style="width:80%" />
<input disabled id="stopBtn" type="button" onclick = "PhoneListener. stop( onStopSuccess, onError") value="关闭电话状态监听" style="width:80%" />
脚本代码为:
function onPhoneStateChanged(phoneState){
switch(phoneState){
case "RINGING":
console.log('有来电');
break;
case "OFFHOOK":
console.log('正在通话尚未挂机');
break;
case "IDLE":
console.log('电话空闲状态');
break;
}
}
function onStopSuccess(){
console.log('已经成功关闭电话状态监听');
}
function onError(){
console.log('Error:'+err);
}
8.视频播放:
使用HTML5 video元素就可以实现视频播放,但对于较低版本的Android就无法实现。用户可以使用第三方编写的VideoPlayer插件来实现,下载网址为:
https://github.com/macdonst/VideoPlayer
1)插件配置:
VideoPlayer插件有多个版本,选择合适的新版本,将下载的video.js移动到工程内的assets/www/目录下。
在src目录下新建src/com/phonegap/plugins/video目录,并将下载的VideoPlayer.java移至该目录下。使用Eclipse打开文件,添加代码:
import org.apache.cordova.*;
替换旧版的相应语句。
在res/xml/config.xml配置文件中添加插件的引用:
<feature name="VideoPlayer"><param name="android-package" value="com.phonegap.plugins.video.VideoPlayer" /></feature>
在www\plugins\目录下,复制进来下载的video.js文件,并修改下面的代码:
cordova.define("com.phonegap.plugins.video.VideoPlayer",
function(require,exports,module){
var exec=require('cordova/exec');
var VideoPlayer=function(){};
VideoPlayer.prototype.play=function(url){
cordova.exec(null,null,"VideoPlayer","playVideo",[url]);
};
module.exports=new VideoPlayer();
});
然后将插件的公开成员放置到插件列表中,在cordova_plugins.js文件的module.exports属性值中添加数组元素:
,{"file":"plugins/video.js",
"id":"com.phonegap.plugins.video.VideoPlayer",
"merges":["window.videoPlayer"]}
编辑AndroidManifest.xml配置,配合插件的使用,因为要访问SD卡和网络来读取视频,要添加相应的授权:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
配置完成,就可以使用JavaScript程序代码来实现视频播放了。
2)实现视频播放:
直接使用下面的一行代码就可以实现视频播放:
window.videoPlayer.play(url);
参数url指定视频文件的路径,可以使用本地路径、相对路径,或者是一个远程文件。示例:
window.videoPlayer.play("http://path.to.my/video.mp4");
window.videoPlayer.play("file:///path/to/my/video.mp4");
window.videoPlayer.play("file:///android_asset/www/path/to/my/video.mp4");
window.videoPlayer.play("https://www.youtube.com/watch?v=en_sVVjWFKk");
示例:
function playVideo(){
window.videoPlayer.play(document.getElementById("videoUrl").value);
}