奇妙な問題が発生しています。誰かがwifiアクセスポイントに接続するたびにトリガーすることを目的とした非常に単純なコードがあります。
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でこの変数をチェックし、別のインテントをサービスに送信して、変数をデフォルトの状態にリセットします。ここでは、ローカルフラグも設定します。処理を行うときは、事前にそのフラグを確認して適切に処理するだけです。