www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > > 充電吧
[導讀]Wifi_Direct是目前設備間最快的無線數據連接方式,速度可以達到40Mb/s。Google從Android 4.0(ICS)開始支持Wifi_Direct,而三星則更早些就在它自己的設備上支持了

Wifi_Direct是目前設備間最快的無線數據連接方式,速度可以達到40Mb/s。Google從Android 4.0(ICS)開始支持Wifi_Direct,而三星則更早些就在它自己的設備上支持了Wifi_Direct。幾年來,Wifi_Direct的發(fā)展一直不溫不火,但是目前市面上支持Wifi_Direct的設備并不是很多。 ? ? ? ? 從目前接觸過得設備來看,三星I9100的Wifi_Direct功能其實使用了Wifi的硬件,所以,它在使用Wifi_Direct功能時,無法使用wifi;nexus7、Padfone infinite(A80)則有獨立的硬件來支持Wifi_Direct,所以,在使用Wifi_Direct功能的時候,Wifi仍舊可用。
? ? ? ? ? Android framework提供了一個android.net.wifi.p2p包來提供對于Wifi_Direct的支持,其中包含了7個class和9個interface。其中WifiP2pManager為最核心的class,其他的class和interface都為它所用。
? ? ? ? ? 使用Wifi_P2p需要的Permission有兩個:

public static final?String?ACCESS_WIFI_STATE
Added in?API level 1
Allows applications to access information about Wi-Fi networks
Constant Value:?"android.permission.ACCESS_WIFI_STATE"


public static final?String?CHANGE_WIFI_STATE
Added in?API level 1
Allows applications to change Wi-Fi connectivity state
Constant Value:?"android.permission.CHANGE_WIFI_STATE"

? ? ? ? Wifi_Direct的大致配對流程如下:

? ? ? ? 1. WifiP2pManager.discoverPeers()開始掃描設備 ? ? ? ? 2. 獲取掃描到的設備,選擇其中一個設備進行連接配對WifiP2pManager.connect ? ? ? ? 3. 配對成功后,根據WifiP2pInfo.isGroupOwner和WifiP2pInfo.groupOwnerAddress進行連接。

? ? ? ? 個人認為Wifi_Direct配對需要注意的問題: ? ? ? ? 1. Setting中啟用/關閉WifiP2p按鈕,應該是和Wifi的啟用/關閉按鈕放在一起了(其實,有些設備的實現(xiàn)中,Wifip2p使用的就是wifi的硬件),所以使用WifiP2p功能需要開啟Wifi。 ? ? ? ? 2. Setting中BlueTooth有一個“讓自己可見”的按鈕,而Wifi_Direct沒有這樣的設置,僅提供了一個啟動scan的按鈕。本人尚未明確在未啟動scan的情況下,設備對于其他wifi_direct是否是可見的,但是可以明確scan中的wifi_direct設備對其他設備來說是可見的。所以,建議需要進行配對的兩臺Wifi_Direct設備都進行scan。 ? ? ? ? 3. 配對成功的前提條件是:進行配對的兩臺設備都必須能夠掃描到對方。所以,兩臺設備都進行scan操作的根本原因在這里。 ? ? ? ? 4. 開發(fā)者無法決定GroupOwner是哪臺設備,但是可以通過WifiP2pConfig.groupOwnerIntent參數進行建議。
? ? ? ? 從測試的結果來說,Wifi_Direct的表現(xiàn)受具體設備的影響很大,配對的速度也有較大差異,從10秒到2分鐘甚至更久。大概的來說,nexus7成功的概率較高,個人感覺可以達到70%的成功率,Padfone infinite(A80)的成功率在50%以下。 ? ? ? ? ? ? ? ? ? ?為了兼容傳統(tǒng)的Wifi設備,Wifi_Direct其實還存在另一種使用方式,暫且稱為兼容模式。兼容模式的特點在于,只需要擔任GroupOwner的設備支持Wifi_Direct,而其他設備只需要支持傳統(tǒng)的Wifi就可以了(個人覺得其實這種使用模式很像Android的便攜熱點功能)。 ? ? ? ? ?操作流程為: ? ? ? ? ?1. 支持Wifi_Direct的設備創(chuàng)建group,WifiP2pManager.createGroup(),成為GroupOwner。 ? ? ? ? ?2. ?其他設備掃描Wifi_Direct設備創(chuàng)建group后產生的Wifi熱點并連接即可。
? ? ? ? ?兼容模式存在的一個問題是:因為作為group member的設備是使用Wifi硬件接入到group中,所以會導致member進行wifi 熱點切換以及網絡中斷,可能對正在進行的網絡操作造成影響,而group owner則不存在這個問題。另外,而WifiP2p配對的使用方式,WifiP2p和Wifi可以獨立運作,相互不受影響。 ? ? ? ? ? ? ? ? ? ? 但是,兼容模式因為省去了掃描和配對的過程,所以建立連接的成功率明顯提升,并且建立連接的速度要快不少(具體時間比較隨機)。 ? ? ? ? ? 從個人的使用感覺來講,這WifiP2p這套API接口高度的異步化,API都需要以回調的方式獲取操作結果(包內interface比較多的原因就在于此)。更加麻煩的是,幾個關鍵API(例如WifiP2pManager.connect)的回調獲取到的結果僅僅是執(zhí)行是否開始,真正的結果還得注冊broadcast receiver,通過監(jiān)聽廣播來獲得,才能進行下一步操作。異步的設計提高了代碼的邏輯復雜度。

