0

電話がWifiまたは3Gネットワ​​ークにアクセスできる場合、到達可能性コードが提供することを私は知っています。

ただし、電話で3GがオンでWifiがオンになっている場合、到達可能性コードはデフォルトで電話にWifiがオンであると表示され、3Gネットワ​​ークが有効かどうか(機内モードがオンまたはオフ)を検出できません。

Wifiもオンのときに3Gモードがオンかオフかを具体的に確認する必要があります。

コードは次のとおりです。

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

NetworkStatus status = [reachability currentReachabilityStatus];

NSLog(@"status: %u", status);

if(status == NotReachable)  //status = 0
{
    //No internet
    NSLog(@"nothing is reachable");
}
if (status == ReachableViaWiFi) //status = 1
{
    //WiFi
    NSLog(@"Wifi is available");
}
if (status == ReachableViaWWAN) //status = 2
{
    //3G
    NSLog(@"3G is available");
}
NSLog(@"%@", s);

基本的に、Wifiと同様に3Gがオンになっている場合でも、ステータスは1を返します。

これは可能ですか?

助けていただければ幸いです。

4

2 に答える 2

1

更新:現時点では不可能のようです。ただし、役立つ場合に備えて、次のコードを試すことができます。

コード1:ただの考え。これを試していません。

if (status == ReachableViaWiFi) //status = 1
{
    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"tel://"]]) {
        NSLog(@"Wifi and 3G are available");
    } else {
        NSLog(@"Wifi is available, but 3G is not available");
    }
}

コード2:

内部アプリの場合、ここで説明するようにこのアプローチを使用できます。

注:これはプライベートAPIを使用するため、appstoreアプリで使用するとアプリは拒否されます。

以下の内容をコピーして貼り付けますRadioPreferences.h

@protocol RadiosPreferencesDelegate
-(void)airplaneModeChanged;
@end


@interface RadiosPreferences : NSObject
{
    struct __SCPreferences *_prefs;
    int _applySkipCount;
    id <RadiosPreferencesDelegate> _delegate;
    BOOL _isCachedAirplaneModeValid;
    BOOL _cachedAirplaneMode;
    BOOL notifyForExternalChangeOnly;
}

- (id)init;
- (void)dealloc;
@property(nonatomic) BOOL airplaneMode;
- (void)refresh;
- (void)initializeSCPrefs:(id)arg1;
- (void)notifyTarget:(unsigned int)arg1;
- (void)synchronize;
- (void *)getValueForKey:(id)arg1;
- (void)setValue:(void *)arg1 forKey:(id)arg2;
@property(nonatomic) BOOL notifyForExternalChangeOnly; // @synthesize notifyForExternalChangeOnly;
@property(nonatomic) id <RadiosPreferencesDelegate> delegate; // @synthesize delegate=_delegate;

@end 

次に、以下のようにしてみてください。

id rp = [[RadiosPreferences alloc] init];
BOOL status = [rp airplaneMode];
return status;
于 2012-10-26T22:37:46.903 に答える
1

現在、Appleのガイドラインに従い、プライベートAPIを使用せずに、iPhoneでこれを行う方法はありません。

于 2012-11-30T23:02:58.460 に答える