热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【新手指教】android有关检测网络是否可用的代码,应该放在哪儿?

各位老师好:我现在有一个android项目,我是新手,只知道有一些主要的文件在eclipse中编辑,比如main.java,AndroidMainifest.xml,我现在想实现,app启动时先
各位老师好:
我现在有一个android项目,我是新手,只知道有一些主要的文件在eclipse中编辑,比如main.java,AndroidMainifest.xml,我现在想实现,app 启动时先检测一个url是否可用,如果不可用,就提示不可用,然后退出APP,现在找到了一段代码,可是不知道加到哪里好,代码是在
http://blog.csdn.net/ithomer/article/details/7896313

我其实就是想实现这篇文章 的内容,检测url可否打开,如果可以,就显示这个url,现在显示url已经实现了,就是不知道如何检测他,请老师们指点一下,检测代码应该放在哪里。 我是先实现了显示url,才看到的这个文章 ,谢谢了!

9 个解决方案

#1


我尝试着在main.java中各个地方加入,均是报错,实再不会应用,诚心求教各位老师。

#2


把你要的检测功能封装成函数,然后去oncreate里调用就可以了吧。。。

#3


将报错贴出来,不然没法看

#4


明白你的意思了,首先跟你说下,你刚启动一个项目的时候首先是去你的MainActivity类里面,然后去MainActivity的OnCreat()方法里面,所以呢你可以在OnCreat()方法里面去实现,但是呢一般我们操作这些东西最好放到一个线程里面,所以你可以永Handler进行线程处理防止请求服务器时间过长程序死掉。

#5


本帖最后由 Csupport 于 2014-06-18 15:21:09 编辑
main.java 如下
引用 2 楼 daydreary 的回复:

引用 3 楼 luowenlong860502 的回复:

引用 4 楼 chenzhiyong12345 的回复:
明白你的意思了,首先跟你说下,你刚启动一个项目的时候首先是去你的MainActivity类里面,然后去MainActivity的OnCreat()方法里面,所以呢你可以在OnCreat()方法里面去实现,但是呢一般我们操作这些东西最好放到一个线程里面,所以你可以永Handler进行线程处理防止请求服务器时间过长程序死掉。


package com.pocketdigi.webview;
 
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.net.ConnectivityManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.KeyEvent;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
 