? ? ? ? ?使用NFC來實現(xiàn)WifiP2p的連接: ? ? ? ? ?1. 使用NFC將owner設備創(chuàng)建的group的SSID和密碼傳遞給member設備 ? ? ? ? ?2. owner開始監(jiān)聽指定端口,等待member的連接 ? ? ? ? ?3. member接收到nfc傳遞過來的數據后,根據SSID和密碼連接到group ? ? ? ? ?4. 連接成功以后,過去owner設備的ip地址(獲取gateway ip即可),連接到owner的指定端口

? ? ? ? ? 常見問題: ? ? ? ? ? 1. WifiP2p相關的廣播有哪些,各自有哪些參數?
WifiP2pManager.WIFI_P2P_DISCOVERY_CHANGED_ACTION:當WifiP2p掃描開始或者停止時,觸發(fā)該廣播 該廣播包含一個int型extra, key為WifiP2pManager.EXTRA_DISCOVERY_STATE,其值為WifiP2pManager.WIFI_P2P_DISCOVERY_STARTED或者WifiP2pManager.WIFI_P2P_DISCOVERY_STARTED.
WifiP2pManager.WIFI_P2P_STATE_CHANGED_ATIONIC:當WifiP2p狀態(tài)發(fā)生變化時觸發(fā)(如果WifiP2p可用,那么當BroadcastReceiverregister時,也會收到該廣播) 該廣播包含一個int型extra,key為WifiP2pManager.EXTRA_WIFI_STATE,其值為WifiP2pManager.WIFI_P2P_STATE_ENABLED或者WifiP2pManager.WIFI_P2P_STATE_DISABLED。
WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION:當設備的WifiP2p狀態(tài)發(fā)生變化時觸發(fā)廣播(如果WifiP2p可用,那么當BroadcastReceiverregister時,也會收到該廣播) 該廣播包含一個類型為WifiP2pDevice的extra,key為WifiP2pManager.EXTRA_WIFI_P2P_DEVICE.
WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION:當WifiP2p掃描時,發(fā)現(xiàn)device列表發(fā)生變化時,觸發(fā)該廣播 該廣播不含extra,開發(fā)者應該接收到此廣播后,調用WifiP2pManager.requestPeers()函數查詢當前設別列表。
WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION:當WifiP2p的group發(fā)生變化時,觸發(fā)該廣播。 該廣播包含兩個extra: key:WifiP2pManager.EXTRA_NETWORK_INFO,其值為NetworkInfo類型。 key:WifiP2pManager.EXTRA_P2P_INFO,其值為WifiP2pInfo類型。 PS:這里的WifiP2p group發(fā)生變化包含如下情況: 1. 建立group 2. member加入到group 3. member退出group 4. 關閉group
? ? ? ? 2. 如何獲得WifiP2pGroupInfo,它有什么用? WifiP2pManager.requestGroupInfo()函數,可以獲取GroupInfo,較為有用的api有: 1. GroupInfo.getClientList()可以獲得連接到group的member列表 2. GroupInfo.getNetWorkName()可以獲得group的wifi熱點名稱(SSID) 3. GroupInfo.getPassphrase() 可以獲得連接到wifi 熱點的密碼
? ? ? ? 3. 如何獲得WifiP2pInfo? 可以從WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION廣播中的extra中獲取 也可以從WifiP2pManager.requestConnectionInfo()函數獲取。
? ? ? ? 4. 如何防止配對產生的提示框? 在不修改framework的情況下,本人暫時為找到可行的方案。 這個提示狂是由系統(tǒng)提供的,具體表現(xiàn)視設備而定。nexus只在第一次配對的時候彈出,而A80每一次配對都會彈出。 但是,使用兼容模式使用Wifi_Direct是沒有提示框的。
? ? ? ? ?5. 如何實現(xiàn)wifi熱點的連接? ?經過測試,在A80上,如下代碼可以實現(xiàn)連接到熱點。

