Как получить выбранный же оператор wifi из Wii Список снова и снова в Android?

В моем проекте у меня есть Map.First, я перехожу на позицию маршрутизатора Wi-Fi, я просматриваю список Wi-Fi и выбираю Operator2 и Mark it.Next. Я перехожу на другую позицию, собираю информацию о том же предыдущем операторе2 (не делаю), затем я иду Другая позиция повторяет его снова.

Я могу в первый раз выбрать Wifi Operator.Next time Я не знаю Как заблокировать Частные ранее выбранные данные оператора и получить данные оператора снова. Так что помогите мне, как это исправить.

Введите описание изображения здесь

Мой код:

public class WifiReceiver extends BroadcastReceiver { private WifiManager wifiManager; private PlanMapperActivity viewerActivity; private Context newContext; private String operator; private String macAddress; private int signalStrength; private String wifiMode; private int frequency; private String htMode; private String security; private int channelNumber; private AlertDialog wifiAlertDialog; private ListView wifiListView; private ProgressDialog progress; private Boolean checkWifiSelected; private Boolean checkServayStart; private String operatorName; List<ScanResult> wifiSRList; private static final String WPA2 = "WPA2"; private static final String WEP = "WEP"; private static final String EAP = "EAP"; private static final String STORED_OPERATOR = "com.kenturf.wifiheatmap.SELECTED_OPERATOR"; private int requiredLevel; private int ssidCount; public WifiReceiver(Context ctx,PlanMapperActivity planMapper) { this.viewerActivity = planMapper; this.newContext = ctx; } public WifiReceiver(WifiManager myWifiManager,ProgressDialog wifiProgress,Boolean isWifiSelected,Boolean isSurveyStart) { this.wifiManager = myWifiManager; this.progress = wifiProgress; this.checkWifiSelected = isWifiSelected; this.checkServayStart = isSurveyStart; } @Override public void onReceive(final Context context, Intent intent) { wifiSRList = wifiManager.getScanResults(); if (wifiSRList.size() == 0) { Toast.makeText(context,"wifi List 0",Toast.LENGTH_SHORT).show(); } if (checkWifiSelected) { LayoutInflater wifiLayout = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View wifiView = wifiLayout.inflate(R.layout.dialog_fragment_wifi,null); AlertDialog.Builder wifiDialog = new AlertDialog.Builder(context); wifiDialog.setCancelable(false); wifiDialog.setView(wifiView); wifiAlertDialog = wifiDialog.create(); wifiListView = (ListView)wifiView.findViewById(R.id.user_wifi_detail); } Collections.sort(wifiSRList, new Comparator<ScanResult>() { @Override public int compare(ScanResult lhs, ScanResult rhs) { return (lhs.level > rhs.level ? -1 : (lhs.level == rhs.level ? 0 : 1)); } }); if (checkWifiSelected) { String[] wifiListString = new String[wifiSRList.size()]; for (int i = 0; i < wifiSRList.size(); i++) { wifiListString[i] = (wifiSRList.get(i).SSID); } wifiListView.setAdapter(new ArrayAdapter<>(context, android.R.layout.simple_list_item_1, wifiListString)); wifiAlertDialog.show(); progress.dismiss(); wifiListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { operator = wifiSRList.get(position).SSID; macAddress = wifiSRList.get(position).BSSID; signalStrength = wifiSRList.get(position).level; frequency = wifiSRList.get(position).frequency; final String cap = wifiSRList.get(position).capabilities; final String[] securityModes = {WEP, WPA2, EAP}; for (int i = securityModes.length - 1; i >= 0; i--) { if (cap.contains(securityModes[i])) { security = securityModes[i]; } } setOperator(operator); GetSetClass.wifiOperator = operator; /* error start ..cannot resolved method getPreferences() */ SharedPreferences sharedPref = context.getPreferences(Context.MODE_PRIVATE); // error line SharedPreferences.Editor editor = sharedPref.edit(); editor.putString(STORED_OPERATOR, operator); editor.apply(); /* error end */ operatorName = operator; setMacAddress(macAddress); setSignalStrength(signalStrength); setFrequency(frequency); setSecurity(security); setChannelNumber(convertFrequencyToChannel(frequency)); wifiAlertDialog.dismiss(); checkWifiSelected = false; } }); } if(checkServayStart) { /* error start ..cannot resolved method getPreferences()*/ SharedPreferences shPref = context.getPreferences(Context.MODE_PRIVATE); // error line String savedOperator = shPref.getString(STORED_OPERATOR,null); Log.e("operator : ", "saved operator is : " + savedOperator); /* error end */ if (wifiSRList != null) { ssidCount = wifiSRList.size(); for(int i = wifiSRList.size() - 1; i >= 0; i--) { if (GetSetClass.wifiOperator.equals(wifiSRList.get(i).SSID)) { String requiredOperator = wifiSRList.get(i).SSID; requiredLevel = wifiSRList.get(i).level; context.unregisterReceiver(this); AlertDialog.Builder myBuilder = new AlertDialog.Builder(context); setRequiredLevel(requiredLevel); myBuilder.setTitle("Current Signal"); myBuilder.setMessage("Operator : " + requiredOperator + " \n\nSignal Strength : " + requiredLevel + " dBm"); myBuilder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); myBuilder.show(); } else { Toast.makeText(context,"Operator Mismatch",Toast.LENGTH_SHORT).show(); } } progress.dismiss(); } } } public static int convertFrequencyToChannel(int freq) { if (freq >= 2412 && freq <= 2484) { return (freq - 2412) / 5 + 1; } else if (freq >= 5170 && freq <= 5825) { return (freq - 5170) / 5 + 34; } else { return -1; } } } 

ОБНОВЛЕННЫЙ ОТВЕТ:

