内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

html5通話,html5 語音聊天

phonegap 什么插件能打電話

最近采用phonegap做一個APP,需要在應(yīng)用內(nèi)實現(xiàn)撥打電話,通話結(jié)束後能反饋通話相關(guān)狀態(tài),查看了一番phonegap官方文檔,似乎沒有跟電話相關(guān)的api,在互聯(lián)網(wǎng)上也大概搜了一下,好像沒找到相關(guān)的內(nèi)容。其實html5是支持直接在網(wǎng)頁上撥打電話的,只要加入如下html代碼即可:

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),洮南企業(yè)網(wǎng)站建設(shè),洮南品牌網(wǎng)站建設(shè),網(wǎng)站定制,洮南網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,洮南網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

[html] view plaincopy

打電話a href="tel:10086" 移動客服/a

發(fā)短信a href="sms:10086" 發(fā)短信/a

但這中方式只能實現(xiàn)撥打電話和發(fā)送短信,不能反饋結(jié)果,比如我想在應(yīng)用能實現(xiàn)撥打電話,通話結(jié)束後自動保存通話的電話號碼、通話時間、時長等,默認的html功能就不能滿足了。

phonegap官方不提供的功能,我們只有自己通過開發(fā)插件了實現(xiàn)了

下面我們通過代碼來簡單介紹下phonegap插件開發(fā)步驟:

一、定義JS插件API

[javascript] view plaincopy

var Phone = function() {

};

Phone.prototype.call = function (successCallback, failureCallback,number) {

cordova.exec(successCallback, failureCallback, "Phone", "call", [number]);

};

window.Phone = new Phone();

上面的代碼我們定義了一個Phone插件,插件有一個call API,我們傳入

[javascript] view plaincopy

successCallback

failureCallback

分別做為電話撥打成功和失敗的回調(diào)函數(shù)

傳入

[javascript] view plaincopy

number

做為電話號碼

在方法裏邊調(diào)用

phonegap的cordova.exec()

[javascript] view plaincopy

cordova.exec(successCallback, failureCallback, "Phone", "call", [number]);

就是在這個方法裏將執(zhí)行到native端的功能調(diào)用

最後我們new一個Phone對象,把他附件到window對象上,方便以後調(diào)用。

這樣,插件的JS代碼完成。

二、native端代碼(以android平臺為例)

先直接上代碼

[java] view plaincopy

package com.juhuibao.PhoneGapPlugin;

import java.util.Date;

import org.apache.cordova.api.CallbackContext;

import org.apache.cordova.api.CordovaPlugin;

import org.apache.cordova.api.PluginResult;

import org.json.JSONArray;

import org.json.JSONException;

import android.app.Activity;

import android.content.Intent;

import android.database.Cursor;

import android.net.Uri;

import android.provider.CallLog.Calls;

import android.telephony.PhoneNumberUtils;

public class Phone extends CordovaPlugin {

private static final int PHONE_CALL = 0; // 撥打電話

private static final int PHONE_ABORT = 1; // 掛斷電話

private Date start_time;

private CallbackContext callbackContext;

private String phonenumber;

@Override

public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {

try{

this.callbackContext = callbackContext;

if ("call".equals(action)) {

this.phonenumber=args.getString(0);

this.call(args.getString(0),callbackContext);

return true;

}

if ("abort".equals(action)) {

this.abort(callbackContext);

return true;

}

return false;

}

catch(Exception e){

callbackContext.error(e.getMessage());

}

return false;

}

//撥打電話

private void call(String phonenumber, CallbackContext callbackContext) {

if (phonenumber != null phonenumber.length() 0) {

if(PhoneNumberUtils.isGlobalPhoneNumber(phonenumber)){

Intent i = new Intent();

i.setAction(Intent.ACTION_CALL);

i.setData(Uri.parse("tel:"+phonenumber));

start_time=new Date();

this.cordova.startActivityForResult(this, i,PHONE_CALL);

}

else{

callbackContext.error(phonenumber+"不是有效的電話號碼。");

}

} else {

callbackContext.error("電話號碼不能為空.");

}

}

//中斷電話

private void abort(CallbackContext callbackContext) {

}

public void onActivityResult(int requestCode, int resultCode, Intent intent) {

Date end_time=new Date();

if (resultCode == Activity.RESULT_OK) {

if (requestCode == PHONE_CALL) {

this.callbackContext.error("未知狀態(tài)");

}

}

else if (resultCode == Activity.RESULT_CANCELED) {

try{

if (requestCode == PHONE_CALL) {

long duration=GetLastCallDuration();

PhoneResult result=new PhoneResult();

result.setNumber(Phone.this.phonenumber);

result.setStartTime(Phone.this.start_time);

result.setEndTime(end_time);

result.setDuration(duration);

this.callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, result.toJSONObject()));

}

}

catch(Exception e){

this.callbackContext.error(e.getMessage());

}

}