public class main extends Activity {
    /** Called when the activity is first created. */
WebView wv;
ProgressDialog pd;
Handler handler;

//检测url
private boolean isOpenNetwork() {
ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if (connManager.getActiveNetworkInfo() != null) {
return connManager.getActiveNetworkInfo().isAvailable();
}


return false;
}

private void initMoreGames() {  
    String URL_MOREGAMES = "http://www.baidu.com";  
    WebView mWebView = (WebView) findViewById(R.id.view_gamesort);  
  
    if (mWebView != null) {  
        mWebView.requestFocus();  
        WebSettings webSettings = mWebView.getSettings();  
        if (webSettings != null) {  
            webSettings.setJavascriptEnabled(true);  
            webSettings.setCacheMode(MODE_PRIVATE);  
            webSettings.setDefaultTextEncodingName("utf-8");  
        }  
  
        // 判断网络是否可用  
        if(isOpenNetwork() == true) {  
            mWebView.loadUrl(URL_MOREGAMES);  
        } else {  
            AlertDialog.Builder builder = new AlertDialog.Builder(MoreGamesActivity.this);  
            builder.setTitle("没有可用的网络").setMessage("是否对网络进行设置?");  
              
            builder.setPositiveButton("是", new DialogInterface.OnClickListener() {  
                @Override  
                public void onClick(DialogInterface dialog, int which) {  
                    Intent intent = null;  
                      
                    try {  
                        String sdkVersion = android.os.Build.VERSION.SDK;  
                        if(Integer.valueOf(sdkVersion) > 10) {  
                            intent = new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS);  
                        }else {  
                            intent = new Intent();  
                            ComponentName comp = new ComponentName("com.android.settings", "com.android.settings.WirelessSettings");  
                            intent.setComponent(comp);  
                            intent.setAction("android.intent.action.VIEW");  
                        }  
                        MoreGamesActivity.this.startActivity(intent);  
                    } catch (Exception e) {  
                        Log.w(TAG, "open network settings failed, please check...");  
                        e.printStackTrace();  
                    }  
                }  
            }).setNegativeButton("否", new DialogInterface.OnClickListener() {  
                @Override  
                public void onClick(DialogInterface dialog, int which) {  
                    dialog.cancel();          
                    finish();  
                }  
            }).show();  
        }  
    } else {  
        Log.w(TAG, "mWebView is null, please check...");  
    }  

//检测url end
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        init();//执行初始化函数
        loadurl(wv,"http://baidu.com ");
    }
    
    public void init(){
     // Progress
     pd=new ProgressDialog(main.this);
     pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
     pd.setMessage("数据载入中,请稍候!");
     // Show/Hide message
     handler=new Handler(){
     public void handleMessage(Message msg)
     {
     //定义一个Handler,用于处理下载线程与UI间通讯
     if (!Thread.currentThread().isInterrupted())
     {
     switch (msg.what)
     {
     case 0:
     pd.show();//显示进度对话框
     break;
     case 1:
     pd.hide();//隐藏进度对话框,不可使用dismiss()、cancel(),否则再次调用show()时,显示的对话框小圆圈不会动。
     break;
     }
     }
     super.handleMessage(msg);
     }
     };
     // WebView
     wv=(WebView)findViewById(R.id.wv);
     wv.getSettings().setJavascriptEnabled(true);//可用JS
     wv.setScrollBarStyle(0);//滚动条风格,为0就是不给滚动条留空间,滚动条覆盖在网页上
     wv.setWebViewClient(new WebViewClient(){
     public boolean shouldOverrideUrlLoading(final WebView view, final String url) {
     loadurl(view,url);//载入网页
     return true;
     }//重写点击动作,用webview载入

     });
     wv.setWebChromeClient(new WebChromeClient(){
     public void onProgressChanged(WebView view,int progress){//载入进度改变而触发
     if(progress==100){
     handler.sendEmptyMessage(1);//如果全部载入,隐藏进度对话框
     }
     super.onProgressChanged(view, progress);
     }
     });
     }
    
    
    public boolean onKeyDown(int keyCode, KeyEvent event) {//捕捉返回键
        if ((keyCode == KeyEvent.KEYCODE_BACK) && wv.canGoBack()) {   
            wv.goBack();   
            return true;   
        }else if(keyCode == KeyEvent.KEYCODE_BACK){
         ConfirmExit();//按了返回键,但已经不能返回,则执行退出确认
         return true; 
        }   
        return super.onKeyDown(keyCode, event);   
    }
    public void ConfirmExit(){//退出确认
     AlertDialog.Builder ad=new AlertDialog.Builder(main.this);
     ad.setTitle("退出");
     ad.setMessage("是否退出商城?");
     ad.setPositiveButton("是", new DialogInterface.OnClickListener() {//退出按钮
@Override
public void onClick(DialogInterface dialog, int i) {
// TODO Auto-generated method stub
main.this.finish();//关闭activity
 
}
});
     ad.setNegativeButton("否",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int i) {
//不退出不用执行任何操作
}
});
     ad.show();//显示对话框
    }
    public void loadurl(final WebView view,final String url){
     new Thread(){
         public void run(){
         handler.sendEmptyMessage(0);
         view.loadUrl(url);//载入网页
         }
        }.start();
    }
 
 
}


报错 为 无法解析 view_gamesort,或者它不是字段
以及
无法解析 view_gamesort,或者它不是字
 段

MoreGamesActivity 无法解析为类
 型

此行的多个标记
- TAG cannot be resolved to a 
 variable
- 无法解析 Log

#6


引用 5 楼 vipstar 的回复:
main.java 如下
Quote: 引用 2 楼 daydreary 的回复:

引用 3 楼 luowenlong860502 的回复:

引用 4 楼 chenzhiyong12345 的回复:
明白你的意思了,首先跟你说下,你刚启动一个项目的时候首先是去你的MainActivity类里面,然后去MainActivity的OnCreat()方法里面,所以呢你可以在OnCreat()方法里面去实现,但是呢一般我们操作这些东西最好放到一个线程里面,所以你可以永Handler进行线程处理防止请求服务器时间过长程序死掉。


package com.pocketdigi.webview;
 
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.net.ConnectivityManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.KeyEvent;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
 

