[解決済み】androidアプリでインターネット接続を確認するためのブロードキャストレシーバー
2022-04-04 09:32:06
質問
インターネット接続を確認するためのandroid放送受信機を開発しています。
問題は、私のブロードキャストレシーバーが2回呼び出されていることです。私はそれがネットワークが利用可能であるときだけ呼び出されるようにしたい。それが利用できない場合、私は通知したくない。
これはブロードキャストレシーバーです
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>
解決方法は?
最初の質問に対する回答 : 放送受信機が2回呼び出されている理由は
を2つ追加しています。
<intent-filter>
-
ネットワーク接続の変更 :
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
-
WiFiの状態の変化。
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
1つでいいんです。
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
.
2つのアクションに反応するのではなく、1つのアクションにしか反応しなくなります。参照 ここで をご覧ください。
2つ目の質問に対する回答 (インターネットに接続できる環境であれば、1回だけ電話をかけるようにしたい場合)。
あなたのコードは完璧です。インターネットが利用可能なときだけ通知します。
アップデイト
携帯電話がインターネットに接続されているかどうかを確認したい場合、この方法で接続を確認することができます。
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());
}
関連
-
[解決済み] Javaで拡張子なしのファイル名を取得する方法は?
-
[解決済み] JVMフラグCMSClassUnloadingEnabledは、実際に何をするのですか?
-
[解決済み] java.lang.ClassCastException: java.util.Arrays$ArrayList は java.util.ArrayList にキャストできません。
-
[解決済み] javascriptでExpression言語を使うには?
-
[解決済み] javax.mail.MessagingException: SMTPホストに接続できませんでしたか?
-
[解決済み] JavaにおけるMouseListenerとMouseAdapterの違いについて
-
[解決済み] スリーピング中のスレッドが割り込まれ、データベースへの接続が失われる
-
[解決済み] ヘッドリカーシオンとテールリカーシオンの違い [重複]について
-
[解決済み] Androidでインターネット接続を確認するには?InetAddressがタイムアウトしない
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ストリングビルダー.イコール Java
-
[解決済み] この配列の中の数字を入れ替えるには、何が足りないのでしょうか?ジャバ
-
[解決済み] このフォーマット(Tue Jul 13 00:00:00 CEST 2010)の日付をJavaの日付に変換する方法(文字列はalfrescoのプロパティに由来しています)
-
[解決済み] double 型を Int 型に変換、切り捨て
-
[解決済み] raw 型のメンバへのアンチェックの呼び出し
-
[解決済み] 1行目2列目でBEGIN_ARRAYを期待したが、BEGIN_OBJECTだった。
-
[解決済み] eclipseからTomcatに物理的に発行されるmyjspはどこにあるのでしょうか?
-
[解決済み] x--やx++はここで何をするのですか?
-
[解決済み] プログラムによる放送受信機の登録
-
[解決済み] Googleマップのような位置情報ダイアログを表示するには?