このサイトで WIFI ネットワークをスキャンするためのこのコードを見ました: http://www.androidsnippets.com/scan-for-wireless-networks。
コードをウェブサイトに実装しました。正常に動作しますが、を外部クラスに入れBroadcastReceiver
てアクティビティで呼び出すと、ログに記録されますが、常に nullpointer が返されます。
によって呼び出されるメソッドBroadcastReceiver
でを呼び出しているので、基本的にはレシーバーからメソッドを開始する必要があります。多分私は間違っています。次に、 を呼び出し、反復して出力します。onCreate
wifiReceiver.getWifiManager.startScan()
onReceive
wifiReceiver.getListResult
私の質問は次のとおりです。私は何を間違っていますか? それを行う正しい方法はありますか?ウェブで検索したところ、次のようなさまざまな方法で人々がそれを行っているのを見ました。
クラス内にネスト
こちらです
BroacastReceiver receiver=new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
do something
}
};
- または外部クラスを作成して呼び出す
それが機能するかどうかを確認するための私の簡単なテストは、これが私のBroadcastReceiver
クラスです:
public class WifiReceiver extends BroadcastReceiver {
private List<ScanResult> wifiList;
private WifiManager mainWifi;
public void onReceive(Context c, Intent intent) {
mainWifi = (WifiManager) c.getSystemService(Context.WIFI_SERVICE);
wifiList = mainWifi.getScanResults();
}
public List<ScanResult> getListResult(){
return wifiList;
}
public WifiManager getWifiManager(){
return mainWifi;
}
}
マニフェスト ファイルで、既に受信者を宣言し、アクセス許可を与えています。
<receiver android:name=".WifiReceiver">
<intent-filter>
<action android:name="android.net.wifi.SCAN_RESULTS" />
</intent-filter>
</receiver>
そして私の活動のインスタンス化:
WifiReceiver wifiReceiver = new WifiReceiver();