2011-08-21 89 views
2

如何使用廣播接收器來檢查是否沒有互聯網連接?廣播接收器和互聯網連接

而在這之後:

1.如果有連接=什麼也不做

2.有沒有連接=開啓新的活動

我希望你明白我在問。

這裏是我的網頁流量的應用程序代碼:

WebView mWebView; 
    String URL = "http://url.com"; 
    ProgressBar loadingProgressBar,loadingTitle; 


    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.webview); 


     mWebView = (WebView) findViewById(R.id.Web); 
     mWebView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 
     mWebView.getSettings().setJavaScriptEnabled(true); 
     mWebView.getSettings().setBuiltInZoomControls(true); 
     mWebView.getSettings().setAllowFileAccess(true); 
     mWebView.loadUrl(URL); 
     mWebView.setWebViewClient(new MyWebViewClient()); 

     loadingProgressBar=(ProgressBar)findViewById(R.id.progressBar); 

     mWebView.setWebChromeClient(new WebChromeClient() { 

     @Override 
     public void onProgressChanged(WebView view, int newProgress) { 
     super.onProgressChanged(view, newProgress); 
     loadingProgressBar.setProgress(newProgress); 
     if (newProgress == 100) { 
     loadingProgressBar.setVisibility(View.GONE); 
     } else{ 
     loadingProgressBar.setVisibility(View.VISIBLE); 
     } 
     } 
     }); 
    } 



    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { 
      mWebView.goBack(); 
      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 


     private class MyWebViewClient extends WebViewClient { 


     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      if (url.endsWith(".mp3")) { 
       Intent intent = new Intent(Intent.ACTION_VIEW); 
       intent.setDataAndType(Uri.parse(url), "audio/*"); 
       view.getContext().startActivity(intent); 
       return true; 
      } else if (url.endsWith(".mp4") || url.endsWith(".3gp")) { 
        Intent intent = new Intent(Intent.ACTION_VIEW); 
        intent.setDataAndType(Uri.parse(url), "video/*"); 
        view.getContext().startActivity(intent); 
        return true; 
      } else { 
       return super.shouldOverrideUrlLoading(view, url); 
      } 
     } 
     } 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu, menu); 
    return true; 
} 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case R.id.menu_paivita: 
    mWebView.reload(); 
    return true; 
    case R.id.menu_sulje: 
    a.this.finish(); 
    return true; 
    case R.id.menu_tietoa: 
      Intent intent = new Intent(a.this, c.class); 
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      startActivity(intent); 
     return true; 
    case R.id.menu_palautetta: 
     Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); 
     String aEmailList[] = { "[email protected]" }; 
     emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, aEmailList); 
     emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Palaute Sovelluksesta"); 
     emailIntent.setType("plain/text"); 
     startActivity(Intent.createChooser(emailIntent, "Send your email in: Gmail")); 
     return true; 
    default: 
     return false; 
} 
} 
private BroadcastReceiver mConnReceiver = new BroadcastReceiver() { 
    @Override 
    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); 

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

     // do application-specific task(s) based on the current network state, such 
     // as enabling queuing of HTTP requests when currentNetworkInfo is connected etc. 
     ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo info = cm.getActiveNetworkInfo(); 
     if (info != null) { 
      if (!info.isConnected()) { 
      } 
     } 
     else { 
      setContentView(R.layout.connection_error); 
     } 
    } 
}; 

感謝您的幫助!

更新:代碼已更新!

回答

5

ConnectivityManager提供可以檢查互聯網連接的呼叫。

如果你想監聽在連接更改,創建反應ConnectivityManager.CONNECTIVITY_ACTION

+0

我是Android新手,那麼我該怎麼做? =) – Eljas

+3

這裏有一個很好的教程:http://thiranjith.wordpress.com/2011/03/31/how-to-monitor-network-connectivity-in-android/ – Dave

+0

我更新我的問題代碼。我沒有得到這個工作,所以我做錯了什麼? – Eljas

2

創建一個文件到您的項目作爲一個傾聽者...和複製粘貼下面的代碼到這個文件中

package your.package.name; //Change it as your package name 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.widget.Toast; 

public class NetworkChangeReceiver extends BroadcastReceiver { 

    public static int TYPE_WIFI = 1; 
    public static int TYPE_MOBILE = 2; 
    public static int TYPE_NOT_CONNECTED = 0; 

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

     String status = getConnectivityStatusString(context); 

     Toast.makeText(context, status, Toast.LENGTH_LONG).show(); 
    } 

    public static int getConnectivityStatus(Context context) { 
     ConnectivityManager cm = (ConnectivityManager) context 
      .getSystemService(Context.CONNECTIVITY_SERVICE); 

     NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 
     if (null != activeNetwork) { 
      if(activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) 
       return TYPE_WIFI; 

      if(activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) 
       return TYPE_MOBILE; 
     } 
     return TYPE_NOT_CONNECTED; 
    } 

    public static String getConnectivityStatusString(Context context) { 
     int conn = getConnectivityStatus(context); 
     String status = null; 
     if (conn == TYPE_WIFI) { 
     status = "Wifi enabled"; 
     } else if (conn == TYPE_MOBILE) { 
      status = "Mobile data enabled"; 
     } else if (conn == TYPE_NOT_CONNECTED) { 
      status = "Not connected to Internet"; 
     } 
     return status; 
    } 
} 

,並添加以下內容清單文件中的應用程序標籤

<application ...> 
... 
    <receiver 
     android:name="your.package.name.NetworkChangeReceiver" //Change it as your-package-name.NetworkChangeReceiver 
     android:label="NetworkChangeReceiver" > 
     <intent-filter> 
      <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
      <action android:name="android.net.wifi.WIFI_STATE_CHANGED" /> 
     </intent-filter> 
    </receiver> 
    ... 
</application> 

運行應用程序,你會看到吐司消息,如果網絡狀態更改之後。