Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get selected same wifi operator from wifi List again and again in Android?

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.

enter image description here

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);
like image 981
reegan29 Avatar asked Oct 31 '22 21:10

reegan29


1 Answers

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).

like image 83
Janus Varmarken Avatar answered Nov 15 '22 05:11

Janus Varmarken