In my Project I have a Map.First I go to the Wifi router position,I scan the wifi List and select Operator2 and Mark it.Next I go to another position gather the Same Previous Operator2 details(don't ), then I go another position repeat it again.
I can able to First Time select the Wifi Operator.Next time I don't know How to lock the Particular previous selected Operator details and get the operator details again.So Please help me how to fix this.
My Code :
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;
}
}
}
UPDATED ANSWER :
private static final String STORED_FILE = "com.package.name.SELECTED_FILE";
private static final String STORED_OPERATOR = "com.package.name.SELECTED_OPERATOR";
Save data to SharedPreferences :
SharedPreferences sharedPref = context.getSharedPreferences(STORED_FILE,Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString(STORED_OPERATOR, operator);
editor.apply();
Get the data from SharedPreferences :
SharedPreferences shPref = context.getSharedPreferences(STORED_FILE,Context.MODE_PRIVATE);
String savedOperator = shPref.getString(STORED_OPERATOR,null);
Log.e("operator : ", "saved operator is : " + savedOperator);
If I understand you correctly, what you need is a mechanism for persisting what WiFi network the user has previously selected (if any).
You can achieve this using SharedPreferences
.
In the beginning of your onReceive
method, you query your app's shared preferences for any saved WiFi SSID:
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
String savedSsid = sharedPref.getString("saved_wifi_ssid", null);
If savedSsid is non-null, the user has previously selected a WiFi, and you can skip showing your dialog:
if (savedSsid != null) {
// Do whatever you need to do with the stored SSID.
// Return from onReceive to avoid displaying your dialog.
return;
}
The last thing you need to do is to store the selected WiFi SSID as part of your 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();
See the Android Developer Guide for more information about SharedPreferences.
UPDATE
For your specific usecase, i.e. the BroadcastReceiver
resides as a standalone class, you need to access SharedPreferences through the Context
instance you receive as an argument in onReceive
like so:
SharedPreferences sharedPref = context.getSharedPreferences("name_for_your_shared_preferences_file", Context.MODE_PRIVATE);
This line should replace both occurrences of the line:
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
See the documentation for getSharedPreferences(String, int).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With