相关疑难解决方法(0)

检测Android上是否有可用的Internet连接

我需要检测Android设备是否已连接到Internet.

NetworkInfo类提供了一个非静态方法isAvailable()听起来很完美.

问题是:

NetworkInfo ni = new NetworkInfo();
if (!ni.isAvailable()) {
    // do something
}
Run Code Online (Sandbox Code Playgroud)

抛出此错误:

The constructor NetworkInfo is not visible.
Run Code Online (Sandbox Code Playgroud)

安全的赌注是有另一个类返回一个NetworkInfo对象.但我不知道哪个.

  1. 如何让上面的代码段工作?
  2. 我怎么能找到自己在在线文档中需要的信息?
  3. 你能为这种类型的检测提出更好的方法吗?

android internet-connection android-internet

667
推荐指数
6
解决办法
52万
查看次数

在Android应用程序中检查互联网连接的广播接收器

我正在开发一个用于检查互联网连接的Android广播接收器.

问题是我的广播接收器被调用了两次.我希望它只在网络可用时才被调用.如果它不可用,我不希望得到通知.

这是广播接收器

public class NetworkChangeReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(final Context context, final Intent intent) {
        final ConnectivityManager connMgr = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);

        final android.net.NetworkInfo wifi = connMgr
                .getNetworkInfo(ConnectivityManager.TYPE_WIFI);

        final android.net.NetworkInfo mobile = connMgr
                .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

        if (wifi.isAvailable() || mobile.isAvailable()) {
            // Do something

            Log.d("Network Available ", "Flag No 1");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是manifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.broadcastreceiverforinternetconnection"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <receiver android:name=".NetworkChangeReceiver" >
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" …
Run Code Online (Sandbox Code Playgroud)

java android broadcastreceiver android-networking android-wifi

228
推荐指数
12
解决办法
25万
查看次数

检测Android设备是否具有Internet连接

我需要告诉我的设备是否有Internet连接.我找到了许多答案,如:

private boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager 
         = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null;
}
Run Code Online (Sandbox Code Playgroud)

(摘自检测Android上是否有可用的Internet连接.)

但这是不对的,例如,如果我连接到无法访问Internet的无线网络,此方法将返回true ... 是否有方法可以判断设备是否具有Internet连接,而不是仅仅连接什么?

android internet-connection android-internet

133
推荐指数
6
解决办法
10万
查看次数

java.io.IOException:grpc失败了

当我使用call getFromLocationName时,我得到一个IOException,其描述为"grpc failed".

运行的代码

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    try {
        Geocoder geocoder = new Geocoder(getApplicationContext(), Locale.getDefault());
        List<Address> listAdresses = geocoder.getFromLocationName("London", 10);
        Log.i("PlaceInfo", listAdresses.get(0).toString());
    } catch (IOException e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

控制台输出错误:

07-10 12:01:38.781 13712-13712/co.siqve.maplocationdemo W/System.err: java.io.IOException: grpc failed
07-10 12:01:38.781 13712-13712/co.siqve.maplocationdemo W/System.err:     at android.location.Geocoder.getFromLocationName(Geocoder.java:178)
07-10 12:01:38.781 13712-13712/co.siqve.maplocationdemo W/System.err:     at co.siqve.maplocationdemo.MapsActivity.onMapReady(MapsActivity.java:70)
07-10 12:01:38.781 13712-13712/co.siqve.maplocationdemo W/System.err:     at com.google.android.gms.maps.zzaj.zza(Unknown Source)
07-10 12:01:38.781 13712-13712/co.siqve.maplocationdemo W/System.err:     at com.google.android.gms.maps.internal.zzaq.onTransact(Unknown Source)
07-10 12:01:38.781 13712-13712/co.siqve.maplocationdemo W/System.err:     at android.os.Binder.transact(Binder.java:499)
07-10 12:01:38.781 13712-13712/co.siqve.maplocationdemo W/System.err: …
Run Code Online (Sandbox Code Playgroud)

java android google-maps google-geocoder

33
推荐指数
8
解决办法
3万
查看次数

Android:在广播接收器中连接到wifi/3g时检查网络连接返回未连接

我想在broadcastReceiver中检查设备是否已连接.下面是我的代码:

public boolean isOnline(Context context) {
NetworkInfo info = (NetworkInfo) ((ConnectivityManager) context
        .getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();

if (info == null || !info.isConnected()) {
    Log.e("UpdateDataReceiver","info: "+info);
    return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)

我的代码问题: 当BroadcastReceiver在后台触发时(当app在后台时),上面的函数返回false(即使连接了wifi),当app在前台时它返回true.

info:NetworkInfo:type:WIFI [],state:DISCONNECTED/BLOCKED,reason :( unspecified),extra:(none),漫游:false,failover:false,isAvailable:true,isConnectedToProvisioningNetwork:false,simId:0

设备信息:Redmi Note

android

7
推荐指数
2
解决办法
5831
查看次数

如何在Android上获取网络状态更改?

我已经为“ CONNECTIVITY_CHANGE”广播了接收器。当我用这个打印多余的东西时:

intent.getExtras().toString() 
Run Code Online (Sandbox Code Playgroud)

我可以看到,如果禁用WIFI,则会收到2次网络更改。

  1. WIFI已断开
  2. 移动连接

但是,当我尝试使用

NetworkInfo networkInfo = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
Run Code Online (Sandbox Code Playgroud)

它说,此API已被弃用。在那之后,我试图用这个

int networkType = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_TYPE);
NetworkInfo networkInfo = connectivityManager.getNetworkInfo(networkType);
Run Code Online (Sandbox Code Playgroud)

但是,getNetworkInfo也已被弃用。

他们给我的唯一选择是使用getActiveNetworkInfo或getActiveNetwork。

如果使用它,我将获得2次广播,这将给我相同的网络信息。

有没有更好的方法来处理Android中的网络状态?

特别提示:

感谢您的快速回复,但是我没有寻找一种检查是否可以连接互联网的方法。

我需要知道哪个网络已断开连接。我正在寻找网络状态更改。

android networkinfo android-connectivitymanager

0
推荐指数
1
解决办法
1万
查看次数