顯示具有 WIFI 標籤的文章。 顯示所有文章
顯示具有 WIFI 標籤的文章。 顯示所有文章

2016年5月9日 星期一

0509 IOS WIFI 簡易說明

https://bobffin.wordpress.com/2013/12/30/ios-captivenetwork-api-%E7%9A%84%E7%94%A8%E6%B3%95/


iOS CaptiveNetwork API 的用法


Image
Captive Network 指的是接上 WiFi 基地台後還要經過帳號密碼認證(通常是 Web 介面)才能提供連接 Internet 服務的網路。印象中從 iOS 6 開始系統設定 App 中的 WiFi 選項在您連上的網路是 Captive Network 時,會自動跳出網頁介面的登入畫面供您登入網路使用,如果您在網頁介面中將帳號資料儲存下來的話,下次就可以自動登入。
小弟最近接了一個 case,專案的需求是要 App 自行處理登入的部份。所以就得要透過 iOS 的 CaptiveNetwork 這組 API 來實作了。先說明一點,在 iOS 上從 iOS 5 後,WiFi 的許多功能都被上鎖了,所以沒有 JB 的話,WiFi 的部份在 iOS 上只能抓到目前連上的 WiFi AP 之 SSID、IP 與 BSSID,訊號強度以及附近的 WiFi AP 列表都不開放了。真正…管得很嚴捏!
這組 API 有只有 5 個方法可以用:
CNCopyCurrentNetworkInfo – 用來取得目前連上的 WiFi 網路資訊
CNCopySupportedInterfaces – 用來取得所有 Captive Network 支援的網路介面,比方說 WiFI 還是 3G 等。
CNMarkPortalOffline – 用來通知系統認證的網路不能連網,也就是說在認證失敗時,通知系統這個網路不能連上網。
CNMarkPortalOnline – 用來通知系統認證過的網路已可用來連網,這是在認證成功時,通知系統這個網路已連上網。
CNSetSupportedSSIDs – 用來通知系統,哪些 SSID 要使用 Captive Network,請系統在這些 SSID 連上線時,不要啟用網頁登入機制,改由註冊這些 SSID 的 App 來處理登入工作。
不過,註冊了這些 SSID 後,可別以為系統設定 App 會在您連上某 SSID 時,就會叫用您的 APP 出來處理認證工作。不會的,使用者還是需要手動開啟您的 App 去進行客制化的登入。
要使用這組 API 前,別忘了要在專案的一般設定中,如入 SystemConfiguration 框架,並將 captiveNetwork.h 定義檔引入。
螢幕快照 2013-12-30 上午3.12.04
小弟將註冊 SSID 的程式碼寫在 AppDelegate 裡頭:
NSArray* SSIDArray = [[NSArray alloc] initWithObjects:@"SSIDA", @"SSIDB", @"SSIDC", @"SSIDD", nil];
CFArrayRef ssidArray = (__bridge CFArrayRef)SSIDArray;
BOOL captiveNetworkListUpdated = CNSetSupportedSSIDs(ssidArray);
if (captiveNetworkListUpdated)
NSLog(@"CaptiveNetwork updated!");
註冊了這些 SSID 後,設定 App 在連上這些 SSID 時,就不會自動跳出登入網頁讓使用者登入了,但遺憾的連上這些 SSID 時,系統並不會自動啟用您的 App。😦
別忘了要在認證通過後,寫上:
CFArrayRef myArray = CNCopySupportedInterfaces();
if(CNMarkPortalOnline(CFArrayGetValueAtIndex(myArray, 0)))
NSLog(@"portalOnLined");
通知系統,這個連線已通過認證,可以用來上網了。
如果認證不通過,則寫上:
CFArrayRef myArray = CNCopySupportedInterfaces();
if(CNMarkPortalOffline(CFArrayGetValueAtIndex(myArray, 0)))
NSLog(@"portalOffLined");
通知系統說,認證不通過,這個網路無法使用。

2016年4月22日 星期五

0422 獲取 ios 系統網絡狀況、電量

獲取 ios 系統網絡狀況、電量

