Android 检查互联网连接
我想我应该首先说我对eclipse和java完全陌生。我正在尝试使用eclipse创建一个android应用程序来启动我的网页。我有一个代码示例,它运行得很好,但它几乎是从我在网上找到的示例中复制和粘贴的,所以请原谅我的代码太草率。我想知道如何检查互联网或wifi连接是否可用。。如果没有连接,则显示警报(没有Internet连接)。。我发现了一些类似的问题,但我只是不知道该把代码放在哪里?谁能给我看看吗Android 检查互联网连接,android,eclipse,Android,Eclipse,我想我应该首先说我对eclipse和java完全陌生。我正在尝试使用eclipse创建一个android应用程序来启动我的网页。我有一个代码示例,它运行得很好,但它几乎是从我在网上找到的示例中复制和粘贴的,所以请原谅我的代码太草率。我想知道如何检查互联网或wifi连接是否可用。。如果没有连接,则显示警报(没有Internet连接)。。我发现了一些类似的问题,但我只是不知道该把代码放在哪里?谁能给我看看吗 package com.mysite.news; import com.m
package com.mysite.news;
import com.mysite.news.R;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
public class WebActivity extends Activity {
private WebView wv;
private String LASTURL = "";
Menu myMenu = null;
private static final String PREFS_NAME = "MyPrefs";
private Boolean imgOn;
/**
* Called when the activity is first created.
*/
@Override
public void onCreate( Bundle savedInstanceState ) {
super.onCreate( savedInstanceState );
this.getWindow().requestFeature( Window.FEATURE_PROGRESS );
setContentView( R.layout.web_view );
wv = ( WebView ) findViewById( R.id.web_view );
WebSettings webSettings = wv.getSettings();
webSettings.setSavePassword( true );
webSettings.setSaveFormData( true );
webSettings.setJavaScriptEnabled( true );
webSettings.setUseWideViewPort(true);
webSettings.setLoadWithOverviewMode(true);
webSettings.setSupportZoom(false);
SharedPreferences settings = getSharedPreferences( PREFS_NAME, 0 );
imgOn = settings.getBoolean( "IMGMODE", false );
webSettings.setLoadsImagesAutomatically( imgOn );
final Activity activity = this;
// start ProgressDialog with "Page loading..."
final ProgressDialog dialog = new ProgressDialog( activity );
dialog.setMessage( "Page loading..." );
dialog.setIndeterminate( true );
dialog.setCancelable( true );
dialog.show();
wv.setWebChromeClient( new WebChromeClient() {
public void onProgressChanged( WebView view, int progress ) {
// set address bar and progress
// activity.setTitle( " " + LASTURL );
// activity.setProgress( progress * 100 );
if( progress == 100 ) {
// stop ProgressDialog after loading
dialog.dismiss();
// activity.setTitle( " " + LASTURL );
}
}
} );
wv.setWebViewClient( new WebViewClient() {
public void onReceivedError( WebView view, int errorCode, String description, String failingUrl ) {
Toast.makeText( getApplicationContext(), "Error: " + description + " " + failingUrl, Toast.LENGTH_LONG ).show();
}
@Override
public boolean shouldOverrideUrlLoading( WebView view, String url ) {
if( url.indexOf( "mysite" ) <= 0 ) {
// the link is not for a page on my site, so launch another Activity that handles URLs
Intent intent = new Intent( Intent.ACTION_VIEW, Uri.parse( url ) );
startActivity( intent );
return true;
}
return false;
}
public void onPageStarted( WebView view, String url, Bitmap favicon ) {
LASTURL = url;
view.getSettings().setLoadsImagesAutomatically( true );
view.getSettings().setBuiltInZoomControls( true );
}
public void onPageFinished( WebView view, String url ) {
view.loadUrl( "javascript:(function() { " +
"hide('sidebar');" +
//"var parent = document.getElementsByClassName('page-navigation')[0];"+
//"var panel = document.getElementsByClassName('panel-tools')[0];"+
//"var div = document.createElement('div');"+
//"div.innerHTML = panel.innerHTML;"+
//"parent.appendChild(div);"+
//"panel.innerHTML = '';"+
//"div.style['margin-left'] = '31px';"+
"var panel = document.getElementById('search');" +
"panel.style['width'] = '55px';" +
//"var imgs=document.getElementsByTagName('IMG');for(var i=0;i<imgs.length;i++){if (imgs[i].height=60) {imgs[i].src='';imgs[i].width=0;} }"+
//"var urls=document.getElementsByTagName('li');for(var i=0;i<urls.length;i++){if (urls[i].style='margin: -14px 0pt 0pt;'){urls[i].style['display'] = 'none';}}"+
//"hideByClass('panel-tools');"+
"function hide(id){if (document.getElementById(id)){document.getElementById(id).style['display'] = 'none';}}" +
//"function hideByClass(c){var e=document.getElementsByClassName(c);for(var i=0;i<e.length;i++){e[i].style['display'] = 'none';}}"+
"})()" );
if( imgOn ) {
view.getSettings().setLoadsImagesAutomatically( true );
view.getSettings().setSupportZoom(false);
}
}
} );
wv.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
wv.setScrollbarFadingEnabled(false);
wv.loadUrl( "http://www.mysite.com" );
}
@Override
public boolean onKeyDown( int keyCode, KeyEvent event ) {
if( ( keyCode == KeyEvent.KEYCODE_BACK ) && wv.canGoBack() ) {
wv.goBack();
return true;
}
return super.onKeyDown( keyCode, event );
}
@Override
public boolean onCreateOptionsMenu( Menu menu ) {
super.onCreateOptionsMenu( menu );
this.myMenu = menu;
MenuItem item = menu.add( 0, 1, 0, "MAIN PAGE" );
item.setIcon( R.drawable.home );
MenuItem item2 = menu.add( 0, 2, 0, "BACK" );
item2.setIcon( R.drawable.arrowleft );
MenuItem item3 = menu.add( 0, 3, 0, "Reload" );
item3.setIcon( R.drawable.s );
MenuItem item4 = menu.add( 0, 4, 0, "CLEAR CACHE" );
item4.setIcon( R.drawable.trash );
MenuItem item5 = menu.add( 0, 5, 0, "Rate" );
item5.setIcon( R.drawable.vote );
MenuItem item6 = menu.add( 0, 6, 0, "Exit" );
item6.setIcon( R.drawable.close );
return true;
}
@Override
public boolean onOptionsItemSelected( MenuItem item ) {
switch( item.getItemId() ) {
case 1:
wv.loadUrl( "http://mysite.com" );
break;
case 2:
if( wv.canGoBack() ) {
wv.goBack();
}
break;
case 3:
wv.loadUrl( LASTURL );
break;
case 4:
wv.clearCache( true );
break;
case 5:
Intent marketIntent2 = new Intent(Intent.ACTION_VIEW, Uri.parse(
"https://play.google.com/store/apps/details?id=" + getPackageName()));
startActivity(marketIntent2);
break;
case 6:
finish();
break;
}
return true;
}
private void saveSettings( Boolean val ) {
SharedPreferences settings = getSharedPreferences( PREFS_NAME, 0 );
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean( "IMGMODE", val );
editor.commit();
}
}
package com.mysite.news;
导入com.mysite.news.R;
导入android.app.Activity;
导入android.app.ProgressDialog;
导入android.content.Intent;
导入android.content.SharedReferences;
导入android.graphics.Bitmap;
导入android.net.Uri;
导入android.os.Bundle;
导入android.view.KeyEvent;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.view.Window;
导入android.webkit.WebChromeClient;
导入android.webkit.WebSettings;
导入android.webkit.WebView;
导入android.webkit.WebViewClient;
导入android.widget.Toast;
公共类WebActivity扩展了活动{
私有网络视图;
私有字符串LASTURL=“”;
菜单myMenu=null;
私有静态最终字符串PREFS_NAME=“MyPrefs”;
私有布尔imgOn;
/**
*在首次创建活动时调用。
*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
this.getWindow().requestFeature(Window.FEATURE\u PROGRESS);
setContentView(R.layout.web_视图);
wv=(网络视图)findViewById(R.id.web\u视图);
WebSettings WebSettings=wv.getSettings();
webSettings.setSavePassword(true);
webSettings.setSaveFormData(真);
setJavaScriptEnabled(true);
webSettings.setUseWideViewPort(true);
webSettings.SetLoadWithOverview模式(true);
webSettings.setSupportZoom(假);
SharedReferences设置=GetSharedReferences(首选项名称,0);
imgOn=settings.getBoolean(“IMGMODE”,false);
webSettings.setLoadsImagesAutomatically(imgOn);
最终活动=此;
//用“页面加载…”启动ProgressDialog
最终进度对话框=新建进度对话框(活动);
setMessage(“页面加载…”);
对话框。setUndeterminate(true);
对话框。可设置可取消(true);
dialog.show();
wv.setWebChromeClient(新WebChromeClient(){
public void onProgressChanged(WebView视图,int-progress){
//设置地址栏和进度
//activity.setTitle(“+LASTURL”);
//活动。设置进度(进度*100);
如果(进度==100){
//加载后停止ProgressDialog
dialog.dismise();
//activity.setTitle(“+LASTURL”);
}
}
} );
wv.setWebViewClient(新的WebViewClient(){
public void onReceivedError(WebView视图、int错误代码、字符串描述、字符串失败URL){
Toast.makeText(getApplicationContext(),“Error:+description+”“+failingUrl,Toast.LENGTH_LONG).show();
}
@凌驾
公共布尔值shouldOverrideUrlLoading(WebView视图,字符串url){
如果(url.indexOf(“mysite”)检查此链接
加载url之前请使用相同的解决方案。如果internet不可用,请显示错误对话框,否则请加载url以下是我用于网络连接的帮助器类:
public class NetworkUtils
{
public static boolean isOnline( Service service )
{
ConnectivityManager cm = (ConnectivityManager) service.getSystemService( Context.CONNECTIVITY_SERVICE );
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if ( netInfo != null && netInfo.isConnected() )
{
return true;
}
return false;
}
}
不要忘记将权限添加到AndroidManifest.xml:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
这个片段帮助了我,希望它也能帮助你。你的用法可能是这样的
if (!checkNetwork()) {
//TODO Network Not Available
} else {
//TODO Network Available
}
您可能希望在函数()中放置Toast通知
而不是那么第二部分(您要放置的代码)在哪里呢。您是否只想在“活动启动”中测试它。可能只是在另一个“活动”中使用它,如果您有internet连接,请启动此“活动”或以其他方式显示其他内容。这是一个很好的关注点分离。在执行wv.loadurl()之前,您必须检查是否有internet连接;如果有Internet连接->继续,如果没有->显示消息我想我只是想在活动启动时测试一下..我在这里发现了一些可能有用的东西,但是,就像我说的,我真的不知道放在哪里…@BlundellI想的是这样的…private boolean checkInternetConnection(){ConnectivityManager conMgr=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);//如果(conMgr.getActiveNetworkInfo()!=null&&conMgr.getActiveNetworkInfo().isAvailable()&&conMgr.getActiveNetworkInfo().isConnected()){return true;}否则{Log.v(标记,“Internet连接不存在”);return false;}}
我可以把它放在上面的代码中吗?如果可以,放在哪里?使用我发布的helper类。然后,无论何时需要检查是否有连接,只要根据需要调用if(!NetworkUtils.isOnline(service)){return;}
。也就是说,在调用wv.loadurl()之前检查网络是否可用
显然,参数service
需要来自调用类。我创建了一个新类调用NetworkUtils,并在wv.loadurl()之前添加了if(!NetworkUtils.isOnline(service)){return;}
我在这两个文件上都有错误。任何建议都不确定没有错误。但我敢打赌,这是因为您刚刚复制了代码,包括服务的示例参数
。您需要使用实现类中的服务作为参数。
if (!checkNetwork()) {
//TODO Network Not Available
} else {
//TODO Network Available
}