আইওএস 3 জি বা ওয়াইফাই সনাক্ত করুন


106

এটি সম্ভব কিনা আমি নিশ্চিত নই, তবে আমার এই দৃশ্যটি রয়েছে।

আমার ইউআইউইউবভিউতে আমার একটি ওয়েবসাইট প্রদর্শিত আছে যা একটি ইউআইএসইগমেন্টেড কনট্রোলারটিতে লিঙ্ক সেট করেছে। আপনি ওয়াইফাই বা 3 জি নেটওয়ার্কে আছেন কিনা তা তাদের ওয়েবসাইট সনাক্ত করতে পারে।

এখন সেগমেন্টযুক্ত কন্ট্রোলার 2 টি ভিন্ন পৃষ্ঠাতে নির্দেশ করে: 1 - একটি আইফোন বান্ধব লগইন স্ক্রিন 2 - হোম পৃষ্ঠা, আপনি একবার লগ ইন হয়ে গেলে।

এখন এখানে প্রশ্ন:

এটি আমার ওয়াইফাই বা 3 জি কিনা তা সনাক্ত করার জন্য আমি আমার অ্যাপ্লিকেশনটি প্রোগ্রাম করতে পারি (আমি জানি আপনি এটি করতে পারেন) তবে উত্তরটির উপর ভিত্তি করে 1 বা 2 বিভাগে যান

এই জাতীয় মত:

if (iPhone device is on 3g) {
    Go to Segment 1;
} else {
    Go to Segment 0;
}

উত্তর:


210

অ্যাপল এখানে যে কোড সরবরাহ করেছে তা ব্যবহার করে

Reachability *reachability = [Reachability reachabilityForInternetConnection];
[reachability startNotifier];

NetworkStatus status = [reachability currentReachabilityStatus];

if(status == NotReachable) 
{
    //No internet
}
else if (status == ReachableViaWiFi)
{
    //WiFi
}
else if (status == ReachableViaWWAN) 
{
    //3G
}

হ্যাঁ এটা দুর্দান্ত কাজ করেছে !!! এর মধ্যে আইওএস 5 এর জন্য ত্রুটি থাকার কারণে তাদের পুনঃচঞ্চলতা ফাইলগুলির কিছু স্থির করতে হয়েছিল - তবে আমি এখনই খুব খুশি। দুর্ভাগ্যক্রমে আমি আপনাকে কেবল 1 টি ভোট দিতে পারি :-)
jwknz

10
[reachability stopNotifier]আপনার স্ট্যাটাস থাকার পরে ফোন করা উচিত নয় ?
জেকেল

3
এটি নির্ভর করে যে আপনি এই কোডটি কীভাবে ব্যবহার করছেন তার উপর। এটি যদি কেবল কোনও পদ্ধতিতে reachabilityথাকত তবে সুযোগের বাইরে চলে যেত এবং পদ্ধতিটির শেষে ডিলোসওয়েস করা stopNotifierহত এবং তাকে অন্তর্নিহিত বলা হত।
জেমস ওয়েবস্টার

সম্পাদনার জন্য ধন্যবাদ। আমি ধরে নিলাম এটি ব্যবহার করা এই ReachableViaWifiNetwork
জেমস ওয়েবস্টার

এটি দুর্দান্ত কাজ করে তবে প্রকল্প সাধারণ সিস্টেম কনফিগারেশন.ফ্রেমওয়ার্কের অন্তর্ভুক্তটি ভুলে যাবেন না, অন্যথায় আপনি
লিঙ্কারের

30

আপনি যদি রিচ্যাবিলিটি লাইব্রেরি আমদানি করতে বা বিজ্ঞপ্তিদাতাদের সাথে ডিল করতে না চান তবে আপনি এই সাধারণ সিঙ্ক্রোনাস পদ্ধতিটি ব্যবহার করতে পারেন:

