0

オンライン ストリーミングにネットワーク接続を使用するラジオ アプリケーションを開発しました。また、ネットワークが使用可能かどうかを確認しています。ネットワーク接続がない場合は、「ネットワークが利用できません」というアラートが表示されます.my code is here

 - (void)viewDidLoad
  {
  [super viewDidLoad];


  //checking network reachability statys, this will show one alert view if no network available
    Reachability* reachabile = [Reachability reachabilityWithHostName:@"www.apple.com"];
    NetworkStatus remoteHostStatus = [reachabile currentReachabilityStatus];

   if(remoteHostStatus == NotReachable) 
    {

    NSLog(@"not reachable");
       UIAlertView *notReachableAlert1=[[UIAlertView alloc]initWithTitle:@"NO INTERNET  CONNECTION" message:@"This Application Need Internet To Run" delegate:self cancelButtonTitle:@"Okay Buddy" otherButtonTitles:nil];
    notReachableAlert1.delegate=self;
     [notReachableAlert1 show];
     [notReachableAlert1 release];


    }




    [[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(moviePlayerPlaybackStateDidChange:) 
                                             name:MPMoviePlayerPlaybackStateDidChangeNotification 
                                           object:nil];




    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerLoadStateChanged:) name:MPMoviePlayerLoadStateDidChangeNotification object:player];



    // Do any additional setup after loading the view from its nib.
  }

また、通知の状態を確認しました

  -(void) moviePlayerPlaybackStateDidChange:(NSNotification*)notification 
  {
  Reachability* reachabile = [Reachability reachabilityWithHostName:@"www.apple.com"];
  NetworkStatus remoteHostStatus = [reachabile currentReachabilityStatus];

  NSLog(@"playbackDidChanged");

  MPMoviePlayerController *moviePlayer = notification.object;
  player=notification.object;
  MPMoviePlaybackState playbackState = moviePlayer.playbackState;
   if(playbackState == MPMoviePlaybackStateStopped) 
     {
      NSLog(@"MPMoviePlaybackStateStopped");


   }
   else if(playbackState == MPMoviePlaybackStatePlaying) {
    NSLog(@"MPMoviePlaybackStatePlaying");


} else if(playbackState == MPMoviePlaybackStatePaused) {
    NSLog(@"MPMoviePlaybackStatePaused");

    if(remoteHostStatus == NotReachable) 
    {

          NSLog(@"not reachable");
          UIAlertView *notReachableAlert1=[[UIAlertView alloc]initWithTitle:@"NO INTERNET CONNECTION" message:@"This Application Need Internet To Run" delegate:self cancelButtonTitle:@"Okay Buddy" otherButtonTitles:nil];
        notReachableAlert1.delegate=self;
        [notReachableAlert1 show];
        [notReachableAlert1 release];


      }
 } else if(playbackState == MPMoviePlaybackStateInterrupted) 
    {
    NSLog(@"MPMoviePlaybackStateInterrupted");

    if((remoteHostStatus == NotReachable)&&(remoteHostStatus != ReachableViaWiFi)) 
    {

          NSLog(@"not reachable");
          UIAlertView *notReachableAlert1=[[UIAlertView alloc]initWithTitle:@"NO INTERNET CONNECTION" message:@"This Application Need Internet To Run" delegate:self cancelButtonTitle:@"Okay Buddy" otherButtonTitles:nil];
        notReachableAlert1.delegate=self;
        [notReachableAlert1 show];
        [notReachableAlert1 release];


     }

私の問題は、アプリが3gおよび通常のデータ接続なしでwifi接続から範囲外になると、しばらくフリーズすることです。範囲に戻ったときだけ、アクティブ状態になり、アラートが表示されます。

ネットワークの可用性チェックで私がしたことは何か間違っていますか?

4

1 に答える 1

1

これはあなたのアプリケーションに基づいて編集できるサンプルです

@class Reachability;

@interface urAppDelegate : NSObject <UIApplicationDelegate> 
{

        Reachability* internetReachable;

        Reachability* hostReachable;

        BOOL   hostActive;

        BOOL   internetActive; 

}

@property (nonatomic, assign) BOOL hostActive;

@property (nonatomic, assign) BOOL internetActive;
@end

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

    self.internetActive=NO;
    self.hostActive=NO;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil];

    internetReachable = [[Reachability reachabilityForInternetConnection] retain];
    [internetReachable startNotifier];

    // check if a pathway to a random host exists
    hostReachable = [[Reachability reachabilityWithHostName: @"www.apple.com"] retain];
    [hostReachable startNotifier];

    // now patiently wait for the notification

 [self.window makeKeyAndVisible];
    return YES;
}

-(void) checkNetworkStatus:(NSNotification *)notice{
    NetworkStatus internetStatus = [internetReachable currentReachabilityStatus];

    switch (internetStatus)
    {
        case NotReachable:
        {
            NSLog(@"The internet is down.");
            self.internetActive = NO;            
            break;
        }
        case ReachableViaWiFi:
        {
            NSLog(@"The internet is working via WIFI.");
            self.internetActive = YES;

            break;
        }
        case ReachableViaWWAN:
        {
            NSLog(@"The internet is working via WWAN.");
            self.internetActive = YES;            
            break;
        }
    }

    NetworkStatus hostStatus = [hostReachable currentReachabilityStatus];
    switch (hostStatus)
    {
        case NotReachable:
        {
            NSLog(@"A gateway to the host server is down.");
            self.hostActive = NO;            
            break;
        }
        case ReachableViaWiFi:
        {
            NSLog(@"A gateway to the host server is working via WIFI.");
            self.hostActive = YES;

            break;
        }
        case ReachableViaWWAN:
        {
            NSLog(@"A gateway to the host server is working via WWAN.");
            self.hostActive = YES;
            break;
        }
    }


    if (internetActive && hostActive)
    {       
        // Net work Available.......

    }
    else
    {
        UIAlertView *netWorkAlert=[[UIAlertView alloc]initWithTitle:@"Network Connection Error" message:@"Please Check Connection" delegate:nil cancelButtonTitle:@"Close" otherButtonTitles:nil, nil];
        [netWorkAlert show];
        [netWorkAlert release];
    }

}
于 2012-05-18T06:26:37.907 に答える