public class main extends Activity {
    /** Called when the activity is first created. */
WebView wv;
ProgressDialog pd;
Handler handler;

//检测url
private boolean isOpenNetwork() {
ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if (connManager.getActiveNetworkInfo() != null) {
return connManager.getActiveNetworkInfo().isAvailable();
}


return false;
}

private void initMoreGames() {  
    String URL_MOREGAMES = "http://www.baidu.com";  
    WebView mWebView = (WebView) findViewById(R.id.view_gamesort);  
  
    if (mWebView != null) {  
        mWebView.requestFocus();  
        WebSettings webSettings = mWebView.getSettings();  
        if (webSettings != null) {  
            webSettings.setJavascriptEnabled(true);  
            webSettings.setCacheMode(MODE_PRIVATE);  
            webSettings.setDefaultTextEncodingName("utf-8");  
        }  
  
        // 判断网络是否可用  
        if(isOpenNetwork() == true) {  
            mWebView.loadUrl(URL_MOREGAMES);  
        } else {  
            AlertDialog.Builder builder = new AlertDialog.Builder(MoreGamesActivity.this);  
            builder.setTitle("没有可用的网络").setMessage("是否对网络进行设置?");  
              
            builder.setPositiveButton("是", new DialogInterface.OnClickListener() {  
                @Override  
                public void onClick(DialogInterface dialog, int which) {  
                    Intent intent = null;  
                      
                    try {  
                        String sdkVersion = android.os.Build.VERSION.SDK;  
                        if(Integer.valueOf(sdkVersion) > 10) {  
                            intent = new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS);  
                        }else {  
                            intent = new Intent();  
                            ComponentName comp = new ComponentName("com.android.settings", "com.android.settings.WirelessSettings");  
                            intent.setComponent(comp);  
                            intent.setAction("android.intent.action.VIEW");  
                        }  
                        MoreGamesActivity.this.startActivity(intent);  
                    } catch (Exception e) {  
                        Log.w(TAG, "open network settings failed, please check...");  
                        e.printStackTrace();  
                    }  
                }  
            }).setNegativeButton("否", new DialogInterface.OnClickListener() {  
                @Override  
                public void onClick(DialogInterface dialog, int which) {  
                    dialog.cancel();          
                    finish();  
                }  
            }).show();  
        }  
    } else {  
        Log.w(TAG, "mWebView is null, please check...");  
    }  

//检测url end
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        init();//执行初始化函数
        loadurl(wv,"http://baidu.com ");
    }
    
    public void init(){
     // Progress
     pd=new ProgressDialog(main.this);
     pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
     pd.setMessage("数据载入中,请稍候!");
     // Show/Hide message
     handler=new Handler(){
     public void handleMessage(Message msg)
     {
     //定义一个Handler,用于处理下载线程与UI间通讯
     if (!Thread.currentThread().isInterrupted())
     {
     switch (msg.what)
     {
     case 0:
     pd.show();//显示进度对话框
     break;
     case 1:
     pd.hide();//隐藏进度对话框,不可使用dismiss()、cancel(),否则再次调用show()时,显示的对话框小圆圈不会动。
     break;
     }
     }
     super.handleMessage(msg);
     }
     };
     // WebView
     wv=(WebView)findViewById(R.id.wv);
     wv.getSettings().setJavascriptEnabled(true);//可用JS
     wv.setScrollBarStyle(0);//滚动条风格,为0就是不给滚动条留空间,滚动条覆盖在网页上
     wv.setWebViewClient(new WebViewClient(){
     public boolean shouldOverrideUrlLoading(final WebView view, final String url) {
     loadurl(view,url);//载入网页
     return true;
     }//重写点击动作,用webview载入

     });
     wv.setWebChromeClient(new WebChromeClient(){
     public void onProgressChanged(WebView view,int progress){//载入进度改变而触发
     if(progress==100){
     handler.sendEmptyMessage(1);//如果全部载入,隐藏进度对话框
     }
     super.onProgressChanged(view, progress);
     }
     });
     }
    
    
    public boolean onKeyDown(int keyCode, KeyEvent event) {//捕捉返回键
        if ((keyCode == KeyEvent.KEYCODE_BACK) && wv.canGoBack()) {   
            wv.goBack();   
            return true;   
        }else if(keyCode == KeyEvent.KEYCODE_BACK){
         ConfirmExit();//按了返回键,但已经不能返回,则执行退出确认
         return true; 
        }   
        return super.onKeyDown(keyCode, event);   
    }
    public void ConfirmExit(){//退出确认
     AlertDialog.Builder ad=new AlertDialog.Builder(main.this);
     ad.setTitle("退出");
     ad.setMessage("是否退出商城?");
     ad.setPositiveButton("是", new DialogInterface.OnClickListener() {//退出按钮
@Override
public void onClick(DialogInterface dialog, int i) {
// TODO Auto-generated method stub
main.this.finish();//关闭activity
 
}
});
     ad.setNegativeButton("否",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int i) {
//不退出不用执行任何操作
}
});
     ad.show();//显示对话框
    }
    public void loadurl(final WebView view,final String url){
     new Thread(){
         public void run(){
         handler.sendEmptyMessage(0);
         view.loadUrl(url);//载入网页
         }
        }.start();
    }
 
 
}


