зеркало из https://github.com/xamarin/ios-samples.git
[Reachability] Fix startup crash + update sample
This commit is contained in:
Родитель
1b316ce381
Коммит
d75b9c3f64
|
@ -1,170 +1,10 @@
|
|||
using System;
|
||||
using CoreGraphics;
|
||||
using Foundation;
|
||||
using Foundation;
|
||||
using UIKit;
|
||||
|
||||
namespace reachability
|
||||
{
|
||||
public partial class ReachabilityAppDelegate : UIApplicationDelegate
|
||||
{
|
||||
UITableView tableView;
|
||||
NetworkStatus remoteHostStatus, internetStatus, localWifiStatus;
|
||||
|
||||
static void Main (string[] args)
|
||||
{
|
||||
UIApplication.Main (args, null, (string)null);
|
||||
}
|
||||
|
||||
public override bool FinishedLaunching (UIApplication application, NSDictionary launchOptions)
|
||||
{
|
||||
AddTable ();
|
||||
UpdateStatus ();
|
||||
Reachability.ReachabilityChanged += (object sender, EventArgs e) => {
|
||||
UpdateStatus ();
|
||||
};
|
||||
|
||||
window.MakeKeyAndVisible ();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void UpdateStatus ()
|
||||
{
|
||||
remoteHostStatus = Reachability.RemoteHostStatus ();
|
||||
internetStatus = Reachability.InternetConnectionStatus ();
|
||||
localWifiStatus = Reachability.LocalWifiConnectionStatus ();
|
||||
tableView.ReloadData ();
|
||||
}
|
||||
|
||||
void AddTable ()
|
||||
{
|
||||
CGRect tableFrame = UIScreen.MainScreen.ApplicationFrame;
|
||||
|
||||
tableView = new UITableView (tableFrame, UITableViewStyle.Grouped) {
|
||||
AutoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight,
|
||||
RowHeight = 44.0f,
|
||||
SeparatorStyle = UITableViewCellSeparatorStyle.None,
|
||||
SectionHeaderHeight = 28.0f,
|
||||
ScrollEnabled = false,
|
||||
|
||||
Source = new DataSource (this),
|
||||
};
|
||||
|
||||
contentView.InsertSubviewBelow (tableView, summaryLabel);
|
||||
contentView.BringSubviewToFront (summaryLabel);
|
||||
tableView.ReloadData ();
|
||||
}
|
||||
|
||||
class DataSource : UITableViewSource
|
||||
{
|
||||
ReachabilityAppDelegate parent;
|
||||
UIImage imageCarrier, imageWiFi, imageStop;
|
||||
|
||||
public DataSource (ReachabilityAppDelegate parent)
|
||||
{
|
||||
imageCarrier = UIImage.FromFile ("WWAN5.png");
|
||||
imageWiFi = UIImage.FromFile ("Airport.png");
|
||||
imageStop = UIImage.FromFile ("stop-32.png");
|
||||
|
||||
this.parent = parent;
|
||||
}
|
||||
|
||||
public override NSIndexPath WillSelectRow (UITableView view, NSIndexPath index)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public override nint RowsInSection (UITableView view, nint section)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
public override nint NumberOfSections (UITableView view)
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
|
||||
public override string TitleForHeader (UITableView view, nint section)
|
||||
{
|
||||
switch (section) {
|
||||
case 0:
|
||||
return Reachability.HostName;
|
||||
case 1:
|
||||
return "Access to internet hosts";
|
||||
case 2:
|
||||
return "Access to Local Bonjour Hosts";
|
||||
default:
|
||||
return "Unknown";
|
||||
}
|
||||
}
|
||||
|
||||
static NSString ReachabilityTableCellIdentifier = new NSString ("ReachabilityTableCell");
|
||||
|
||||
public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
|
||||
{
|
||||
var cell = tableView.DequeueReusableCell (ReachabilityTableCellIdentifier);
|
||||
if (cell == null) {
|
||||
cell = new UITableViewCell (UITableViewCellStyle.Default, ReachabilityTableCellIdentifier);
|
||||
var label = cell.TextLabel;
|
||||
label.Font = UIFont.SystemFontOfSize (12f);
|
||||
label.TextColor = UIColor.DarkGray;
|
||||
label.TextAlignment = UITextAlignment.Left;
|
||||
}
|
||||
|
||||
var row = indexPath.Row;
|
||||
string text = "";
|
||||
UIImage image = null;
|
||||
switch (indexPath.Section) {
|
||||
case 0:
|
||||
switch (parent.remoteHostStatus) {
|
||||
case NetworkStatus.NotReachable:
|
||||
text = "Cannot connect to remote host";
|
||||
image = imageStop;
|
||||
break;
|
||||
case NetworkStatus.ReachableViaCarrierDataNetwork:
|
||||
text = "Reachable via data carrier network";
|
||||
image = imageCarrier;
|
||||
break;
|
||||
case NetworkStatus.ReachableViaWiFiNetwork:
|
||||
text = "Reachable via WiFi network";
|
||||
image = imageWiFi;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
switch (parent.internetStatus) {
|
||||
case NetworkStatus.NotReachable:
|
||||
text = "Access not available";
|
||||
image = imageStop;
|
||||
break;
|
||||
case NetworkStatus.ReachableViaCarrierDataNetwork:
|
||||
text = "Available via data carrier network";
|
||||
image = imageCarrier;
|
||||
break;
|
||||
case NetworkStatus.ReachableViaWiFiNetwork:
|
||||
text = "Available via WiFi network";
|
||||
image = imageWiFi;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
switch (parent.localWifiStatus) {
|
||||
case NetworkStatus.NotReachable:
|
||||
text = "Access not available";
|
||||
image = imageStop;
|
||||
break;
|
||||
case NetworkStatus.ReachableViaWiFiNetwork:
|
||||
text = "Available via WiFi network";
|
||||
image = imageWiFi;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
cell.TextLabel.Text = text;
|
||||
cell.ImageView.Image = image;
|
||||
return cell;
|
||||
}
|
||||
}
|
||||
namespace Reachability {
|
||||
[Register ("AppDelegate")]
|
||||
public class AppDelegate : UIApplicationDelegate {
|
||||
public override UIWindow Window { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -29,5 +29,7 @@
|
|||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
</array>
|
||||
<key>UIMainStoryboardFile</key>
|
||||
<string>Main</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
using UIKit;
|
||||
|
||||
namespace Reachability {
|
||||
public class Application {
|
||||
// This is the main entry point of the application.
|
||||
static void Main (string[] args)
|
||||
{
|
||||
// if you want to use a different Application Delegate class from "AppDelegate"
|
||||
// you can specify it here.
|
||||
UIApplication.Main (args, null, "AppDelegate");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="8187.4" systemVersion="15A178w" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" initialViewController="G6t-Sy-zaY">
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="8151.3"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--Root View Controller-->
|
||||
<scene sceneID="AaP-65-3tI">
|
||||
<objects>
|
||||
<tableViewController id="uYg-Wb-NE8" customClass="MainViewController" sceneMemberID="viewController">
|
||||
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" id="bpy-jb-hsL">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<animations/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<prototypes>
|
||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="V1L-rk-bW7">
|
||||
<rect key="frame" x="0.0" y="92" width="320" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="V1L-rk-bW7" id="mEc-0D-cmu">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="43.5"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<animations/>
|
||||
</tableViewCellContentView>
|
||||
<animations/>
|
||||
</tableViewCell>
|
||||
</prototypes>
|
||||
<connections>
|
||||
<outlet property="dataSource" destination="uYg-Wb-NE8" id="UW0-nO-B63"/>
|
||||
<outlet property="delegate" destination="uYg-Wb-NE8" id="SFR-fz-wuW"/>
|
||||
</connections>
|
||||
</tableView>
|
||||
<navigationItem key="navigationItem" title="Root View Controller" id="WD6-LY-Wq6"/>
|
||||
</tableViewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="WLN-0l-dYf" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="748" y="134"/>
|
||||
</scene>
|
||||
<!--Navigation Controller-->
|
||||
<scene sceneID="rk5-AZ-VT1">
|
||||
<objects>
|
||||
<navigationController id="G6t-Sy-zaY" sceneMemberID="viewController">
|
||||
<navigationBar key="navigationBar" contentMode="scaleToFill" id="AZi-ef-rH6">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<animations/>
|
||||
</navigationBar>
|
||||
<connections>
|
||||
<segue destination="uYg-Wb-NE8" kind="relationship" relationship="rootViewController" id="FKX-Rz-4BI"/>
|
||||
</connections>
|
||||
</navigationController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="R6s-Lf-xV5" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="208" y="134"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
</document>
|
|
@ -0,0 +1,135 @@
|
|||
using System;
|
||||
|
||||
using UIKit;
|
||||
using Foundation;
|
||||
|
||||
namespace Reachability {
|
||||
public partial class MainViewController : UITableViewController {
|
||||
const string ReachabilityTableCellIdentifier = "ReachabilityTableCell";
|
||||
|
||||
UIImage imageCarrier, imageWiFi, imageStop;
|
||||
NetworkStatus remoteHostStatus, internetStatus, localWifiStatus;
|
||||
|
||||
public MainViewController (IntPtr handle) : base (handle)
|
||||
{
|
||||
}
|
||||
|
||||
public override void ViewDidLoad ()
|
||||
{
|
||||
base.ViewDidLoad ();
|
||||
UpdateStatus (null, null);
|
||||
Reachability.ReachabilityChanged += UpdateStatus;
|
||||
|
||||
imageCarrier = UIImage.FromFile ("WWAN5.png");
|
||||
imageWiFi = UIImage.FromFile ("Airport.png");
|
||||
imageStop = UIImage.FromFile ("stop-32.png");
|
||||
|
||||
TableView.AutoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight;
|
||||
TableView.RowHeight = 44.0f;
|
||||
TableView.SeparatorStyle = UITableViewCellSeparatorStyle.None;
|
||||
TableView.SectionHeaderHeight = 28.0f;
|
||||
TableView.ScrollEnabled = false;
|
||||
}
|
||||
|
||||
public override NSIndexPath WillSelectRow (UITableView view, NSIndexPath index)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public override nint RowsInSection (UITableView view, nint section)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
public override nint NumberOfSections (UITableView view)
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
|
||||
public override string TitleForHeader (UITableView view, nint section)
|
||||
{
|
||||
switch (section) {
|
||||
case 0:
|
||||
return Reachability.HostName;
|
||||
case 1:
|
||||
return "Access to internet hosts";
|
||||
case 2:
|
||||
return "Access to Local Bonjour Hosts";
|
||||
default:
|
||||
return "Unknown";
|
||||
}
|
||||
}
|
||||
|
||||
public override UITableViewCell GetCell (UITableView tableView, Foundation.NSIndexPath indexPath)
|
||||
{
|
||||
var cell = tableView.DequeueReusableCell (ReachabilityTableCellIdentifier);
|
||||
if (cell == null) {
|
||||
cell = new UITableViewCell (UITableViewCellStyle.Default, ReachabilityTableCellIdentifier);
|
||||
var label = cell.TextLabel;
|
||||
label.Font = UIFont.SystemFontOfSize (12f);
|
||||
label.TextColor = UIColor.DarkGray;
|
||||
label.TextAlignment = UITextAlignment.Left;
|
||||
}
|
||||
|
||||
string text = "";
|
||||
UIImage image = null;
|
||||
switch (indexPath.Section) {
|
||||
case 0:
|
||||
switch (remoteHostStatus) {
|
||||
case NetworkStatus.NotReachable:
|
||||
text = "Cannot connect to remote host";
|
||||
image = imageStop;
|
||||
break;
|
||||
case NetworkStatus.ReachableViaCarrierDataNetwork:
|
||||
text = "Reachable via data carrier network";
|
||||
image = imageCarrier;
|
||||
break;
|
||||
case NetworkStatus.ReachableViaWiFiNetwork:
|
||||
text = "Reachable via WiFi network";
|
||||
image = imageWiFi;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
switch (internetStatus) {
|
||||
case NetworkStatus.NotReachable:
|
||||
text = "Access not available";
|
||||
image = imageStop;
|
||||
break;
|
||||
case NetworkStatus.ReachableViaCarrierDataNetwork:
|
||||
text = "Available via data carrier network";
|
||||
image = imageCarrier;
|
||||
break;
|
||||
case NetworkStatus.ReachableViaWiFiNetwork:
|
||||
text = "Available via WiFi network";
|
||||
image = imageWiFi;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
switch (localWifiStatus) {
|
||||
case NetworkStatus.NotReachable:
|
||||
text = "Access not available";
|
||||
image = imageStop;
|
||||
break;
|
||||
case NetworkStatus.ReachableViaWiFiNetwork:
|
||||
text = "Available via WiFi network";
|
||||
image = imageWiFi;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
cell.TextLabel.Text = text;
|
||||
cell.ImageView.Image = image;
|
||||
return cell;
|
||||
}
|
||||
|
||||
void UpdateStatus (object sender, EventArgs e)
|
||||
{
|
||||
remoteHostStatus = Reachability.RemoteHostStatus ();
|
||||
internetStatus = Reachability.InternetConnectionStatus ();
|
||||
localWifiStatus = Reachability.LocalWifiConnectionStatus ();
|
||||
TableView.ReloadData ();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
// WARNING
|
||||
//
|
||||
// This file has been generated automatically by Xamarin Studio to store outlets and
|
||||
// actions made in the UI designer. If it is removed, they will be lost.
|
||||
// Manual changes to this file may not be handled correctly.
|
||||
//
|
||||
using Foundation;
|
||||
using System.CodeDom.Compiler;
|
||||
|
||||
namespace Reachability
|
||||
{
|
||||
[Register ("MainViewController")]
|
||||
partial class MainViewController
|
||||
{
|
||||
|
||||
void ReleaseDesignerOutlets ()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,276 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.10">
|
||||
<data>
|
||||
<int key="IBDocument.SystemTarget">512</int>
|
||||
<string key="IBDocument.SystemVersion">10B504</string>
|
||||
<string key="IBDocument.InterfaceBuilderVersion">740</string>
|
||||
<string key="IBDocument.AppKitVersion">1038.22</string>
|
||||
<string key="IBDocument.HIToolboxVersion">457.00</string>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string key="NS.object.0">62</string>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<integer value="7"/>
|
||||
</object>
|
||||
<object class="NSArray" key="IBDocument.PluginDependencies">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="IBDocument.Metadata">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSArray" key="dict.sortedKeys" id="0">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBProxyObject" id="841351856">
|
||||
<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
|
||||
</object>
|
||||
<object class="IBProxyObject" id="1071500409">
|
||||
<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
|
||||
</object>
|
||||
<object class="IBUICustomObject" id="987256611"/>
|
||||
<object class="IBUIWindow" id="380026005">
|
||||
<reference key="NSNextResponder"/>
|
||||
<int key="NSvFlags">1292</int>
|
||||
<object class="NSMutableArray" key="NSSubviews">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBUIView" id="388289409">
|
||||
<reference key="NSNextResponder" ref="380026005"/>
|
||||
<int key="NSvFlags">1298</int>
|
||||
<object class="NSMutableArray" key="NSSubviews">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBUILabel" id="1041619883">
|
||||
<reference key="NSNextResponder" ref="388289409"/>
|
||||
<int key="NSvFlags">1306</int>
|
||||
<string key="NSFrame">{{0, 318}, {320, 106}}</string>
|
||||
<reference key="NSSuperview" ref="388289409"/>
|
||||
<bool key="IBUIOpaque">NO</bool>
|
||||
<bool key="IBUIClipsSubviews">YES</bool>
|
||||
<bool key="IBUIUserInteractionEnabled">NO</bool>
|
||||
<string key="IBUIText"/>
|
||||
<object class="NSColor" key="IBUITextColor">
|
||||
<int key="NSColorSpace">1</int>
|
||||
<bytes key="NSRGB">MSAwIDAAA</bytes>
|
||||
</object>
|
||||
<nil key="IBUIHighlightedColor"/>
|
||||
<int key="IBUIBaselineAdjustment">1</int>
|
||||
<bool key="IBUIAdjustsFontSizeToFit">NO</bool>
|
||||
<float key="IBUIMinimumFontSize">14</float>
|
||||
<int key="IBUINumberOfLines">0</int>
|
||||
<int key="IBUITextAlignment">1</int>
|
||||
</object>
|
||||
</object>
|
||||
<string key="NSFrameSize">{320, 480}</string>
|
||||
<reference key="NSSuperview" ref="380026005"/>
|
||||
<object class="NSColor" key="IBUIBackgroundColor">
|
||||
<int key="NSColorSpace">3</int>
|
||||
<bytes key="NSWhite">MQA</bytes>
|
||||
<object class="NSColorSpace" key="NSCustomColorSpace">
|
||||
<int key="NSID">2</int>
|
||||
</object>
|
||||
</object>
|
||||
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
|
||||
<bool key="IBUIUserInteractionEnabled">NO</bool>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSPSMatrix" key="NSFrameMatrix"/>
|
||||
<string key="NSFrameSize">{320, 480}</string>
|
||||
<reference key="NSSuperview"/>
|
||||
<object class="NSColor" key="IBUIBackgroundColor">
|
||||
<int key="NSColorSpace">1</int>
|
||||
<bytes key="NSRGB">MSAxIDEAA</bytes>
|
||||
</object>
|
||||
<bool key="IBUIOpaque">NO</bool>
|
||||
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBObjectContainer" key="IBDocument.Objects">
|
||||
<object class="NSMutableArray" key="connectionRecords">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBCocoaTouchOutletConnection" key="connection">
|
||||
<string key="label">delegate</string>
|
||||
<reference key="source" ref="841351856"/>
|
||||
<reference key="destination" ref="987256611"/>
|
||||
</object>
|
||||
<int key="connectionID">5</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBCocoaTouchOutletConnection" key="connection">
|
||||
<string key="label">window</string>
|
||||
<reference key="source" ref="987256611"/>
|
||||
<reference key="destination" ref="380026005"/>
|
||||
</object>
|
||||
<int key="connectionID">6</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBCocoaTouchOutletConnection" key="connection">
|
||||
<string key="label">contentView</string>
|
||||
<reference key="source" ref="987256611"/>
|
||||
<reference key="destination" ref="388289409"/>
|
||||
</object>
|
||||
<int key="connectionID">8</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBCocoaTouchOutletConnection" key="connection">
|
||||
<string key="label">summaryLabel</string>
|
||||
<reference key="source" ref="987256611"/>
|
||||
<reference key="destination" ref="1041619883"/>
|
||||
</object>
|
||||
<int key="connectionID">10</int>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBMutableOrderedSet" key="objectRecords">
|
||||
<object class="NSArray" key="orderedObjects">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">0</int>
|
||||
<reference key="object" ref="0"/>
|
||||
<reference key="children" ref="1000"/>
|
||||
<nil key="parent"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">2</int>
|
||||
<reference key="object" ref="380026005"/>
|
||||
<object class="NSMutableArray" key="children">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference ref="388289409"/>
|
||||
</object>
|
||||
<reference key="parent" ref="0"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">-1</int>
|
||||
<reference key="object" ref="841351856"/>
|
||||
<reference key="parent" ref="0"/>
|
||||
<string key="objectName">File's Owner</string>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">4</int>
|
||||
<reference key="object" ref="987256611"/>
|
||||
<reference key="parent" ref="0"/>
|
||||
<string key="objectName">ReachabilityAppDelegate</string>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">7</int>
|
||||
<reference key="object" ref="388289409"/>
|
||||
<object class="NSMutableArray" key="children">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference ref="1041619883"/>
|
||||
</object>
|
||||
<reference key="parent" ref="380026005"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">9</int>
|
||||
<reference key="object" ref="1041619883"/>
|
||||
<reference key="parent" ref="388289409"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">-2</int>
|
||||
<reference key="object" ref="1071500409"/>
|
||||
<reference key="parent" ref="0"/>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="flattenedProperties">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSArray" key="dict.sortedKeys">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>-1.CustomClassName</string>
|
||||
<string>-2.CustomClassName</string>
|
||||
<string>2.IBAttributePlaceholdersKey</string>
|
||||
<string>2.IBEditorWindowLastContentRect</string>
|
||||
<string>2.IBPluginDependency</string>
|
||||
<string>2.UIWindow.visibleAtLaunch</string>
|
||||
<string>4.CustomClassName</string>
|
||||
<string>4.IBPluginDependency</string>
|
||||
<string>7.IBPluginDependency</string>
|
||||
<string>9.IBPluginDependency</string>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>UIApplication</string>
|
||||
<string>UIResponder</string>
|
||||
<object class="NSMutableDictionary">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference key="dict.sortedKeys" ref="0"/>
|
||||
<object class="NSMutableArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
</object>
|
||||
</object>
|
||||
<string>{{363, 365}, {320, 480}}</string>
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<integer value="1"/>
|
||||
<string>ReachabilityAppDelegate</string>
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="unlocalizedProperties">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference key="dict.sortedKeys" ref="0"/>
|
||||
<object class="NSMutableArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
</object>
|
||||
</object>
|
||||
<nil key="activeLocalization"/>
|
||||
<object class="NSMutableDictionary" key="localizations">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference key="dict.sortedKeys" ref="0"/>
|
||||
<object class="NSMutableArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
</object>
|
||||
</object>
|
||||
<nil key="sourceID"/>
|
||||
<int key="maxID">10</int>
|
||||
</object>
|
||||
<object class="IBClassDescriber" key="IBDocument.Classes">
|
||||
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">ReachabilityAppDelegate</string>
|
||||
<string key="superclassName">NSObject</string>
|
||||
<object class="NSMutableDictionary" key="outlets">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSArray" key="dict.sortedKeys">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>contentView</string>
|
||||
<string>summaryLabel</string>
|
||||
<string>window</string>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="dict.values">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<string>UIView</string>
|
||||
<string>UILabel</string>
|
||||
<string>UIWindow</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBProjectSource</string>
|
||||
<string key="minorKey">Classes/ReachabilityAppDelegate.h</string>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<int key="IBDocument.localizationMode">0</int>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
|
||||
<integer value="512" key="NS.object.0"/>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
|
||||
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
|
||||
<integer value="3000" key="NS.object.0"/>
|
||||
</object>
|
||||
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
|
||||
<string key="IBDocument.LastKnownRelativeProjectPath">Reachability.xcodeproj</string>
|
||||
<int key="IBDocument.defaultPropertyAccessControl">3</int>
|
||||
<string key="IBCocoaTouchPluginVersion">3.1</string>
|
||||
</data>
|
||||
</archive>
|
|
@ -1,60 +0,0 @@
|
|||
// ------------------------------------------------------------------------------
|
||||
// <autogenerated>
|
||||
// This code was generated by a tool.
|
||||
// Mono Runtime Version: 4.0.30319.1
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </autogenerated>
|
||||
// ------------------------------------------------------------------------------
|
||||
|
||||
namespace reachability {
|
||||
|
||||
// Base type probably should be MonoTouch.Foundation.NSObject or subclass
|
||||
[Foundation.Register("ReachabilityAppDelegate")]
|
||||
public partial class ReachabilityAppDelegate {
|
||||
|
||||
private UIKit.UIWindow __mt_window;
|
||||
|
||||
private UIKit.UIView __mt_contentView;
|
||||
|
||||
private UIKit.UILabel __mt_summaryLabel;
|
||||
|
||||
#pragma warning disable 0169
|
||||
[Foundation.Connect("window")]
|
||||
private UIKit.UIWindow window {
|
||||
get {
|
||||
this.__mt_window = ((UIKit.UIWindow)(this.GetNativeField("window")));
|
||||
return this.__mt_window;
|
||||
}
|
||||
set {
|
||||
this.__mt_window = value;
|
||||
this.SetNativeField("window", value);
|
||||
}
|
||||
}
|
||||
|
||||
[Foundation.Connect("contentView")]
|
||||
private UIKit.UIView contentView {
|
||||
get {
|
||||
this.__mt_contentView = ((UIKit.UIView)(this.GetNativeField("contentView")));
|
||||
return this.__mt_contentView;
|
||||
}
|
||||
set {
|
||||
this.__mt_contentView = value;
|
||||
this.SetNativeField("contentView", value);
|
||||
}
|
||||
}
|
||||
|
||||
[Foundation.Connect("summaryLabel")]
|
||||
private UIKit.UILabel summaryLabel {
|
||||
get {
|
||||
this.__mt_summaryLabel = ((UIKit.UILabel)(this.GetNativeField("summaryLabel")));
|
||||
return this.__mt_summaryLabel;
|
||||
}
|
||||
set {
|
||||
this.__mt_summaryLabel = value;
|
||||
this.SetNativeField("summaryLabel", value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,143 @@
|
|||
using System;
|
||||
using System.Net;
|
||||
using SystemConfiguration;
|
||||
|
||||
using CoreFoundation;
|
||||
|
||||
namespace Reachability {
|
||||
public enum NetworkStatus {
|
||||
NotReachable,
|
||||
ReachableViaCarrierDataNetwork,
|
||||
ReachableViaWiFiNetwork
|
||||
}
|
||||
|
||||
public static class Reachability
|
||||
{
|
||||
public static string HostName = "www.google.com";
|
||||
|
||||
public static bool IsReachableWithoutRequiringConnection (NetworkReachabilityFlags flags)
|
||||
{
|
||||
// Is it reachable with the current network configuration?
|
||||
bool isReachable = (flags & NetworkReachabilityFlags.Reachable) != 0;
|
||||
|
||||
// Do we need a connection to reach it?
|
||||
bool noConnectionRequired = (flags & NetworkReachabilityFlags.ConnectionRequired) == 0
|
||||
|| (flags & NetworkReachabilityFlags.IsWWAN) != 0;
|
||||
|
||||
return isReachable && noConnectionRequired;
|
||||
}
|
||||
|
||||
// Is the host reachable with the current network configuration
|
||||
public static bool IsHostReachable(string host)
|
||||
{
|
||||
if (string.IsNullOrEmpty(host))
|
||||
return false;
|
||||
|
||||
using (var r = new NetworkReachability(host)) {
|
||||
NetworkReachabilityFlags flags;
|
||||
|
||||
if (r.TryGetFlags(out flags))
|
||||
return IsReachableWithoutRequiringConnection(flags);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
//
|
||||
// Raised every time there is an interesting reachable event,
|
||||
// we do not even pass the info as to what changed, and
|
||||
// we lump all three status we probe into one
|
||||
//
|
||||
public static event EventHandler ReachabilityChanged;
|
||||
|
||||
static void OnChange(NetworkReachabilityFlags flags)
|
||||
{
|
||||
var h = ReachabilityChanged;
|
||||
if (h != null)
|
||||
h(null, EventArgs.Empty);
|
||||
}
|
||||
|
||||
//
|
||||
// Returns true if it is possible to reach the AdHoc WiFi network
|
||||
// and optionally provides extra network reachability flags as the
|
||||
// out parameter
|
||||
//
|
||||
static NetworkReachability adHocWiFiNetworkReachability;
|
||||
|
||||
public static bool IsAdHocWiFiNetworkAvailable (out NetworkReachabilityFlags flags)
|
||||
{
|
||||
if (adHocWiFiNetworkReachability == null) {
|
||||
adHocWiFiNetworkReachability = new NetworkReachability(new IPAddress(new byte [] { 169, 254, 0, 0 }));
|
||||
adHocWiFiNetworkReachability.SetNotification(OnChange);
|
||||
adHocWiFiNetworkReachability.Schedule(CFRunLoop.Current, CFRunLoop.ModeDefault);
|
||||
}
|
||||
|
||||
return adHocWiFiNetworkReachability.TryGetFlags(out flags) && IsReachableWithoutRequiringConnection(flags);
|
||||
}
|
||||
|
||||
static NetworkReachability defaultRouteReachability;
|
||||
|
||||
static bool IsNetworkAvailable(out NetworkReachabilityFlags flags)
|
||||
{
|
||||
if (defaultRouteReachability == null) {
|
||||
defaultRouteReachability = new NetworkReachability(new IPAddress(0));
|
||||
defaultRouteReachability.SetNotification(OnChange);
|
||||
defaultRouteReachability.Schedule(CFRunLoop.Current, CFRunLoop.ModeDefault);
|
||||
}
|
||||
return defaultRouteReachability.TryGetFlags(out flags) && IsReachableWithoutRequiringConnection(flags);
|
||||
}
|
||||
|
||||
static NetworkReachability remoteHostReachability;
|
||||
|
||||
public static NetworkStatus RemoteHostStatus()
|
||||
{
|
||||
NetworkReachabilityFlags flags;
|
||||
bool reachable;
|
||||
|
||||
if (remoteHostReachability == null) {
|
||||
remoteHostReachability = new NetworkReachability (HostName);
|
||||
|
||||
// Need to probe before we queue, or we wont get any meaningful values
|
||||
// this only happens when you create NetworkReachability from a hostname
|
||||
reachable = remoteHostReachability.TryGetFlags (out flags);
|
||||
|
||||
remoteHostReachability.SetNotification (OnChange);
|
||||
remoteHostReachability.Schedule (CFRunLoop.Current, CFRunLoop.ModeDefault);
|
||||
} else {
|
||||
reachable = remoteHostReachability.TryGetFlags (out flags);
|
||||
}
|
||||
|
||||
if (!reachable)
|
||||
return NetworkStatus.NotReachable;
|
||||
|
||||
if (!IsReachableWithoutRequiringConnection(flags))
|
||||
return NetworkStatus.NotReachable;
|
||||
|
||||
return (flags & NetworkReachabilityFlags.IsWWAN) != 0 ?
|
||||
NetworkStatus.ReachableViaCarrierDataNetwork : NetworkStatus.ReachableViaWiFiNetwork;
|
||||
}
|
||||
|
||||
public static NetworkStatus InternetConnectionStatus ()
|
||||
{
|
||||
NetworkReachabilityFlags flags;
|
||||
bool defaultNetworkAvailable = IsNetworkAvailable(out flags);
|
||||
if (defaultNetworkAvailable && ((flags & NetworkReachabilityFlags.IsDirect) != 0))
|
||||
return NetworkStatus.NotReachable;
|
||||
else if ((flags & NetworkReachabilityFlags.IsWWAN) != 0)
|
||||
return NetworkStatus.ReachableViaCarrierDataNetwork;
|
||||
else if (flags == 0)
|
||||
return NetworkStatus.NotReachable;
|
||||
return NetworkStatus.ReachableViaWiFiNetwork;
|
||||
}
|
||||
|
||||
public static NetworkStatus LocalWifiConnectionStatus()
|
||||
{
|
||||
NetworkReachabilityFlags flags;
|
||||
if (IsAdHocWiFiNetworkAvailable(out flags))
|
||||
if ((flags & NetworkReachabilityFlags.IsDirect) != 0)
|
||||
return NetworkStatus.ReachableViaWiFiNetwork;
|
||||
|
||||
return NetworkStatus.NotReachable;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,156 +1,143 @@
|
|||
using System;
|
||||
using System.Net;
|
||||
using SystemConfiguration;
|
||||
|
||||
using CoreFoundation;
|
||||
|
||||
public enum NetworkStatus
|
||||
{
|
||||
NotReachable,
|
||||
ReachableViaCarrierDataNetwork,
|
||||
ReachableViaWiFiNetwork
|
||||
}
|
||||
|
||||
public static class Reachability
|
||||
{
|
||||
public static string HostName = "www.google.com";
|
||||
|
||||
public static bool IsReachableWithoutRequiringConnection(NetworkReachabilityFlags flags)
|
||||
{
|
||||
// Is it reachable with the current network configuration?
|
||||
bool isReachable = (flags & NetworkReachabilityFlags.Reachable) != 0;
|
||||
|
||||
// Do we need a connection to reach it?
|
||||
bool noConnectionRequired = (flags & NetworkReachabilityFlags.ConnectionRequired) == 0;
|
||||
|
||||
// Since the network stack will automatically try to get the WAN up,
|
||||
// probe that
|
||||
if ((flags & NetworkReachabilityFlags.IsWWAN) != 0)
|
||||
noConnectionRequired = true;
|
||||
|
||||
return isReachable && noConnectionRequired;
|
||||
}
|
||||
|
||||
// Is the host reachable with the current network configuration
|
||||
public static bool IsHostReachable(string host)
|
||||
{
|
||||
if (string.IsNullOrEmpty(host))
|
||||
return false;
|
||||
|
||||
using (var r = new NetworkReachability(host))
|
||||
{
|
||||
NetworkReachabilityFlags flags;
|
||||
|
||||
if (r.TryGetFlags(out flags))
|
||||
{
|
||||
return IsReachableWithoutRequiringConnection(flags);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
//
|
||||
// Raised every time there is an interesting reachable event,
|
||||
// we do not even pass the info as to what changed, and
|
||||
// we lump all three status we probe into one
|
||||
//
|
||||
public static event EventHandler ReachabilityChanged;
|
||||
|
||||
static void OnChange(NetworkReachabilityFlags flags)
|
||||
{
|
||||
var h = ReachabilityChanged;
|
||||
if (h != null)
|
||||
h(null, EventArgs.Empty);
|
||||
}
|
||||
|
||||
//
|
||||
// Returns true if it is possible to reach the AdHoc WiFi network
|
||||
// and optionally provides extra network reachability flags as the
|
||||
// out parameter
|
||||
//
|
||||
static NetworkReachability adHocWiFiNetworkReachability;
|
||||
|
||||
public static bool IsAdHocWiFiNetworkAvailable(out NetworkReachabilityFlags flags)
|
||||
{
|
||||
if (adHocWiFiNetworkReachability == null)
|
||||
{
|
||||
adHocWiFiNetworkReachability = new NetworkReachability(new IPAddress(new byte [] { 169, 254, 0, 0 }));
|
||||
adHocWiFiNetworkReachability.SetNotification(OnChange);
|
||||
adHocWiFiNetworkReachability.Schedule(CFRunLoop.Current, CFRunLoop.ModeDefault);
|
||||
}
|
||||
|
||||
return adHocWiFiNetworkReachability.TryGetFlags(out flags) && IsReachableWithoutRequiringConnection(flags);
|
||||
}
|
||||
|
||||
static NetworkReachability defaultRouteReachability;
|
||||
|
||||
static bool IsNetworkAvailable(out NetworkReachabilityFlags flags)
|
||||
{
|
||||
if (defaultRouteReachability == null)
|
||||
{
|
||||
defaultRouteReachability = new NetworkReachability(new IPAddress(0));
|
||||
defaultRouteReachability.SetNotification(OnChange);
|
||||
defaultRouteReachability.Schedule(CFRunLoop.Current, CFRunLoop.ModeDefault);
|
||||
}
|
||||
return defaultRouteReachability.TryGetFlags(out flags) && IsReachableWithoutRequiringConnection(flags);
|
||||
}
|
||||
|
||||
static NetworkReachability remoteHostReachability;
|
||||
|
||||
public static NetworkStatus RemoteHostStatus()
|
||||
{
|
||||
NetworkReachabilityFlags flags;
|
||||
bool reachable;
|
||||
|
||||
if (remoteHostReachability == null)
|
||||
{
|
||||
remoteHostReachability = new NetworkReachability(HostName);
|
||||
|
||||
// Need to probe before we queue, or we wont get any meaningful values
|
||||
// this only happens when you create NetworkReachability from a hostname
|
||||
reachable = remoteHostReachability.TryGetFlags(out flags);
|
||||
|
||||
remoteHostReachability.SetNotification(OnChange);
|
||||
remoteHostReachability.Schedule(CFRunLoop.Current, CFRunLoop.ModeDefault);
|
||||
}
|
||||
else
|
||||
reachable = remoteHostReachability.TryGetFlags(out flags);
|
||||
|
||||
if (!reachable)
|
||||
return NetworkStatus.NotReachable;
|
||||
|
||||
if (!IsReachableWithoutRequiringConnection(flags))
|
||||
return NetworkStatus.NotReachable;
|
||||
|
||||
if ((flags & NetworkReachabilityFlags.IsWWAN) != 0)
|
||||
return NetworkStatus.ReachableViaCarrierDataNetwork;
|
||||
|
||||
return NetworkStatus.ReachableViaWiFiNetwork;
|
||||
}
|
||||
|
||||
public static NetworkStatus InternetConnectionStatus()
|
||||
{
|
||||
NetworkReachabilityFlags flags;
|
||||
bool defaultNetworkAvailable = IsNetworkAvailable(out flags);
|
||||
if (defaultNetworkAvailable && ((flags & NetworkReachabilityFlags.IsDirect) != 0))
|
||||
{
|
||||
return NetworkStatus.NotReachable;
|
||||
}
|
||||
else if ((flags & NetworkReachabilityFlags.IsWWAN) != 0)
|
||||
return NetworkStatus.ReachableViaCarrierDataNetwork;
|
||||
else if (flags == 0)
|
||||
return NetworkStatus.NotReachable;
|
||||
return NetworkStatus.ReachableViaWiFiNetwork;
|
||||
}
|
||||
|
||||
public static NetworkStatus LocalWifiConnectionStatus()
|
||||
{
|
||||
NetworkReachabilityFlags flags;
|
||||
if (IsAdHocWiFiNetworkAvailable(out flags))
|
||||
{
|
||||
if ((flags & NetworkReachabilityFlags.IsDirect) != 0)
|
||||
return NetworkStatus.ReachableViaWiFiNetwork;
|
||||
}
|
||||
return NetworkStatus.NotReachable;
|
||||
}
|
||||
namespace Reachability {
|
||||
public enum NetworkStatus {
|
||||
NotReachable,
|
||||
ReachableViaCarrierDataNetwork,
|
||||
ReachableViaWiFiNetwork
|
||||
}
|
||||
|
||||
public static class Reachability
|
||||
{
|
||||
public static string HostName = "www.google.com";
|
||||
|
||||
public static bool IsReachableWithoutRequiringConnection (NetworkReachabilityFlags flags)
|
||||
{
|
||||
// Is it reachable with the current network configuration?
|
||||
bool isReachable = (flags & NetworkReachabilityFlags.Reachable) != 0;
|
||||
|
||||
// Do we need a connection to reach it?
|
||||
bool noConnectionRequired = (flags & NetworkReachabilityFlags.ConnectionRequired) == 0
|
||||
|| (flags & NetworkReachabilityFlags.IsWWAN) != 0;
|
||||
|
||||
return isReachable && noConnectionRequired;
|
||||
}
|
||||
|
||||
// Is the host reachable with the current network configuration
|
||||
public static bool IsHostReachable(string host)
|
||||
{
|
||||
if (string.IsNullOrEmpty(host))
|
||||
return false;
|
||||
|
||||
using (var r = new NetworkReachability(host)) {
|
||||
NetworkReachabilityFlags flags;
|
||||
|
||||
if (r.TryGetFlags(out flags))
|
||||
return IsReachableWithoutRequiringConnection(flags);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
//
|
||||
// Raised every time there is an interesting reachable event,
|
||||
// we do not even pass the info as to what changed, and
|
||||
// we lump all three status we probe into one
|
||||
//
|
||||
public static event EventHandler ReachabilityChanged;
|
||||
|
||||
static void OnChange(NetworkReachabilityFlags flags)
|
||||
{
|
||||
var h = ReachabilityChanged;
|
||||
if (h != null)
|
||||
h(null, EventArgs.Empty);
|
||||
}
|
||||
|
||||
//
|
||||
// Returns true if it is possible to reach the AdHoc WiFi network
|
||||
// and optionally provides extra network reachability flags as the
|
||||
// out parameter
|
||||
//
|
||||
static NetworkReachability adHocWiFiNetworkReachability;
|
||||
|
||||
public static bool IsAdHocWiFiNetworkAvailable (out NetworkReachabilityFlags flags)
|
||||
{
|
||||
if (adHocWiFiNetworkReachability == null) {
|
||||
adHocWiFiNetworkReachability = new NetworkReachability(new IPAddress(new byte [] { 169, 254, 0, 0 }));
|
||||
adHocWiFiNetworkReachability.SetNotification(OnChange);
|
||||
adHocWiFiNetworkReachability.Schedule(CFRunLoop.Current, CFRunLoop.ModeDefault);
|
||||
}
|
||||
|
||||
return adHocWiFiNetworkReachability.TryGetFlags(out flags) && IsReachableWithoutRequiringConnection(flags);
|
||||
}
|
||||
|
||||
static NetworkReachability defaultRouteReachability;
|
||||
|
||||
static bool IsNetworkAvailable(out NetworkReachabilityFlags flags)
|
||||
{
|
||||
if (defaultRouteReachability == null) {
|
||||
defaultRouteReachability = new NetworkReachability(new IPAddress(0));
|
||||
defaultRouteReachability.SetNotification(OnChange);
|
||||
defaultRouteReachability.Schedule(CFRunLoop.Current, CFRunLoop.ModeDefault);
|
||||
}
|
||||
return defaultRouteReachability.TryGetFlags(out flags) && IsReachableWithoutRequiringConnection(flags);
|
||||
}
|
||||
|
||||
static NetworkReachability remoteHostReachability;
|
||||
|
||||
public static NetworkStatus RemoteHostStatus()
|
||||
{
|
||||
NetworkReachabilityFlags flags;
|
||||
bool reachable;
|
||||
|
||||
if (remoteHostReachability == null) {
|
||||
remoteHostReachability = new NetworkReachability (HostName);
|
||||
|
||||
// Need to probe before we queue, or we wont get any meaningful values
|
||||
// this only happens when you create NetworkReachability from a hostname
|
||||
reachable = remoteHostReachability.TryGetFlags (out flags);
|
||||
|
||||
remoteHostReachability.SetNotification (OnChange);
|
||||
remoteHostReachability.Schedule (CFRunLoop.Current, CFRunLoop.ModeDefault);
|
||||
} else {
|
||||
reachable = remoteHostReachability.TryGetFlags (out flags);
|
||||
}
|
||||
|
||||
if (!reachable)
|
||||
return NetworkStatus.NotReachable;
|
||||
|
||||
if (!IsReachableWithoutRequiringConnection(flags))
|
||||
return NetworkStatus.NotReachable;
|
||||
|
||||
return (flags & NetworkReachabilityFlags.IsWWAN) != 0 ?
|
||||
NetworkStatus.ReachableViaCarrierDataNetwork : NetworkStatus.ReachableViaWiFiNetwork;
|
||||
}
|
||||
|
||||
public static NetworkStatus InternetConnectionStatus ()
|
||||
{
|
||||
NetworkReachabilityFlags flags;
|
||||
bool defaultNetworkAvailable = IsNetworkAvailable(out flags);
|
||||
if (defaultNetworkAvailable && ((flags & NetworkReachabilityFlags.IsDirect) != 0))
|
||||
return NetworkStatus.NotReachable;
|
||||
else if ((flags & NetworkReachabilityFlags.IsWWAN) != 0)
|
||||
return NetworkStatus.ReachableViaCarrierDataNetwork;
|
||||
else if (flags == 0)
|
||||
return NetworkStatus.NotReachable;
|
||||
return NetworkStatus.ReachableViaWiFiNetwork;
|
||||
}
|
||||
|
||||
public static NetworkStatus LocalWifiConnectionStatus()
|
||||
{
|
||||
NetworkReachabilityFlags flags;
|
||||
if (IsAdHocWiFiNetworkAvailable(out flags))
|
||||
if ((flags & NetworkReachabilityFlags.IsDirect) != 0)
|
||||
return NetworkStatus.ReachableViaWiFiNetwork;
|
||||
|
||||
return NetworkStatus.NotReachable;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -3,59 +3,60 @@
|
|||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">iPhoneSimulator</Platform>
|
||||
<ProjectTypeGuids>{FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<ProductVersion>8.0.30703</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{E1356D0A-1572-4157-BD97-05F0B9DA832E}</ProjectGuid>
|
||||
<ProjectTypeGuids>{FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<OutputType>Exe</OutputType>
|
||||
<RootNamespace>reachability</RootNamespace>
|
||||
<AssemblyName>reachability</AssemblyName>
|
||||
<TargetFrameworkIdentifier>Xamarin.iOS</TargetFrameworkIdentifier>
|
||||
<TargetFrameworkVersion>v1.0</TargetFrameworkVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhoneSimulator' ">
|
||||
<DebugSymbols>True</DebugSymbols>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>False</Optimize>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\iPhoneSimulator\Debug</OutputPath>
|
||||
<DefineConstants>DEBUG</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<MtouchLink>None</MtouchLink>
|
||||
<MtouchDebug>True</MtouchDebug>
|
||||
<MtouchArch>i386</MtouchArch>
|
||||
<MtouchI18n>
|
||||
</MtouchI18n>
|
||||
<MtouchDebug>true</MtouchDebug>
|
||||
<MtouchLink>None</MtouchLink>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhoneSimulator' ">
|
||||
<DebugType>none</DebugType>
|
||||
<Optimize>False</Optimize>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\iPhoneSimulator\Release</OutputPath>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<MtouchLink>None</MtouchLink>
|
||||
<MtouchArch>i386</MtouchArch>
|
||||
<MtouchLink>None</MtouchLink>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhone' ">
|
||||
<DebugSymbols>True</DebugSymbols>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>False</Optimize>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\iPhone\Debug</OutputPath>
|
||||
<DefineConstants>DEBUG</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<CodesignKey>iPhone Developer</CodesignKey>
|
||||
<MtouchDebug>True</MtouchDebug>
|
||||
<MtouchArch>ARMv7</MtouchArch>
|
||||
<IpaPackageName>
|
||||
</IpaPackageName>
|
||||
<CodesignKey>iPhone Developer</CodesignKey>
|
||||
<MtouchDebug>true</MtouchDebug>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone' ">
|
||||
<DebugType>none</DebugType>
|
||||
<Optimize>False</Optimize>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\iPhone\Release</OutputPath>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<CodesignKey>iPhone Developer</CodesignKey>
|
||||
<MtouchArch>ARMv7, ARM64</MtouchArch>
|
||||
<CodesignKey>iPhone Developer</CodesignKey>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
|
@ -64,14 +65,16 @@
|
|||
<Reference Include="Xamarin.iOS" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="MainWindow.xib.designer.cs">
|
||||
<DependentUpon>MainWindow.xib</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="reachability.cs" />
|
||||
<Compile Include="AppDelegate.cs" />
|
||||
<Compile Include="MainViewController.cs" />
|
||||
<Compile Include="MainViewController.designer.cs">
|
||||
<DependentUpon>MainViewController.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Main.cs" />
|
||||
<Compile Include="Reachability.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<InterfaceDefinition Include="MainWindow.xib" />
|
||||
<InterfaceDefinition Include="Main.storyboard" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Network.png" />
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||
# Visual Studio 2010
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "reachability", "reachability.csproj", "{E1356D0A-1572-4157-BD97-05F0B9DA832E}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Reachability", "Reachability.csproj", "{E1356D0A-1572-4157-BD97-05F0B9DA832E}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
|
@ -20,7 +20,4 @@ Global
|
|||
{E1356D0A-1572-4157-BD97-05F0B9DA832E}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator
|
||||
{E1356D0A-1572-4157-BD97-05F0B9DA832E}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
|
||||
EndGlobalSection
|
||||
GlobalSection(MonoDevelopProperties) = preSolution
|
||||
StartupItem = reachability.csproj
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
|
Загрузка…
Ссылка в новой задаче