質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

2回答

5259閲覧

wifi・BluetoothがON又はOFFになった通知が2回来る時がある

takukill

総合スコア23

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

1クリップ

投稿2015/06/04 04:20

編集2022/01/12 10:55

いつもお世話になっております。
wifiとbluetoothの切り替わったタイミングを取得したいのですが、
端末によって、2回来たり1回来たりしていた
なぜか苦戦しています。

取得方法は以下の方法を使用しています。

lang

1import android.bluetooth.BluetoothAdapter; 2import android.content.BroadcastReceiver; 3import android.content.Context; 4import android.content.Intent; 5import android.net.wifi.WifiManager; 6import android.util.Log; 7 8public class TestBroadcastReceiver extends BroadcastReceiver { 9 10 private String TAG = "test"; 11 12 @Override 13 public void onReceive(Context context, Intent intent) { 14 String action = intent.getAction(); 15 16 if (action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) { 17 WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 18 if (wm.getWifiState() == WifiManager.WIFI_STATE_ENABLED || wm.getWifiState() == WifiManager.WIFI_STATE_DISABLED) { 19 Log.v(TAG, "WIFI:" + wm.getWifiState()); 20 } 21 } 22 23 if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) { // BlueTooth 24 BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 25 if (mBluetoothAdapter.getState() == BluetoothAdapter.STATE_ON || mBluetoothAdapter.getState() == BluetoothAdapter.STATE_OFF) { 26 Log.v(TAG, "ブルー:" + mBluetoothAdapter.getState()); 27 } 28 } 29 } 30}

上記方法だと、
1.wifiが変更されたらtrue
2.wifiが接続した、又は、接続を切断したタイミングでtrue
となるはずなのですが、なぜかログが二回出力されることがあります。

回避方法、若しくは、2回来る理由など知っている方がいたら教えてほしいです。
お忙しい中申し訳ありません。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

複数回通知されるのは、IntentのExtraで異なるステータスを
通知しているからではないでしょうか。。。

Wifi
WIFI_STATE_DISABLED, WIFI_STATE_DISABLING,
WIFI_STATE_ENABLED, WIFI_STATE_ENABLING
WIFI_STATE_UNKNOWN

Bluetooth
STATE_OFF, STATE_TURNING_ON, STATE_ON, STATE_TURNING_OFF

投稿2015/06/09 23:14

horohoro

総合スコア490

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takukill

2015/06/10 01:46

遅くなって申し訳ありません。 上記パターンはテスト用に乗っけたソースでも絞っているのですが、連打などすると2回来る時があります…
horohoro

2015/06/10 15:32

「テスト用に乗っけたソース」ということは、Extraのステータスは 見てないということで良いでしょうか。。。 Extraのステータスは、intent発行時のステータス。 WifiManager/BluetoothAdapterは、現在のステータス。 ですから、例えば・・・ BluetoothAdapterの「STATE_TURNING_ON」のintent発行処理時に、 BluetoothAdapterが「STATE_ON」に移行済みであれば、getState()の値は、 「STATE_ON」となるのでは。。。 ちなみに、手元の端末で下記のようにLog出力して、連打すると  Extraの値:連番となる  getState():連番とは限らない(STATE_TURNING_ON/OFFが連続出力する場合あり) となり、getState()だけで判定すると2回連続来るように見えます。 int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1); int prevstate = intent.getIntExtra(BluetoothAdapter.EXTRA_PREVIOUS_STATE, -1); Log.v(TAG, "ブルー:" + mBluetoothAdapter.getState() + "," + state + "," + prevstate);
guest

0

間違っていたらごめんなさい。
Sticky Broadcastだと、Wi-FiなどのState変更時の他に、Receiver登録時にもBroadcastが来るからでしょうか?

投稿2015/06/05 01:52

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takukill

2015/06/10 01:56

遅くなって申し訳ありません Sticky Broadcastを知りませんでした。もっと勉強します。 登録は、Manifestで行っているので、直接的には関係ないかもしれないです。
退会済みユーザー

退会済みユーザー

2015/06/10 06:54

関係ないんですね。 で、あればレシーバのクラスなどでWi-FiやBTの状態を保持して、同じステータスが複数回連続してブロードキャストされても握りつぶすような処理が必要かもしれません。 Wi-Fiなどはチップセットやそのドライバによって挙動が大きく変わる時があります。アプリとしてはそれらの挙動差分を吸収できるように設計・実装したほうが無難です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問