报错 为 无法解析 view_gamesort,或者它不是字段
以及
无法解析 view_gamesort,或者它不是字
 段

MoreGamesActivity 无法解析为类
 型

此行的多个标记
- TAG cannot be resolved to a 
 variable
- 无法解析 Log


伙计,你直接把别个代码copy过来肯定不行啊,MoreGamesActivity 改成你自己的main ,view_gamesort是一个ID ,你需要在xml中定义一个webview

#7


你的代码是从网上拷贝的吧,很多地方要改成和你的工程对应的。你那个类叫main(以后最好第一个字母要大写),你得把诸如MoreGamesActivity.this, 诸如 R.id.XXXXX或者R.layout.XXXX改成你自己工程里的东西。。。

#8


引用 7 楼 daydreary 的回复:
你的代码是从网上拷贝的吧,很多地方要改成和你的工程对应的。你那个类叫main(以后最好第一个字母要大写),你得把诸如MoreGamesActivity.this, 诸如 R.id.XXXXX或者R.layout.XXXX改成你自己工程里的东西。。。


谢谢您的回复,我正在准备,正在进行入门中,所以很多东西太不懂,谢谢了,我去试试。

#9


引用 6 楼 luowenlong860502 的回复:
Quote: 引用 5 楼 vipstar 的回复:

main.java 如下
Quote: 引用 2 楼 daydreary 的回复:

引用 3 楼 luowenlong860502 的回复:

引用 4 楼 chenzhiyong12345 的回复:
明白你的意思了,首先跟你说下,你刚启动一个项目的时候首先是去你的MainActivity类里面,然后去MainActivity的OnCreat()方法里面,所以呢你可以在OnCreat()方法里面去实现,但是呢一般我们操作这些东西最好放到一个线程里面,所以你可以永Handler进行线程处理防止请求服务器时间过长程序死掉。


package com.pocketdigi.webview;
 
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.net.ConnectivityManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.KeyEvent;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
 

