私は奇妙な問題を抱えています。私は、誰かがWiFiアクセスポイントに接続するたびに起動するように作られた非常に単純なコードを持っています。Android Backまたはホームボタンを押すと接続が変更されますか?
IntentFilter ConnectedFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
getApplicationContext().registerReceiver(ConnectedToAPReceiver, ConnectedFilter);
private BroadcastReceiver ConnectedToAPReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent)
{
final String action = intent.getAction();
if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION))
{
ConnectivityManager connManager = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo Wifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (Wifi.isConnected())
{
// If we get here, it means that the user has just connected to wifi.
}
}
}
};
このコードは、私が必要とするものに対して非常にうまく機能します。しかし、私は奇妙な事態が発生しています。バックやホームボタンが押されると、放送受信機も起動します。また、アプリケーションをロードすると、これもトリガされます。
これらのボタンを押したことがAndroidで接続の変更を引き起こす原因として表示される理由は誰にも分かりますか?そして、誰もが、これらのボタン押下と有効な接続変更を簡単に区別する方法を知っていますか?
これは一部の作業のおかげで解決策の一部です。
まず、アクティビティクラスとサービスクラスの2つのクラスがあります。私のアクティビティクラスでは、onPauseとonDestroyが呼び出されるたびに、ブロードキャストレシーバを使用してサービスクラスに変数を設定します。 (これらはユーザーがこれらのボタンを押すとトリガーされます)。サービスクラスの受信者はこのインテントを取得し、パブリック変数を設定します。
次に、変数onResumeでこの変数をチェックし、別のインテントをサービスに送信して変数をデフォルト状態にリセットします。ここでも私はローカルフラグを設定します。私が何らかの処理をしているとき、私はそのフラグを事前にチェックし、それを適切に処理するだけです。
非常に正しいコメント:
これらのいくつかの周りのドキュメントは、あなたが何かをする必要があるかどうかを決定するのに役立つかもしれない意図について調べることができますいくつかの追加のものがあり、ここで、超クリアなアレントけど。私はこれを認識し、いくつかの追加チェックを追加しました。もし誰かがこれに興味があれば、私はそれをどのように解決するかを概説するために私の質問を編集しました。 – Dave