else {

this.callbackContext.error("其他錯誤!");

}

}

long delayTime=0;

long timeOut=2000;

long GetLastCallDuration() throws InterruptedException{

Activity activity = this.cordova.getActivity();

Cursor cursor = activity.getContentResolver().query(Calls.CONTENT_URI,

new String[] {Calls.NUMBER,Calls.DATE, Calls.DURATION, Calls.TYPE, Calls.DATE },

"number=?and type=?",

new String[]{this.phonenumber,"2"},

Calls.DEFAULT_SORT_ORDER);

activity.startManagingCursor(cursor);

boolean hasRecord = cursor.moveToFirst();

if (hasRecord) {

long endTime=cursor.getLong(cursor.getColumnIndex(Calls.DATE));

Date date = new Date(endTime);

long duration = cursor.getLong(cursor.getColumnIndex(Calls.DURATION));

long dif=this.start_time.getTime()-date.getTime();

long second=dif/1000;

if(second2second-2){

return duration;

}else{

if(delayTime=timeOut){

return 0;

}

Thread.sleep(200);

delayTime+=200;

return GetLastCallDuration();

}

}else{

if(delayTime=timeOut){

return 0;

}

Thread.sleep(200);

delayTime+=200;

return GetLastCallDuration();

}

}

}

然後調(diào)用具體實現(xiàn)撥打電話功能的方法call方法,在call方法內(nèi)我們首先判斷電話號碼合法性,不合法直接調(diào)用callbackContext.error("不是有效的電話號碼。"),這個方法將觸發(fā)JS端的error回調(diào)函數(shù)執(zhí)行,并傳入一個字符串參數(shù),比如以上的failureCallback

如果電話號碼合法則彈出呼叫界面,如下代碼

[java] view plaincopy

if(PhoneNumberUtils.isGlobalPhoneNumber(phonenumber)){

Intent i = new Intent();

i.setAction(Intent.ACTION_CALL);

i.setData(Uri.parse("tel:"+phonenumber));

start_time=new Date();

this.cordova.startActivityForResult(this, i,PHONE_CALL);

}

else{

callbackContext.error(phonenumber+"不是有效的電話號碼。");

}

在代碼中我們通過變量start_time記錄開始時間,然後使用this.cordova.startActivityForResult(this, i,PHONE_CALL);啟動Activity。

在終止撥號或掛斷電話時將執(zhí)行onActivityResult方法,我們將在此方法內(nèi)實現(xiàn)通話狀態(tài)信息的反饋。主要看一下這段代碼

[java] view plaincopy

else if (resultCode == Activity.RESULT_CANCELED) {

try{

if (requestCode == PHONE_CALL) {

long duration=GetLastCallDuration();

PhoneResult result=new PhoneResult();

result.setNumber(Phone.this.phonenumber);

result.setStartTime(Phone.this.start_time);

result.setEndTime(end_time);

result.setDuration(duration);

this.callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, result.toJSONObject()));

}

}

catch(Exception e){

this.callbackContext.error(e.getMessage());

}

}

不管電話有沒有接通,resultCode總是等於Activity.RESULT_CANCELED。

我們通過GetLastCallDuration()方法獲得通話時長,原理就是讀取通話記錄裏邊的duration字段,由於通話剛結(jié)束時通話記錄可能還沒出現(xiàn)記錄,所以我們要反復(fù)調(diào)用該方法,直到有記錄或到超時時間為止。

