赵工的个人空间


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


 手持终端

首页 > 专业技术 > 手持终端 > PhoneGap3.0的第三方Android插件
PhoneGap3.0的第三方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);
}

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