版權聲明:本文為 松陽 (blog.csdn.net/fansongy) 原創文章,轉載務必註明出處。
本篇博客出自阿修羅道,轉載請註明出處:http://blog.csdn.net/fansongy/article/details/8927734
cocos2d-x中並沒有關於獲取一些系統底層信息的方法。由於跨平台編譯的原因,需要根據平台來自己寫。
通常需要顯示是網絡連接狀態和電池的電量這兩個。
  1. #import "Foundation/Foundation.h"  
  2. #import "UIKit/UIKit.h"  
  3.   
  4. typedef enum  
  5. {  
  6.     // Apple NetworkStatus Compatible Names.  
  7.     NoNetWork    = 0,  
  8.     ConnWiFi     = 2,  
  9.     Conn3G       = 1  
  10. } NetState;  
  11.   
  12.   
  13. // 獲取電池電量,範圍0到1.0。-1表示電量未知。  
  14. float getBatteryLeve();  
  15.   
  16. // 檢測WIFI是否可用  
  17. bool isWIFIEnabled();  
  18.   
  19.   
  20. // 檢測3G網絡是否可用  
  21. bool is3GEnabled();  
  22.   
  23. //取得網絡連接狀況  
  24. NetState getNetState();  

實現是用.mm來實現,就是調用一些ios現成的接口。
  1. #include "SystemInfo.h"  
  2. #import "Reachability.h"  
  3.   
  4. NSString* testPage = @"www.baidu.com";  
  5.   
  6. float getBatteryLeve()  
  7. {  
  8.     [[UIDevice currentDevice] setBatteryMonitoringEnabled:YES];  
  9.     return [[UIDevice currentDevice] batteryLevel];  
  10. }  
  11.   
  12. // 檢測WIFI是否可用  
  13. bool isWIFIEnabled()  
  14. {  
  15.     return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);  
  16. }  
  17.   
  18. // 檢測3G網絡是否可用  
  19. bool is3GEnabled()  
  20. {  
  21.     return [[Reachability reachabilityForInternetConnection] isReachableViaWWAN];  
  22. }  
  23.   
  24.   
  25. NetState getNetState()  
  26. {  
  27.       
  28.     Reachability *r = [Reachability reachabilityWithHostname:testPage];  
  29.     switch ([r currentReachabilityStatus]) {  
  30.         case NotReachable:  
  31.             // 沒有網絡連接  
  32.             return NoNetWork;  
  33.             break;  
  34.         case ReachableViaWWAN:  
  35.             // 使用3G網絡  
  36.             return Conn3G;  
  37.             break;  
  38.         case ReachableViaWiFi:  
  39.             // 使用WiFi網絡  
  40.             return ConnWiFi;  
  41.             break;  
  42.     }  
  43.        
  44. }  

    其中Reachability類是官方給提供的一個測試網絡的類。使用時引入Reachability.h 和.m就可以,另外還要在Frameworks中加入SystemConfiguration.framework。一些使用可以百度,我下面的源碼中也能找到相應的項目。

    源碼:http://download.csdn.net/detail/fansongy/5377491
  

2016年4月15日 星期五

0414 cocos2d-x 檢測當前網絡是否為wifi

http://bbs.9ria.com/blog-127793-21587.html

cocos2d-x android開發中 常用的一些筆記

//設置窗體全屏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);


//設置窗體始終點亮
getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
      WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

//設置窗體背景模糊

getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,
                WindowManager.LayoutParams.FLAG_BLUR_BEHIND);



System.exit(0); //常規java、c#的標準退出法,返回值為0代表正常退出

android.os.Process.killProcess(android.os.Process.myPid()) ; //獲取PID


//檢測當前網絡是否為wifi
public static ConnectivityManager conMan;

conMan = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
public static boolean CheckNetworkIsWifi()
    {
boolean isWifi = false;
Log.e("TAG", "CheckNetworkIsWifi");
        //mobile 3G Data Network
try 
{
       State mobile = conMan.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();
       Log.e("TAG 3G", mobile.toString());
       //wifi
       State wifi = conMan.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
       Log.e("TAG WIFI", wifi.toString());
       
       if(mobile == State.CONNECTED || mobile == State.CONNECTING)
       {
        Log.e("TAG 3G", "is network 3g!!!");
        isWifi = false;
       }
       else if(wifi == State.CONNECTED || wifi == State.CONNECTING)
       {
        Log.e("TAG WIFI", "is network wifi");
        isWifi = true;
       }
catch (Exception e) 
{
Log.e("TAG", "is network error!!!");
isWifi = true;
}

        return isWifi;
    }
}

cocos2dx-lua 建立滑鼠監聽

重要關鍵字  EVENT_MOUSE_SCROLL addEventListenerWithSceneGraphPriority      if IsPc() then --建立滑鼠監聽         local listener = cc.EventListenerMouse...