Получите уведомление о доступности Wi-Fi для устройства с поддержкой Wi-Fi

У меня есть адаптер устройства OBD2, который поддерживает Wi-Fi. Теперь я хочу получить уведомление о Wi-Fi с устройством OBD2, поэтому я могу начать разговаривать с этим устройством и читать данные, а Wi-Fi с устройством OBD2 недоступен.

Когда устройство подключено к порту OBD2, Wi-Fi широковещательно. Я использовал образец кода класса Reachability. Но я не могу получить правильное уведомление.

Я пробовал с кодом SimplePingHelper. Он отлично работает с Main thread, но не работает с фоновым потоком. Исходный код SimplePingHelper

В коде SimplePingHelper фактически используется пример кода SimplePing от Apple. Код SimplePing от Apple

Можете ли вы помочь мне в этом коде, что он работает с фоновым потоком Или Какие другие способы я могу проверить, чтобы получить это уведомление?

Ответ 1

`Использовать класс достижимости Apple по умолчанию:

Загрузить проект доступности из Эта ссылка

Скопируйте файл Reachability.h и Reachability.m в ваш проект.

И установите этот метод в файле делегирования приложения.

- (недействительными) initializeRechabilityObeserver {   // Изменим имя хоста здесь, чтобы изменить сервер вашего мониторинга   hostReach = [Достижимость достижимостиWithHostName: @ "www.apple.com http://www.apple.com" ];   [hostReach startNotifier];   // [self updateInterfaceWithReachability: hostReach];

internetReach = [Reachability reachabilityForInternetConnection];
[internetReach startNotifier];
//[self updateInterfaceWithReachability: internetReach];

wifiReach = [Reachability reachabilityForLocalWiFi] ;
[wifiReach startNotifier];
//[self updateInterfaceWithReachability: wifiReach];    

}

Ответ 2

Использовать класс достижимости Apple по умолчанию:

Загрузить проект доступности из Эта ссылка

Скопируйте файл Reachability.h и Reachability.m в ваш проект.

И установите этот метод в файле делегирования приложения.

-(void)initializeRechabilityObeserver
{ 
    //Change the host name here to change the server your monitoring
    hostReach = [Reachability reachabilityWithHostName: @"www.apple.com <http://www.apple.com>"];
    [hostReach startNotifier];
    //[self updateInterfaceWithReachability: hostReach];

    internetReach = [Reachability reachabilityForInternetConnection];
    [internetReach startNotifier];
    //[self updateInterfaceWithReachability: internetReach];

    wifiReach = [Reachability reachabilityForLocalWiFi] ;
    [wifiReach startNotifier];
    //[self updateInterfaceWithReachability: wifiReach];    
}

Для получения уведомления об изменении возможности использования используйте код ниже:

Добавьте этот метод уведомления в приложение doneFinishLaunching

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabilityChanged:) name: kReachabilityChangedNotification object: nil];
    internetReachable = [Reachability reachabilityForInternetConnection] ;
    [internetReachable startNotifier];
}

а также добавьте этот метод:

- (void)reachabilityChanged: (NSNotification* )note
{
    NSLog(@"Reachability changed");
    Reachability* curReach = [note object];
    NSParameterAssert([curReach isKindOfClass: [Reachability class]]);
   [self updateInterfaceWithReachability: curReach];
}

Ответ 3

Достижимость обнаруживает только доступность сети для вашего устройства iOS.
Кроме того, Apple не разрешает приложениям делать какие-либо проверки Wi-Fi, поэтому для этого нет открытого API.

Является ли ваш адаптер устройства OBD2 подключен к устройству iOS физически по кабелю или локальному Wi-Fi?
Я думаю, вы должны сосредоточиться на том, как общаться с внешним устройством OBD2 в iOS.