typedef enum {
    ConnectionTypeUnknown,
    ConnectionTypeNone,
    ConnectionType3G,
    ConnectionTypeWiFi
} ConnectionType;


+ (ConnectionType)connectionType
{
    SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, "8.8.8.8");
    SCNetworkReachabilityFlags flags;
    BOOL success = SCNetworkReachabilityGetFlags(reachability, &flags);
    CFRelease(reachability);
    if (!success) {
        return ConnectionTypeUnknown;
    }
    BOOL isReachable = ((flags & kSCNetworkReachabilityFlagsReachable) != 0);
    BOOL needsConnection = ((flags & kSCNetworkReachabilityFlagsConnectionRequired) != 0);
    BOOL isNetworkReachable = (isReachable && !needsConnection);

    if (!isNetworkReachable) {
        return ConnectionTypeNone;
    } else if ((flags & kSCNetworkReachabilityFlagsIsWWAN) != 0) {
        return ConnectionType3G;
    } else {
        return ConnectionTypeWiFi;
    }
}

এই সহায়ক কোডটি ব্যবহার করতে আপনাকে # ইম্পোর্ট <সিস্টেমে কনফিগারেশন / সিস্টেম কনফিগারেশন.h> করতে হবে এবং সিস্টেম কনফিগারেশন.ফ্রেমওয়ার্কের সাথে লিঙ্ক করতে হবে।
শির্ক

18

অ্যাপলের পুনঃব্যবস্থাপনা আমদানি করুন এবং এটি চেষ্টা করুন,

#import "Reachability.h"
#import <CoreTelephony/CTTelephonyNetworkInfo.h>

//Try this
Reachability *reachability = [Reachability reachabilityForInternetConnection];
    [reachability startNotifier];

    NetworkStatus status = [reachability currentReachabilityStatus];

    if(status == NotReachable)
    {
       NSLog(@"none");
        //No internet
    }
    else if (status == ReachableViaWiFi)
    {
        NSLog(@"Wifi");
        //WiFi
    }
    else if (status == ReachableViaWWAN)
    {
        NSLog(@"WWAN");


    //connection type
    CTTelephonyNetworkInfo *netinfo = [[CTTelephonyNetworkInfo alloc] init];
    _carrier = [[netinfo subscriberCellularProvider] carrierName];

    if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyGPRS]) {
        NSLog(@"2G");
    } else if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyEdge]) {
        NSLog(@"2G");
    } else if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyWCDMA]) {
        NSLog(@"3G");
    } else if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyHSDPA]) {
        NSLog(@"3G");
    } else if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyHSUPA]) {
        NSLog(@"3G");
    } else if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMA1x]) {
        NSLog(@"2G");
    } else if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORev0]) {
        NSLog(@"3G");
    } else if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORevA]) {
        NSLog(@"3G");
    } else if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORevB]) {
        NSLog(@"3G");
    } else if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyeHRPD]) {
        NSLog(@"3G");
    } else if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyLTE]) {
        NSLog(@"4G");
    }

    }

তথ্যসূত্র (লিঙ্কগুলি ভবিষ্যতে ভেঙে যেতে পারে):


প্রথমে সিস্টেম কনফিগারেশনের কাঠামো যুক্ত করুন, এই লিঙ্কটি খুলুন github.com/tonymillion/Reachabit 'এবং ফাইলটি ডাউনলোড করুন এবং আপনার প্রকল্পে Reachability.h , .m অনুলিপি করুন এবং # ইম্পোর্ট "রিচাবিলিটি। H", # আমদানি <কোরিটেলফনি / সিটি টেলিফোননিটওয়ার্কআইএনফো>> এবং শেষ পর্যন্ত কোডের উপরের পেস্টটি অনুলিপি করুন .....
চিহ্নিত করা হচ্ছে

8