取得了時長我們通過this.callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, result.toJSONObject()));把結(jié)果反饋給JS端。

附 PhoneResult.java

[java] view plaincopy

package com.juhuibao.PhoneGapPlugin;

import java.text.SimpleDateFormat;

import java.util.Date;

import org.json.JSONException;

import org.json.JSONObject;

public class PhoneResult {

private String number = "";

private Date startTime;

private Date endTime;;

private long duration = 0;

public JSONObject toJSONObject() throws JSONException {

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss:S");

return new JSONObject(

"{number:" + JSONObject.quote(number) +

",startTime:" + JSONObject.quote(sdf.format(startTime)) +

",endTime:" + JSONObject.quote(sdf.format(endTime)) +

",duration:" + duration + "}");

}

public String getNumber() {

return number;

}

public void setNumber(String number) {

this.number = number;

}

public Date getStartTime() {

return startTime;

}

public void setStartTime(Date startTime) {

this.startTime = startTime;

}

public Date getEndTime() {

return endTime;

}

public void setEndTime(Date endTime) {

this.endTime = endTime;

}

public long getDuration() {

return duration;

}

public void setDuration(long duration) {

this.duration = duration;

}

}

這樣native端的代碼完成。

三、客戶端調(diào)用

[javascript] view plaincopy

window.Phone.call(function (obj) { alert(JSON.stringify(obj));

}, function (err) { alert(err); }, "13401100000");

四、配置插件

在config.xml文件中注冊插件

[html] view plaincopy

plugin name="Phone" value="com.juhuibao.PhoneGapPlugin.Phone"/

在AndroidManifest.xml文件中增加權(quán)限

[html] view plaincopy

uses-permission android:name="android.permission.CALL_PHONE" /

uses-permission android:name="android.permission.READ_CALL_LOG" /

uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" /

uses-permission android:name="android.permission.READ_PHONE_STATE"/

html5 如果實現(xiàn)錄音轉(zhuǎn)發(fā)?

不能用,錄音只有通話錄音軟件進行轉(zhuǎn)發(fā),建議試試用匹諾曹通話錄音軟件

HTML和HTML5有什么區(qū)別呀?

一、指代不同

1、html5:是Web中核心語言HTML的規(guī)范。

2、html:稱為超文本標記語言,是一種標識性的語言。

二、特點不同

1、html5:用戶使用任何手段進行網(wǎng)頁瀏覽時看到的內(nèi)容原本都是HTML格式的,在瀏覽器中通過一些技術(shù)處理將其轉(zhuǎn)換成為了可識別的信息。

2、html:包括一系列標簽.通過這些標簽可以將網(wǎng)絡(luò)上的文檔格式統(tǒng)一,使分散的Internet資源連接為一個邏輯整體。

三、構(gòu)成不同

1、html5: 由不同的技術(shù)構(gòu)成,其在互聯(lián)網(wǎng)中得到了非常廣泛的應(yīng)用,提供更多增強網(wǎng)絡(luò)應(yīng)用的標準機

2、html:是由HTML命令組成的描述性文本,HTML命令可以說明文字,圖形、動畫、聲音、表格、鏈接等。

qq7.6瀏覽器版本的視頻通話效果怎樣

個人感覺不如 qq瀏覽器的9.0版本 QQ瀏覽器9.0從里到外都進行了全新的設(shè)計,

核心基于業(yè)界最新的Google Chromium 42正式版,完美支持HTML5和各種新的Web標準,

同時為了保持兼容性,它也是同時支持IE渲染核心的雙核瀏覽器,視頻通話效果更真實

畫面更流暢 你可以試試

HTML5 中引入了哪些新的JavaScript API?具體有什么作用?

簡而言之,HTML5就是由新的標記引進的新元素形式和為現(xiàn)有元素新增的某些屬性,與新的JavaScript APIs的結(jié)合體。那HTML5中引入了新增加了哪些新標簽與JavaScript API結(jié)合體呢?我這里例舉了我們平時最常用的幾種:

