這是廣播接收器檢查互聯網連接它顯示「沒有互聯網」吐司兩次,當我斷開WiFi。請幫忙。廣播接收器檢查互聯網連接被稱爲兩次,當我斷開WiFi
InternetDetector.java
package com.hfad.evenit;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.util.Log;
import android.support.v7.app.AlertDialog;
import android.widget.Toast;
/**
* Created by Vicky on 26-Sep-15.
*/
public class InternetDetector extends BroadcastReceiver {
public InternetDetector() {
}
@Override
public void onReceive(Context context, Intent intent) {
boolean isVisible = MyApplication.isActivityVisible();
try {
if (isVisible == true) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
// Check internet connection and accrding to state change the
// text of activity by calling method
if (networkInfo != null && networkInfo.isConnected())
{
Toast.makeText(context, "Internet Available", Toast.LENGTH_SHORT).show();
} else
{
Toast.makeText(context, "No Internet", Toast.LENGTH_SHORT).show();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
AndroidManifest.xml中
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.hfad.evenit" >
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".EnterPhoneNumber"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateVisible" />
<activity
android:name=".EnterVerificationCode"
android:label="@string/title_activity_enter_verification_code"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateVisible" />
<activity
android:name=".GetNameAndEmail"
android:label="@string/title_activity_get_name_and_email"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateVisible" />
<activity
android:name=".Launcher"
android:label="@string/title_activity_launcher"
android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".Home"
android:label="@string/app_name"
android:screenOrientation="portrait"
>
</activity>
<activity
android:name=".SettingsActivity"
android:label="@string/title_activity_settings"
android:screenOrientation="portrait">
</activity>
<receiver
android:name=".InternetDetector"
android:enabled="true" >
<intent-filter>
<!-- Intent filters for broadcast receiver -->
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
</application>
</manifest>
我嘗試了好幾種解決方案,但他們都不工作。
Dude在你的方法'checkNetworkState'中沒有問題,問題是它會被調用兩次,因爲'BroadcastReceiver'被調用兩次,所以它會再次產生兩個Toasts。 – Vicky
不,如果您要檢查網絡的實際狀態,它將不會被調用兩次。是的,廣播將被多次調用,一次用於DISCONNECTING狀態,第二次用於DISCONNECTED。對您作出反應是您的責任。 – jakubbialkowski
@ jakubbialkowsk好吧,想想這個,我打開應用程序,我關掉了我的wifi -'BroadcastReceiver',因爲無線網絡連接斷開了。現在系統會檢查移動數據是否可用,假設它已關閉,然後再次調用BroadcastReceiver。所以'CONNECTED'的狀態將是真實的兩次。如果我對'CONNECTED'狀態做出反應,它將執行兩次。你怎麼看? – Vicky