আমি একটি খুব সহজ ব্লক ভিত্তিক রিচাবিলিটি র‌্যাপার তৈরি করেছি যা সমস্ত পুরানো সি-এর মতো পুনঃব্যবহারযোগ্যতা কোডটি স্ট্রিপ করে, আরও অনেক কোকো ফর্মের মধ্যে pouredালা।

ব্যবহার যেমন:

[EPPZReachability reachHost:hostNameOrIPaddress
               completition:^(EPPZReachability *reachability)
{
    if (reachability.reachableViaCellular) [self doSomeLightweightStuff];
}];

দেখুন দৈনন্দিন ব্যবহারের জন্য ব্লক দিয়ে Reachabilityeppz! ব্লগ , বা থেকে এটা সরাসরি দখল GitHub এ eppz! Reachability

এটি আইপি অ্যাড্রেসগুলির সাথেও কাজ করে , যা একটি দুর্দান্ত দুর্লভ পুনর্বাসনের মোড়ক বৈশিষ্ট্য হিসাবে দেখা গেছে।


19
উম্মম কেন 'স্ক্রিনশট'?
কিয়েড

12
আমার কাছে এটি ব্লগ পোস্ট থেকে ছিল, চোখের জন্য ক্যান্ডি।
গেরি বোর্বস

6

আইওএস 12 বা আরও নতুন ব্যবহার NWPathMonitorকরার সময় আপনি প্রাক- Reachabilityclass তিহাসিক শ্রেণীর পরিবর্তে ব্যবহার করতে পারেন :

import Network // Put this on top of your class

let monitor = NWPathMonitor()

monitor.pathUpdateHandler = { path in
    if path.status != .satisfied {
        // Not connected
    }
    else if path.usesInterfaceType(.cellular) {
        // Cellular 3/4/5g connection
    }
    else if path.usesInterfaceType(.wifi) {
        // Wi-fi connection
    }
    else if path.usesInterfaceType(.wiredEthernet) {
        // Ethernet connection
    }
}

monitor.start(queue: DispatchQueue.global(qos: .background))

আমরা যে হোস্টটিকে পরীক্ষা করতে পারি তার মতো আমরা কীভাবে সংজ্ঞায়িত করতে পারি Reachability.reachabilityWithHostName?
আগ্রাসন

5

দ্রুততার জন্য আমরা ব্যবহার করতে পারি:

func getNetworkType()->String {
    do{
        let reachability:Reachability = try Reachability.reachabilityForInternetConnection()
        do{
            try reachability.startNotifier()
            let status = reachability.currentReachabilityStatus
            if(status == .NotReachable){
                return ""
            }else if (status == .ReachableViaWiFi){
                return "Wifi"
            }else if (status == .ReachableViaWWAN){
                let networkInfo = CTTelephonyNetworkInfo()
                let carrierType = networkInfo.currentRadioAccessTechnology
                switch carrierType{
                case CTRadioAccessTechnologyGPRS?,CTRadioAccessTechnologyEdge?,CTRadioAccessTechnologyCDMA1x?: return "2G"
                case CTRadioAccessTechnologyWCDMA?,CTRadioAccessTechnologyHSDPA?,CTRadioAccessTechnologyHSUPA?,CTRadioAccessTechnologyCDMAEVDORev0?,CTRadioAccessTechnologyCDMAEVDORevA?,CTRadioAccessTechnologyCDMAEVDORevB?,CTRadioAccessTechnologyeHRPD?: return "3G"
                case CTRadioAccessTechnologyLTE?: return "4G"
                default: return ""
                }

                // Get carrier name

            }else{
                return ""
            }
        }catch{
            return ""
        }

    }catch{
        return ""
    }


}

3

ক্লাস পদ্ধতিটি নিম্নরূপ