1、 Canvas API是一個具有完整功能的JavaScript API并伴隨產(chǎn)生了新HTML5元素Canvas。通過Canvas API,您可以利用它和WebGL在瀏覽器中創(chuàng)建一個2 D或3 D繪圖場景,

2、 Contacts API主要應(yīng)用在移動設(shè)備上,為瀏覽器提供對用戶通用通訊錄的訪問。它在瀏覽器內(nèi)建立一個本地存儲庫,來存儲聯(lián)系人信息。而不是通過訪問讓你所有聯(lián)系人信息直接保存在Google +、Facebook或其他網(wǎng)站上, Contacts API將允許您有本地存儲庫,網(wǎng)站可以通過本地存儲庫訪問存儲的聯(lián)系人信息。現(xiàn)在的主流瀏覽器都支持Contacts API

3、 通過File API 瀏覽器可以直接訪問用戶計算機的沙箱區(qū)域?qū)?shù)據(jù)存儲到文件系統(tǒng)。

4、 在HTML5中Forms API得到了發(fā)展,內(nèi)置了驗證功能,在接下來的課程中,您將會學(xué)習(xí)到如何通過使用內(nèi)置的規(guī)則實現(xiàn)表單驗證,以及如何添加自定義規(guī)則進行表單驗證。

5、 允許瀏覽器請求用戶的位置信息,一旦獲權(quán),瀏覽器可以通過許多不同的方法來確定計算機或設(shè)備的實際位置,它將會有一個比例尺來確認精確的地點位置。通過該API能獲取經(jīng)緯度等數(shù)據(jù),非常適合應(yīng)用程序定位。

6、 Media Capture的功能是將本地設(shè)備通過JavaScript將與瀏覽器相連。你將能夠訪問攝像頭,攝像頭,等等。

7、 Messaging API被用來與其他API一起使用,比如web web workers,這個我們將將在后面的課程中進一步討論。

8、 選擇(Selection)API的就像jQuery庫一樣運用非常廣泛。在流行jQuery 、HTML5的今天,試圖從文檔對象模型選擇元素是比較復(fù)雜的。jQuery彌補了這一差距。其實變得很容易,HTML5將高級選擇功能直接內(nèi)置在瀏覽器中。使得瀏覽器的選擇性能得到很大的改善,甚至于JQuery選擇工具一樣速度。我并不是貶低jQuery。jQuery的優(yōu)勢就是DOM的選擇,但是,jQuery不僅僅只提供了選擇功能,事實上,在本課程中未來的演示的案例中,您將清楚的知道什么時候使用jQuery會更加便利,然后什么時候切換到本地選擇會更加方便。.

9、 Server-Sent Events API:一個網(wǎng)頁獲取新的數(shù)據(jù)通常需要發(fā)送一個請求到服務(wù)器,也就是向服務(wù)器請求的頁面.使用Server-Sent Events API,服務(wù)器可以在任何時刻向我們的web頁面推送數(shù)據(jù)和信息.這些被推送進來的信息可以在這個頁面上作為事件/數(shù)據(jù)來處理。服務(wù)器推送事件(Server-Sent Events)的優(yōu)點在于: 只要響應(yīng)的內(nèi)容類型是事件/數(shù)據(jù)流,事件就通過HTTP發(fā)送,瀏覽器能夠識別該傳輸。

10、 Web Notifications API即web消息提醒,它可以使頁面可以發(fā)出通知,通知將被顯示在頁面之外的系統(tǒng)層面上(通常使用操作系統(tǒng)的標準通知機制,但是在不同的平臺和瀏覽器上的表現(xiàn)會有差異)。這個功能使 web 應(yīng)用可以向用戶發(fā)送信息,即使應(yīng)用處于空閑狀態(tài)。最明顯的用例之一是一個網(wǎng)頁版電子郵件應(yīng)用程序,每當用戶收到了一封新的電子郵件都需要通知用戶,即使用戶正在使用另一個應(yīng)用程序。在2013年夏天,這個API還是在被W3C在試用,并沒有被很多瀏覽器所應(yīng)用。

