2015-08-13 8 views
5

Projemde bir Haritam var. Wifi yönlendirici konumuna gidiyorum, wifi Listesini tararım ve Operatör2'yi seçip İşaretle'yi seçer.Sonraki başka bir konuma giderim Aynı Önceki İşleç 2'yi toplar (yok), sonra Başka bir yere gidiyorum tekrar tekrar.Aynı wifi operatörü wifi'den nasıl seçilecek?

İlk kez Wifi Operatorunu seçebiliyorum.Sonraki zaman bilmiyorum Önceki seçilmiş Operatör detaylarını kilitleme ve operatör detaylarını tekrar alma. Lütfen bu sorunu nasıl düzelteceğime bakın.

enter image description here

Benim Kod:

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; 
    } 
} 
} 

GÜNCELLEME CEVAP: SharedPreferences için

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

kaydet veriler:

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

SharedPreferences verileri alın: Eğer (varsa) kullanıcının daha önce seçtiği ağ Fi'nizi neyi ısrarlı bir mekanizmadır gerekenleri ben doğru anlamak

SharedPreferences shPref = context.getSharedPreferences(STORED_FILE,Context.MODE_PRIVATE); 
String savedOperator = shPref.getString(STORED_OPERATOR,null); 

Log.e("operator : ", "saved operator is : " + savedOperator); 
+0

Cevabım size yardımcı oldu mu? Değilse, lütfen cevaba bir yorum bırakarak nedenini açıklayın. –

+0

Etkinliğin dışında bir SharedPreferences tutmanıza yardımcı olmak için yanıtı güncelleştirin. Umarım yardımcı olur. –

cevap

2

.

Bunu, SharedPreferences kullanarak yapabilirsiniz. senin onReceive yöntemin başında

, herhangi kaydedilmiş WiFi SSID için uygulamanızın paylaşılan tercihlerini sorgulamak: savedSsid boş olmayan ise

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

, kullanıcının daha önce bir WiFi seçmiştir ve atlayabilirsiniz

0123: En onItemClick bir parçası olarak seçilen WiFi SSID saklamak için

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

yapmanız gereken son şey: En iletişim göstermeden

SharedPreferences hakkında daha fazla bilgi için the Android Developer Guide adresine bakın.

: BroadcastReceiver bağımsız bir sınıf olarak bulunduğu, yani belirli USECASE GÜNCELLEME


, sen şöyle onReceive bir argüman olarak almak Context örneği aracılığıyla SharedPreferences erişmesi gereken

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

Bu satır, satırın her iki yerine de shouldgistirilmelidir:

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

getSharedPreferences (String, int) için documentation'a bakın.

+0

Sorduğun için teşekkürler ... Cevabınız iyidir .. Kodumun üstünde görüyorsunuz. "GetActivity(). GetPreferences (Context.MODE_PRIVATE)" diyemedim çünkü WifiReceiver, BroadcastReceiver' i genişleten ayrı bir sınıf. “GetActivity()” yerine bağlamı aramaya çalışıyorum. – reegan29

+0

WifiReceiver cihazınız bir Aktivitede veya bağımsız bir sınıfta yuvalanmış bir sınıf mı? –

+0

bağımsız sınıf .. Güncellenmiş kodumu gör .. – reegan29