+(NSString*)connectedNetworkType {
     Reachability *reachability = [Reachability reachabilityForInternetConnection];
        [reachability startNotifier];

        NetworkStatus status = [reachability currentReachabilityStatus];

        if(status == NotReachable) {
            NSLog(@"none");
            //No internet
        }
        else if (status == ReachableViaWiFi) {
            NSLog(@"Wifi");
            //WiFi
            return @"Wifi";
        }
        else if (status == ReachableViaWWAN){
            NSLog(@"WWAN");
            //connection type
            CTTelephonyNetworkInfo *netinfo = [[CTTelephonyNetworkInfo alloc] init];
            //    _carrier = [[netinfo subscriberCellularProvider] carrierName];
            if (([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyGPRS])
                ||([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyEdge])
                ||([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMA1x])) {
                NSLog(@"2G");
                return @"2G";
            }
            else if (([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyWCDMA])
                     ||([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyHSDPA])
                     ||([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyHSUPA])
                     ||([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORev0])
                     ||([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORevA])
                     ||([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORevB])
                     ||([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyeHRPD])){
                NSLog(@"3G");
                return @"3G";
            }
            else if ([netinfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyLTE]) {
                NSLog(@"4G");
                return @"4G";

            }
        }
        return @"-1";//default unknown
}

2
#import <ifaddrs.h>
#import <arpa/inet.h>

BOOL CheckWiFi() {

    struct ifaddrs *interfaces = NULL;
    struct ifaddrs *temp_addr = NULL;

    BOOL hasWifi = NO;

    int err = getifaddrs(&interfaces);
    if(err == 0) {

        temp_addr = interfaces; 

        while(temp_addr) {

            if(temp_addr->ifa_addr->sa_family == AF_INET) {

                struct sockaddr_in *addr = (struct sockaddr_in *)temp_addr->ifa_addr;

                if(memcmp(temp_addr->ifa_name, "en", 2) == 0) {
                    hasWifi = YES;
                    break;
                }
            }

            temp_addr = temp_addr->ifa_next;
        }
    }

    freeifaddrs(interfaces);
    return hasWifi;
}

আপনি কোনও ওয়াইফাইতে আছেন কিনা তা পরীক্ষা করতে এটি সংযোগ দেওয়ার ব্যয়বহুল চেক সংরক্ষণ করে। ইন্টারনেট ভাগ করে নেওয়ার জন্য চেক করতে ifa_name "ব্রিজ" পরীক্ষা করুন।


1

আপনি যদি জামারিন বা মনোোটোচ ব্যবহার করছেন তবে আপনি এক্সারমিন গিটহাব সংগ্রহস্থল থেকে পুনঃব্যবস্থাপনা অভিযোজিত শ্রেণিটি ব্যবহার করতে পারেন:

https://github.com/xamarin/monotouch-samples/blob/master/ReachabilitySample/reachability.cs

সুতরাং এটি আপনার প্রকল্পে যুক্ত করুন এবং কল করুন Reachability.InternetConnectionStatus()


লিঙ্কটি নষ্ট হয়ে গেছে।
ক্রিস্টোফার স্টিফান

0

এখানে অ্যাপল থেকে সিম্পলপিং সহ আইওএস 6 এর একটি আপডেট সংস্করণ রয়েছে। এটি এআরসি সামঞ্জস্যপূর্ণ এবং আমি অন্য ব্যক্তির ফিক্স থেকে শুরু করে পুনর্ব্যবস্থার দিকে শুরু করেছি। http://elbsolutions.com/projects/reachability-with-simpleping-wrapper/

আমি আশা করি এটা কারো সাহায্যে লাগবে.


যদি আপনি এর ব্যবহারের একটি উদাহরণ হতে পারে।
মাইক ডি

-2

রিচ্যাবিলিটি দিয়ে তৈরি এবং ব্যবহারের সহজ, এই সংহত করতে কোডের কয়েকটি লাইনই ব্যবহার করুন। Http://huytd.github.io/datatify/ কখন সংযোগটি পরিবর্তিত হয়েছে তা বলার জন্য একটি কলব্যাক ফাংশন রয়েছে


এটি আবার ব্যবহারযোগ্যতা
স্টিফান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.