11、 Web Sockets API:Web Sockets是一種基于 ws 協(xié)議的技術(shù),它使得建立全雙工連接成為可能。websocket 常見于瀏覽器中,但是這個協(xié)議不受使用平臺的限制。它允許你收發(fā)信息到服務(wù)器端。這個典型的示例就是即時通信。你建立一個對話,如果沒有sockets,你可能會去從服務(wù)器中去獲取新的消息。如果具有了sockets,當消息通過瀏覽器發(fā)到服務(wù)端的時候,對方的客戶端通過已經(jīng)建立好的sockets鏈接就能自動的接收到信息。

12、 Web存儲,它有兩種版本,本地存儲和會話存儲。就WEB開發(fā)來說,一個會話就是你通過瀏覽器與服務(wù)器之間的一次通話,所以,如果你熟悉服務(wù)器端web開發(fā),會話存儲可能不是頭一次聽說?;旧?只要用戶頁在頁面上的統(tǒng)一個會話內(nèi),工作數(shù)據(jù)就不會丟失。如果瀏覽器關(guān)閉或者轉(zhuǎn)向另一個會話,那么此時數(shù)據(jù)就不復(fù)存在。本地存儲在不同會話之間仍然能保存數(shù)據(jù), 本地存儲與cookie 和IndexedDB相比,它可以讓你來貯存更多的信息。Web存儲與cookie,數(shù)據(jù)不發(fā)送到請求的服務(wù)器而是保存在客戶端。

這些都是HTML5中新加入的一些比較常用的功能API,如果你想要系統(tǒng)的了解HTML5的新功能,推薦你去一個叫做秒秒學(xué)的教程網(wǎng)站上看看,里面有專門的課程來講解HTML5中的新特性,希望對你有幫助。

html5可以做在線語音聊天功能嗎

有啥不可以的。HTML5可以實現(xiàn)APP的離線推送通知,我自己電腦都在用facebook和twitter,linkin的離線通知,視頻音頻處理能力非常之強,加上webGL技術(shù)讓其發(fā)揮各種酷炫的甚至FLASH無法比擬的效果,很多你無法想象的3D效果都發(fā)揮的淋漓盡致,還有很多設(shè)備響應(yīng),視頻音頻響應(yīng)的API,國外也出現(xiàn)了一些用視頻音頻操作的web,加之老外開發(fā)了一些HTML5優(yōu)秀框架和API,你說它還不能做什么嘛?哦對了,國外有很多HTML5在線視頻語音聊天的網(wǎng)站了,由于很多處于中國限制級,怕放出來說傳播違禁網(wǎng)站,自己去找啦。

你可以體驗下youtube的HTML5關(guān)于視頻和音頻的一些功能體驗,你就知道HTML5在視頻音頻上有多強了。

HTML5是要配合一些專有API,框架,javascript才能發(fā)揮出其性能的,并不是說就是用它的原生HTML標簽就做出效果了,標簽只是地基,它深層次的東西需要一個學(xué)習(xí)過程的。

我不懂HTML5深層次的開發(fā),我只是業(yè)余全棧,我能說出看到過用到過的這些,專業(yè)HTML5開發(fā)的大神,或許還有更多更多好東西等著你呢└(^o^)┘

本文標題:html5通話,html5 語音聊天
本文網(wǎng)址:http://m.rwnh.cn/article0/dsdhgio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站手機網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作、動態(tài)網(wǎng)站、營銷型網(wǎng)站建設(shè)外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)
从江县| 张家界市| 商南县| 勐海县| 顺义区| 犍为县| 合阳县| 昌黎县| 全椒县| 临朐县| 文安县| 沙雅县| 霸州市| 金堂县| 宁夏| 新余市| 万盛区| 利津县| 巴彦县| 全南县| 新疆| 富顺县| 临夏市| 九龙县| 美姑县| 商城县| 延安市| 儋州市| 舒兰市| 金华市| 金坛市| 长岛县| 济南市| 孟州市| 辛集市| 宁乡县| 芦溪县| 伊金霍洛旗| 北海市| 祁连县| 南部县|