????????????//?build?a?wifi?config
????????????final?WifiConfiguration?config?=?new?WifiConfiguration();
????????????config.allowedAuthAlgorithms.clear();
????????????config.allowedPairwiseCiphers.clear();
????????????config.allowedGroupCiphers.clear();
????????????config.allowedKeyManagement.clear();
????????????config.allowedProtocols.clear();

????????????config.SSID?=?"""?+?ssid?+?""";//設定ssid
????????????config.preSharedKey?=?"""?+?pw?+?""";//設定密碼
????????????config.hiddenSSID?=?false;
????????????config.status?=?WifiConfiguration.Status.ENABLED;
????????????config.priority?=?1;
????????????config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
????????????config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
????????????config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
????????????config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
????????????config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
????????????config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
????????????config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
????????????config.allowedPairwiseCiphers.set(3);
????????????config.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
????????????config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);

????????????//?connect?to?ap
????????????int?id?=?WifiManager.addNetwork(config);
????????????config.networkId?=?id;
????????????if?(id?!=?-1?&&?mWifiManager.enableNetwork(id,?true))?{
????????????????....
????????????}


? ? ? ? 6. 如何通過代碼開啟便攜熱點?(這個問題和Wifi_Direct無關,但是可以讓不支持Wifi_Direct的Android設備獲得類似模擬模式的效果,可能和快牙的實現(xiàn)方式相似)
正常情況下,開啟便攜熱點的API因為hide隱藏的關系,無法被apk調用,僅原生app可以調用。但是用java的反射機制可以讓普通app也能調用這個api,實現(xiàn)如下: //?wifi熱點開關?? ????public?boolean?setWifiApEnabled(boolean?enabled)?{?? ????????if?(enabled)?{?//?disable?WiFi?in?any?case?? ????????????//wifi和熱點不能同時打開,所以打開熱點的時候需要關閉wifi?? ????????????wifiManager.setWifiEnabled(false);?? ????????}?? ????????try?{?? ????????????//熱點的配置類?? ????????????WifiConfiguration?apConfig?=?new?WifiConfiguration();?? ????????????//配置熱點的名稱(可以在名字后面加點隨機數什么的)?? ????????????apConfig.SSID?=?"YRCCONNECTION";?? ????????????//配置熱點的密碼?? ????????????apConfig.preSharedKey="12122112";?? ????????????????//通過反射調用設置熱點?? ????????????Method?method?=?wifiManager.getClass().getMethod(?? ????????????????????"setWifiApEnabled",?WifiConfiguration.class,?Boolean.TYPE);?? ????????????//返回熱點打開狀態(tài)?? ????????????return?(Boolean)?method.invoke(wifiManager,?apConfig,?enabled);?? ????????}?catch?(Exception?e)?{?? ????????????return?false;?? ????????}?? ????} ? 以上代碼拷貝自:http://blog.csdn.net/luoboo525/article/details/7883998

? ? ? ? 7. WifiP2pManager.discovePeers僅僅返回附近有哪些設備開啟了wifi p2p,而app的實際使用場景,往往希望尋找可以提供某些特定服務的設備。例如同一房間內,有A,B,C,D四臺設備開啟了wifi p2p,而A設備和B設備都安裝了app1,C設備和D設備都安裝了app2,使用者希望A設備能和B設備配對連接,而C設備與D設備連接,運行在A設備上的app1如何識別它應該連接的是B設備,而非C、D設備呢?
? ? ? ? 為了支持更加個性化的設備發(fā)現(xiàn),WifiP2pManager支持UPNP和DNS兩種方式的設備(服務?)發(fā)現(xiàn)。 ? ? ? ? App可以通過WifiP2pManager.addLocalService來向周邊的設備廣播自己支持哪些服務。 ? ? ? ? 也可以通過如下步驟實現(xiàn)發(fā)現(xiàn)這些服務: ? ? ? ? 1. 通過WifiP2pManager.addServiceRequest()添加服務請求 ? ? ? ? 2. 通過WifiP2pManager.discoverService()開始服務發(fā)現(xiàn) ? ? ? ? 3. 通過WifiP2pManager.setDnsSdResponseListener()或者WifiP2pManager.setUpnpServiceResponseListener()監(jiān)聽服務內容。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