2015-02-12 1 views
0

то, что я сделал этокод работы, когда Wi-Fi выключен и 3G включен, но не тогда, когда wifioff и 4G

я играю в поток WiFi и 3g также на. Я отключил Wi-Fi, остановил поток, но перезапустил его, чтобы активировать 3g.

Но проблема начинается тогда, когда Wi-Fi и 4g на, что время ее не работает

я добавил слушатель как

IntentFilter intentFilter = new IntentFilter(); 
intentFilter.addAction(android.net.ConnectivityManager.CONNECTIVITY_ACTION); 
registerReceiver(receiver,intentFilter) ; 

и приемником

BroadcastReceiver receiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 



      try{ { 
       if(GetNetworkStatus.isNetworkAvailable(getApplicationContext())) 
        {if(!mIsPlaying) 
        justPlay(); 

        } 
       else 
       {justStop(); 

       handler=new Handler(); 

        r = new Runnable() 
        { 
         public void run() 
         { 

          try{ 
           Thread.sleep(4000); 
           } 
           catch(Exception s) 
           {} 
          if(GetNetworkStatus.isNetworkAvailable(getApplicationContext())) 
          justPlay(); 
          /*if(!mIsPlaying) 
          handler.postDelayed(this, 3000);*/ 
         } 
        }; 
        try{ 
         handler.postDelayed(r, 1000); 

        } 
        catch(Exception e) 
        { 

        } 

       Toast.makeText(getApplicationContext(), "Internet Connection Failed", Toast.LENGTH_LONG).show(); 
       } 
      } 
      } 
      catch(Exception e) 
      { 
       finish(); 
      } } 
     }; 

ответ

1

Я считаю, протоколирование Дополнительная информация, может помочь вам определить фактическую причину. Ссылка URL: http://developer.android.com/reference/android/net/ConnectivityManager.html#CONNECTIVITY_ACTION

Изменение сетевого подключения произошло. Соединение по умолчанию было установлено или потеряно. NetworkInfo для затронутой сети отправляется дополнительно; с ней следует ознакомиться, чтобы узнать, какой тип события подключения произошел .

Если это соединение, которое было следствием несовершенного более из отключенной сети, то FAILOVER_CONNECTION булевой экстра значение ИСТИНЫ.

Для потери связи, если диспетчер подключений пытается подключиться (или уже подключен) к другой сети, то NetworkInfo для новой сети также передается в качестве дополнительного. Это позволяет любым приемникам широковещательной передачи знать, что они не обязательно должны сообщить пользователю, что никакой трафик данных не будет возможен. Вместо этого приемник должен ожидать еще одну передачу в ближайшее время, указывая либо на то, что удалось выполнить попытку восстановления после отказа (и, следовательно, все еще есть общая связь ), или что попытка восстановления после сбоя завершилась неудачно, что означает, что все соединения потеряны.

Для события разъединения значение boolean extra EXTRA_NO_CONNECTIVITY установлено как в true, если нет подключенных сетей вообще.

Константа Значение: "android.net.conn.CONNECTIVITY_CHANGE"

И в вашем GetNetworkStatus.isNetworkAvailable(), вы проверили для подключения LTE типа правильно? Вы можете использовать следующий метод (собранной из других, но работает довольно хорошо)

public static String getNetworkClass(Context context) { 
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo info = cm.getActiveNetworkInfo(); 
    if(info==null || !info.isConnected()) 
     return "-"; //not connected 
    if(info.getType() == ConnectivityManager.TYPE_WIFI) 
     return "WIFI"; 
    if(info.getType() == ConnectivityManager.TYPE_MOBILE){ 
     int networkType = info.getSubtype(); 
     switch (networkType) { 
      case TelephonyManager.NETWORK_TYPE_GPRS: 
      case TelephonyManager.NETWORK_TYPE_EDGE: 
      case TelephonyManager.NETWORK_TYPE_CDMA: 
      case TelephonyManager.NETWORK_TYPE_1xRTT: 
      case TelephonyManager.NETWORK_TYPE_IDEN: 
       return "2G"; 
      case TelephonyManager.NETWORK_TYPE_UMTS: 
      case TelephonyManager.NETWORK_TYPE_EVDO_0: 
      case TelephonyManager.NETWORK_TYPE_EVDO_A: 
      case TelephonyManager.NETWORK_TYPE_HSDPA: 
      case TelephonyManager.NETWORK_TYPE_HSUPA: 
      case TelephonyManager.NETWORK_TYPE_HSPA: 
      case TelephonyManager.NETWORK_TYPE_EVDO_B: 
      case TelephonyManager.NETWORK_TYPE_EHRPD: 
      case TelephonyManager.NETWORK_TYPE_HSPAP: 
       return "3G"; 
      case TelephonyManager.NETWORK_TYPE_LTE: 
       return "4G"; 
      default: 
       return "?"; 
     } 
    } 
    return "?"; 
} 
+0

GetNetworkStatus.isNetworkAvailable() код публичный статический логический isNetworkAvailable (контекст Context) { \t \t CON = контекст; \t \t ConnectivityManager connectManManager \t = (ConnectivityManager) con.getSystemService (Context.CONNECTIVITY_SERVICE); \t NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); \t return activeNetworkInfo! = Null; \t} –

+0

не могли бы вы проверить мой обновленный ответ? –

Смежные вопросы