我正在开发一个用于检查互联网连接的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");
}
}
}
这是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" />
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
</intent-filter>
</receiver>
</application>
</manifest>
回答第一个问题:广播接收机被调用两次是因为
您已经添加了两个
>
网络连接更改:
WiFi状态更改:<操作Android:name=“Android.net.WiFi.wifi_state_changed”/>
只需使用一个:
。
它将只响应一个而不是两个动作。有关更多信息,请参见此处。
回答你的第二个问题(如果互联网连接可用,你希望接收者只打一次电话):
你的代码是完美的;只有当互联网可用时才通知。
如果只想检查mobile是否与internet连接,则可以使用此方法检查连接性。
public boolean isOnline(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
//should check null because in airplane mode it will be null
return (netInfo != null && netInfo.isConnected());
}
问题内容: 我正在开发一个用于检查互联网连接的Android广播接收器。 问题是我的广播接收器被调用了两次。我希望只有在网络可用时才能调用它。如果不可用,我不想收到通知。 这是广播接收器 这是manifest.xml 问题答案: 你的第一个问题的答案:你的广播接收器被调用两次是因为 你已经添加了两个 网络连接更改: WiFi状态更改: 只需使用一个: 它将仅响应一个动作,而不是两个。有关更多信息,
如何在Android中检测WIFI连接何时已建立? Android WIFI如何检测特定WIFI连接何时可用 广播接收器不工作(检测wifi是否连接) 还有更多...但可悲的是,我没有找到正确的答案。 我想做的事情是获取用户连接到网络的确切事件,然后得到一个好的方法来检测我是否可以做一个谷歌ping,或者检查是否有连接到互联网(只有WIFI,3G连接是不允许的),因为我现在使用的代码有时会失败..
我需要检查的设备是否有互联网连接,我搜索一些例子,但当我复制和粘贴的代码,我总是得到错误或不推荐的函数。我也不明白我必须把检查连接的方法放在哪里,因为我需要检查viewModel中的internet连接来发出一些请求,而我找到的所有方法都在参数中有上下文,而我无法在viewModel中获得上下文。 我尝试了这段代码,但我不明白我必须把它放在哪里,我得到 有人能给我解释一下怎么开这张支票吗?
我试着从这个答案(被接受的答案)。我可以使用“PING”方法,但用户界面变黑了,因为它说它会阻止用户界面线程。它看起来不太好,令人不安,所以我尝试使用第二种方法“连接到互联网上的套接字”,但我不知道如何使用Kotlin中的类。 这是android studio将Java转换为kotlin的结果 但是我不知道如何使用它。我试过这样做: 它不起作用,导致了一个错误。它说我必须通过“消费者”。 我的问题
问题内容: 当我尝试在iPhone上检查互联网连接时,出现了很多错误。谁能帮我解决这个问题? 代码: 代码错误: 如果无法读取,则错误1表示: “ Int”不可转换为“ SCNetworkReachabilityFlags” 错误2和3: 找不到接受提供的参数的’init’的重载 问题答案: 为了解决注释中提到的4G问题,我已使用@AshleyMills可达性实现作为参考并重写了Swift 3.1
我有一个Android注册应用程序。当移动设备和计算机都连接到同一个wifi上时,它运行良好。但是,如果移动设备的互联网连接关闭,则会出现一条吐司消息 'java.net.连接异常:2500ms后连接到/100.118.242.179(端口80)失败:isConnted失败: ECONNREFUSED(连接被拒绝)'。 如何在移动设备上没有互联网连接的情况下运行该应用程序?