public class main extends Activity {
    /** Called when the activity is first created. */
WebView wv;
ProgressDialog pd;
Handler handler;

//检测url
private boolean isOpenNetwork() {
ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if (connManager.getActiveNetworkInfo() != null) {
return connManager.getActiveNetworkInfo().isAvailable();
}


return false;
}

private void initMoreGames() {  
    String URL_MOREGAMES = "http://www.baidu.com";  
    WebView mWebView = (WebView) findViewById(R.id.view_gamesort);  
  
    if (mWebView != null) {  
        mWebView.requestFocus();  
        WebSettings webSettings = mWebView.getSettings();  
        if (webSettings != null) {  
            webSettings.setJavascriptEnabled(true);  
            webSettings.setCacheMode(MODE_PRIVATE);  
            webSettings.setDefaultTextEncodingName("utf-8");  
        }  
  
        // 判断网络是否可用  
        if(isOpenNetwork() == true) {  
            mWebView.loadUrl(URL_MOREGAMES);  
        } else {  
            AlertDialog.Builder builder = new AlertDialog.Builder(MoreGamesActivity.this);  
            builder.setTitle("没有可用的网络").setMessage("是否对网络进行设置?");  
              
            builder.setPositiveButton("是", new DialogInterface.OnClickListener() {  
                @Override  
                public void onClick(DialogInterface dialog, int which) {  
                    Intent intent = null;  
                      
                    try {  
                        String sdkVersion = android.os.Build.VERSION.SDK;  
                        if(Integer.valueOf(sdkVersion) > 10) {  
                            intent = new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS);  
                        }else {  
                            intent = new Intent();  
                            ComponentName comp = new ComponentName("com.android.settings", "com.android.settings.WirelessSettings");  
                            intent.setComponent(comp);  
                            intent.setAction("android.intent.action.VIEW");  
                        }  
                        MoreGamesActivity.this.startActivity(intent);  
                    } catch (Exception e) {  
                        Log.w(TAG, "open network settings failed, please check...");  
                        e.printStackTrace();  
                    }  
                }  
            }).setNegativeButton("否", new DialogInterface.OnClickListener() {  
                @Override  
                public void onClick(DialogInterface dialog, int which) {  
                    dialog.cancel();          
                    finish();  
                }  
            }).show();  
        }  
    } else {  
        Log.w(TAG, "mWebView is null, please check...");  
    }  

//检测url end
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        init();//执行初始化函数
        loadurl(wv,"http://baidu.com ");
    }
    
    public void init(){
     // Progress
     pd=new ProgressDialog(main.this);
     pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
     pd.setMessage("数据载入中,请稍候!");
     // Show/Hide message
     handler=new Handler(){
     public void handleMessage(Message msg)
     {
     //定义一个Handler,用于处理下载线程与UI间通讯
     if (!Thread.currentThread().isInterrupted())
     {
     switch (msg.what)
     {
     case 0:
     pd.show();//显示进度对话框
     break;
     case 1:
     pd.hide();//隐藏进度对话框,不可使用dismiss()、cancel(),否则再次调用show()时,显示的对话框小圆圈不会动。
     break;
     }
     }
     super.handleMessage(msg);
     }
     };
     // WebView
     wv=(WebView)findViewById(R.id.wv);
     wv.getSettings().setJavascriptEnabled(true);//可用JS
     wv.setScrollBarStyle(0);//滚动条风格,为0就是不给滚动条留空间,滚动条覆盖在网页上
     wv.setWebViewClient(new WebViewClient(){
     public boolean shouldOverrideUrlLoading(final WebView view, final String url) {
     loadurl(view,url);//载入网页
     return true;
     }//重写点击动作,用webview载入

     });
     wv.setWebChromeClient(new WebChromeClient(){
     public void onProgressChanged(WebView view,int progress){//载入进度改变而触发
     if(progress==100){
     handler.sendEmptyMessage(1);//如果全部载入,隐藏进度对话框
     }
     super.onProgressChanged(view, progress);
     }
     });
     }
    
    
    public boolean onKeyDown(int keyCode, KeyEvent event) {//捕捉返回键
        if ((keyCode == KeyEvent.KEYCODE_BACK) && wv.canGoBack()) {   
            wv.goBack();   
            return true;   
        }else if(keyCode == KeyEvent.KEYCODE_BACK){
         ConfirmExit();//按了返回键,但已经不能返回,则执行退出确认
         return true; 
        }   
        return super.onKeyDown(keyCode, event);   
    }
    public void ConfirmExit(){//退出确认
     AlertDialog.Builder ad=new AlertDialog.Builder(main.this);
     ad.setTitle("退出");
     ad.setMessage("是否退出商城?");
     ad.setPositiveButton("是", new DialogInterface.OnClickListener() {//退出按钮
@Override
public void onClick(DialogInterface dialog, int i) {
// TODO Auto-generated method stub
main.this.finish();//关闭activity
 
}
});
     ad.setNegativeButton("否",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int i) {
//不退出不用执行任何操作
}
});
     ad.show();//显示对话框
    }
    public void loadurl(final WebView view,final String url){
     new Thread(){
         public void run(){
         handler.sendEmptyMessage(0);
         view.loadUrl(url);//载入网页
         }
        }.start();
    }
 
 
}


报错 为 无法解析 view_gamesort,或者它不是字段
以及
无法解析 view_gamesort,或者它不是字
 段

MoreGamesActivity 无法解析为类
 型

此行的多个标记
- TAG cannot be resolved to a 
 variable
- 无法解析 Log


伙计,你直接把别个代码copy过来肯定不行啊,MoreGamesActivity 改成你自己的main ,view_gamesort是一个ID ,你需要在xml中定义一个webview



谢谢您的回复,我正在准备,正在进行入门中,所以很多东西太不懂,谢谢了,我去试试。

推荐阅读
author-avatar
星宇ooo
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有