2013-12-11 3 views
1

Я использую широковещательный приемник в своей деятельности, чтобы проверить, подключен ли интернет или нет, если он подключен только тогда, он должен сделать http-запрос другим, показывая диалоговое окно с предупреждением, в котором говорится об отсутствии подключения к Интернету, и это работающ отлично.Broadcast Receiver Захват приложения

ПРОБЛЕМА Все мое приложение использует подключение к Интернету, все действия. Как я должен сделать широковещательный приемник доступным через приложение.

Мои Broadcast Receiver class


private BroadcastReceiver mConnReceiver = new BroadcastReceiver() { 
    public void onReceive(Context context, Intent intent) { 
     boolean noConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false); 
     String reason = intent.getStringExtra(ConnectivityManager.EXTRA_REASON); 
     boolean isFailover = intent.getBooleanExtra(ConnectivityManager.EXTRA_IS_FAILOVER, false); 

     currentNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO); 
     otherNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_OTHER_NETWORK_INFO); 

     if(currentNetworkInfo.isConnected()) 
     { 

      Toast.makeText(getApplicationContext(), "Internet Connected", Toast.LENGTH_LONG).show(); 

     } 
     else 
     { 

      Toast.makeText(getApplicationContext(), "Internet Not Connected", Toast.LENGTH_LONG).show(); 

     } 
    } 
}; 



и onCreate

this.registerReceiver(this.mConnReceiver, 
      new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); 
+1

Вы хотите получать уведомление, когда пользователь подключен к Интернету, или вы хотите проверить, подключен ли он (для этого вам не нужен BroadcastReceiver)? – RvdK

+0

вы можете иметь абстрактный вид деятельности, который реализует Braodcardreceiver и степень активности для других видов деятельности. –

+0

@RvdK мое приложение в основном работает с подключением к Интернету с помощью webservices (json), поэтому я хочу, чтобы пользователь был уведомлен о каждом соединении lost –

ответ

1

Сделать приемник для этого:

public class NetReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 


     ConnectivityManager connectivityManager = (ConnectivityManager) 
            context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 
     boolean isConnected = activeNetInfo != null && activeNetInfo.isConnectedOrConnecting(); 
     if (isConnected)  
      //Nothing 
     else 
      Toast.makeText(context, "Not Connected", Toast.LENGTH_LONG).show(); 
    } 
} 

Теперь добавьте это в AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET"></uses-permission> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 

если вы добавили выше, а затем проверить этот код:

<receiver android:name=".NetReceiver" > 
     <intent-filter> 
      <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
     </intent-filter> 
    </receiver> 
+0

спасибо вам большое ... работал как шарм ... , но когда я пытаюсь открыть его действие, он закроет bcoz http-запроса. Сделать http-запрос только в Интернете связано ... как мне изменить часть else? –

+0

сделать класс приложения с одной переменной для хранения значения интернет-соединения. а затем установить значение из широковещательного приемника, если подключение к Интернету .., а затем, когда вы делаете http-запрос, сначала проверьте это значение переменной .. – Riser

+0

любой пример или код .. будет очень полезно? –

1
ConnectivityManager connMgr = (ConnectivityManager) 
     context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); 
    if (networkInfo != null && networkInfo.isConnected()) { 
     // connected to internet 
    } else { 
     // no internet 
    } 
0

Если вам просто нужно проверить, если пользователь подключен к Интернету, то проверьте

 ConnectivityManager conMgr = (ConnectivityManager)     
     context.getSystemService(Context.CONNECTIVITY_SERVICE); 

     // ARE WE CONNECTED TO THE NET 

     if (conMgr.getActiveNetworkInfo() != null && conMgr.getActiveNetworkInfo().isAvailable() && conMgr.getActiveNetworkInfo().isConnected()) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 

, прежде чем начать Http request.You не нужно зарегистрировать BroadcastReceiver для этого.

2

я предлагаю вам для извлечения приемника в класс верхнего уровня, установите его во всех точках входа (каждый пользователь может начать работу с аутсайтом вашего приложения). Затем используйте объект установки singleton, чтобы сохранить статус, и все ваши действия могут просто получить доступ к этому объекту настройки, чтобы проверить соединение.

Поскольку все ваши действия нуждаются в этом, и даже нужно получать уведомление при изменении соединения, вы можете определить базовую активность, которая содержит всю логику обработки соединений и позволяет ей наследовать все другие действия.

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