0

2つのタブ 'OM' & 'OR'を使用して、タブ付きアクティビティでWiFiスキャンの結果を表示したいとします。 「OM」タブで、SSID ORで始まる「OR」タブデバイスでSSIDがOM &で始まるデバイスをリストしたいとします。 私は、アクティビティpublic class MainActivity extends AppCompatActivity {}で正常に動作するコードを試してみました。ただし、フラグメント内の結果は返されません(nullを返します)。 次のコードを見てください&私は何をしているのか教えてください。 ありがとうございます。タブ付きアクティビティのフラグメントでwifimanager.getscanresults()を使用するにはどうすればよいですか?

public static class OmFragment extends Fragment { 
    ListView listView; 
    private static WifiManager wifiManager; 
    private static WifiReceiver wifiReceiver; 
    private static List<ScanResult> wifiList; 
    ArrayList<String> arrayList = new ArrayList<>(); 
    ArrayAdapter adapter; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_om_layout, container, false); 
     listView = (ListView) view.findViewById(R.id.wifiDeviceList); 
     wifiManager = (WifiManager) getActivity().getApplicationContext().getSystemService(Context.WIFI_SERVICE); 
     wifiReceiver = new WifiReceiver(); 
     if (!wifiManager.isWifiEnabled()) { 
      if (wifiManager.setWifiEnabled(true)) { 
       Toast.makeText(getActivity(), "WIFI enabled.", Toast.LENGTH_SHORT).show(); 
       getActivity().registerReceiver(wifiReceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)); 
       wifiManager.startScan(); 
      } else { 
       Toast.makeText(getActivity(), "Error in WiFi Initialization!!", Toast.LENGTH_SHORT).show(); 
      } 
     } else if (wifiManager.isWifiEnabled()) { 
      getActivity().registerReceiver(wifiReceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)); 
      wifiManager.startScan(); 
     } 
     this.adapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, arrayList); 
     listView.setAdapter(this.adapter); 
     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 
       Toast.makeText(getActivity(), "Selected: " + listView.getItemAtPosition(position), Toast.LENGTH_LONG).show(); 
      } 
     }); 
     return view; 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     try { 
      getActivity().unregisterReceiver(wifiReceiver); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    class WifiReceiver extends BroadcastReceiver { 
     public void onReceive(Context c, Intent intent) { 
      String action = intent.getAction(); 
      if (action.equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) { 
       Toast.makeText(getActivity(), "SCAN_RESULTS_AVAILABLE", Toast.LENGTH_SHORT).show(); 
       wifiList = wifiManager.getScanResults(); 
       Toast.makeText(getActivity(), "WiFi List: " + wifiList, Toast.LENGTH_SHORT).show(); 
       if (wifiList.size() > 0) { 
        int TotalWifiDevices = wifiList.size(); 
        Toast.makeText(getActivity(), "Number of Wifi connections : " + TotalWifiDevices, Toast.LENGTH_SHORT).show(); 
        try { 
         while (TotalWifiDevices >= 0) { 
          TotalWifiDevices--; 
          arrayList.add(wifiList.get(TotalWifiDevices).SSID); 
          adapter.notifyDataSetChanged(); 
         } 
        } catch (Exception e) { 
         Log.w("WiFi Exception: ", e); 
        } 
       } else { 
        Toast.makeText(getActivity(), "No Wifi found.", Toast.LENGTH_SHORT).show(); 
       } 
      } 
     } 
    } 
} 
+0

wifiList = wifiManager.getScanResults(); この部分はnullを返します。どうしてか分かりません。通常のプロジェクト(MainActivity.java内)では、Wi-Fi APのリストを返します。 –

答えて

0

我々は次の権限

uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" 
uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" 

&

場所をオンにするだけでなく、場所の許可を与える必要がありを提供するために、必要な場所私はNaugat上のアプリケーションをしようとしていました。コードは現在動作しています。

関連する問題