我的应用程序在wifi和移动网络中运行良好,但无法检测何时通过蓝牙网络共享连接。
public boolean isNetworkAvailable() {
ConnectivityManager cm = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = cm.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
return true;
}
return false;
}
我尝试过运行其他一些应用程序。他们也没有显示网络连接,但谷歌应用程序工作得很好,所以像其他一些应用程序,如whatsap。想知道他们是如何做到的,以及为什么大多数应用程序都忽略了这一点。
任何人都可以告诉我通过各种方式检查Android中的互联网连接,包括蓝牙平移和代理等。
任何帮助将不胜感激。提前谢谢..
答案 0 :(得分:7)
尝试连接“始终可用”网站。如果存在任何连接,则应返回true:
protected static boolean hasInternetAccess()
{
try
{
URL url = new URL("http://www.google.com");
HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
urlc.setRequestProperty("User-Agent", "Android Application:1");
urlc.setRequestProperty("Connection", "close");
urlc.setConnectTimeout(1000 * 30);
urlc.connect();
// http://www.w3.org/Protocols/HTTP/HTRESP.html
if (urlc.getResponseCode() == 200 || urlc.getResponseCode() > 400)
{
// Requested site is available
return true;
}
}
catch (Exception ex)
{
// Error while trying to connect
return false;
}
return false;
}
答案 1 :(得分:4)
可能有用,getAllNetworkInfo()提供网络信息列表
public boolean checkNetworkStatus(Context context)
{
boolean flag = false;
ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo[] netInfo = cm.getAllNetworkInfo();
//it provide all type of connectivity ifo
for (NetworkInfo ni : netInfo)
{
if (ni.getTypeName().equalsIgnoreCase("Connecxtion Type"))
if (ni.isConnected())
flag = true;
}
return flag;
}
答案 2 :(得分:3)
检测手机(或任何其他设备)是否与互联网连接的最简单方法是将ping发送到我眼中的网络服务器。当然你需要一个永远可以访问的ip地址。你可以尝试这个代码(从我的头脑中),也许你必须抓住一些例外:
public boolean hasInternetConection() {
Runtime runtime = Runtime.getRuntime();
Process ping = runtime.exec("/system/bin/ping -c 1 173.194.39.4"); // google.com
int result = ping.waitFor();
if(result == 0) return true;
else return false;
}
当然,每次wifi状态,蓝牙状态或其他一些改变时都必须运行此方法(我建议在单独的线程中)但总而言之它应该适用于您的问题。
答案 3 :(得分:3)
您可以使用以下内容:
public boolean isMyNetworkIsLive() {
boolean isConnectionActive = false;
ConnectivityManager mConnectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo nNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
if (nNetworkInfo != null && nNetworkInfo.isConnectedOrConnecting()) {
isConnectionActive = true;
}
return isConnectionActive;
}
的参考号
答案 4 :(得分:3)
您的互联网连接检查似乎没问题。关于蓝牙连接,试试这个:
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (mBluetoothAdapter != null && mBluetoothAdapter.isEnabled()) {
// Bluetooth enabled
}
你的完美功能将是:
public boolean isNetworkAvailable() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = cm.getActiveNetworkInfo();
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
return networkInfo != null && networkInfo.isConnected()
bluetoothAdapter != null && bluetoothAdapter.isEnabled()
}
我认为你需要这些权限:
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
答案 5 :(得分:1)
我同意Muzikant并感谢他的想法。我认为发布已实施的解决方案会更好,因为它需要一些补充。
这就是我解决它的方法。
Created和AsyncTask以避免主线程异常上的网络。
public class GetInternetStatus extends AsyncTask<Void,Void,Boolean> {
@Override
protected Boolean doInBackground(Void... params) {
return hasInternetAccess();
}
protected boolean hasInternetAccess()
{
try
{
URL url = new URL("http://www.google.com");
HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
urlc.setRequestProperty("User-Agent", "Android Application:1");
urlc.setRequestProperty("Connection", "close");
urlc.setConnectTimeout(1000 * 30);
urlc.connect();
// http://www.w3.org/Protocols/HTTP/HTRESP.html
if (urlc.getResponseCode() == 200 || urlc.getResponseCode() > 400)
{
// Requested site is available
return true;
}
}
catch (Exception ex)
{
// Error while trying to connect
ex.printStackTrace();
return false;
}
return false;
}
}
现在将以下函数添加到activity并调用它来检查连接性。
// Checking for all possible internet connections
public static boolean isConnectingToInternet() {
Boolean result = false;
try {
//get the result after executing AsyncTask
result = new GetInternetStatus().execute().get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
return result;
}
答案 6 :(得分:0)
检查互联网连接 - 移动数据,蓝牙,Wifi
/**
* To check internet connection
*
* @param context context for activity
* @return boolean true if internet is connected else false
*/
public static boolean isInternetConnected(Context context) {
ConnectivityManager connec = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
android.net.NetworkInfo wifi = connec
.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
android.net.NetworkInfo mobile = connec
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
android.net.NetworkInfo bluetooth = connec
.getNetworkInfo(ConnectivityManager.TYPE_BLUETOOTH);
if (wifi.isConnected()) {
return true;
} else if (mobile.isConnected()) {
return true;
} else if(bluetooth.isConnected()){
return true;
} else if (!mobile.isConnected()) {
return false;
}
return false;
}