 private static final String STORED_FILE = "com.package.name.SELECTED_FILE"; private static final String STORED_OPERATOR = "com.package.name.SELECTED_OPERATOR"; 

Сохранение данных в SharedPreferences:

 SharedPreferences sharedPref = context.getSharedPreferences(STORED_FILE,Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); editor.putString(STORED_OPERATOR, operator); editor.apply(); 

Получить данные из SharedPreferences:

 SharedPreferences shPref = context.getSharedPreferences(STORED_FILE,Context.MODE_PRIVATE); String savedOperator = shPref.getString(STORED_OPERATOR,null); Log.e("operator : ", "saved operator is : " + savedOperator); 

Если я правильно вас понимаю, вам нужен механизм для сохранения той сети WiFi, которую пользователь предварительно выбрал (если есть).

Вы можете добиться этого, используя SharedPreferences .

В начале вашего метода onReceive вы запрашиваете общие настройки своего приложения для любого сохраненного SSID SSID:

 SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); String savedSsid = sharedPref.getString("saved_wifi_ssid", null); 

Если savedSsid не является нулевым, пользователь ранее выбрал WiFi, и вы можете пропустить показ своего диалога:

 if (savedSsid != null) { // Do whatever you need to do with the stored SSID. // Return from onReceive to avoid displaying your dialog. return; } 

Последнее, что вам нужно сделать, это сохранить выбранный SSID WiFi как часть вашего onItemClick :

 wifi_SSID = wifiList.get(position).SSID; // ... other code ... SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); editor.putString("saved_wifi_ssid", wifi_SSID); editor.commit(); 

Дополнительную информацию о SharedPreferences см. В Руководстве разработчика Android .


ОБНОВИТЬ

Для вашего конкретного использования, т. Е. BroadcastReceiver находится в автономном классе, вам нужно получить доступ к SharedPreferences через экземпляр Context вы получаете в качестве аргумента в onReceive следующим образом:

 SharedPreferences sharedPref = context.getSharedPreferences("name_for_your_shared_preferences_file", Context.MODE_PRIVATE); 

Эта строка должна заменить оба вхождения строки:

 SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); 

См. Документацию для getSharedPreferences (String, int).