-2

このサイトで WIFI ネットワークをスキャンするためのこのコードを見ました: http://www.androidsnippets.com/scan-for-wireless-networks

コードをウェブサイトに実装しました。正常に動作しますが、を外部クラスに入れBroadcastReceiverてアクティビティで呼び出すと、ログに記録されますが、常に nullpointer が返されます。

によって呼び出されるメソッドBroadcastReceiverでを呼び出しているので、基本的にはレシーバーからメソッドを開始する必要があります。多分私は間違っています。次に、 を呼び出し、反復して出力します。onCreatewifiReceiver.getWifiManager.startScan()onReceivewifiReceiver.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();
4

1 に答える 1