안녕하세요 wifi list에 대한 질문이 있어 글을 올립니다!!
현재 wifi list를 가져오기위한 코드를 작성중인데, GPS의 작동 여부에 따라 영향을 받습니다.
테스트 버전은 android 7.0 nugat 입니다.
location에 대한 permission은 명시적으로 확인을 했지만
GPS를 끈 상태에서 wifiScan을 하게되면 result가 empty로 반환됩니다.
몇몇 커뮤니티나 스택오버플로우에서는 구글이 GPS사용을 장려시키기 위해 강제성을 보인다라는 음모론이 있지만...
여전히 구글 공식 레퍼런스에서는 wifi와 관련하여, permission을 명시적으로 얻어야한다는 내용만 기재되어있고
GPS를 켜야한다는 내용은 찾을 수 없습니다.
혹시 현재 구동중인 코드에서 GPS를 끈상태에서 wifilist를 가져오는게 가능한것인지,
가능하다면 예제 코드나 제가 아래 첨부해드린 코드에서 부족한 부분을 집어주시면 감사하겠습니다.
만일 안된다면 이에대한 공식/비공식 문서가 존재하는지 궁급합니다.
+) 추가로 target SDK version을 22이하로 낮추면 정상적으로 작동합니다. 하지만 targetSDK를 낮출수가 없는 상황입니다 ㅠㅠ...
=============================================================================================
Wifi 정보를 읽어오는 부분입니다.
public class WifiScanner {
Context context;
private final static String TAG="wifi_test";
Handler mHandler=new Handler();
private WifiManager wifiManager;
private ConnectivityManager connManager;
private List<ScanResult> scanResult;
private SimpleAdapter adapter;
private ArrayList<HashMap<String,String>> list;
private int scanCount = 0;
String result = "";
StringBuilder sb = new StringBuilder();
public WifiScanner(Context context){
this.context=context;
wifiManager=(WifiManager)this.context.getSystemService(Context.WIFI_SERVICE);
}
private BroadcastReceiver mWifiScanReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if(action.equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)){
getWIFIScanResult();
}else if(action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)){
context.sendBroadcast(new Intent("wifi.ON_NETWORK_STATE_CHANGED"));
}
}
};
public void initWIFIScan(){
wifiManager = (WifiManager)context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
final IntentFilter filter = new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
context.registerReceiver(mWifiScanReceiver, filter);
wifiManager.startScan();
}
public void getWIFIScanResult(){
scanResult = wifiManager.getScanResults();
for (int i = 0; i < scanResult.size(); i++) {
ScanResult result = scanResult.get(i);
Log.d(TAG,(i + 1) + ". SSID : " + result.SSID.toString()
+ "\t\t RSSI : " + result.level + " dBm\n");
}
if(scanResult.size()<1)
wifiManager.startScan();
}
}
=============================================================================================Permission 획득 부분입니다.
private void permissionInit() {
PermissionListener permissionlistener = new PermissionListener() {
@Override
public void onPermissionGranted() {
Toast.makeText(MainActivity.this, "Permission Granted", Toast.LENGTH_SHORT).show();
}
@Override
public void onPermissionDenied(ArrayList<String> deniedPermissions) {
Toast.makeText(MainActivity.this, "Permission Denied\n" + deniedPermissions.toString(), Toast.LENGTH_SHORT).show();
}
};
new TedPermission(this)
.setPermissionListener(permissionlistener)
.setDeniedMessage("If you reject permission,you can not use this service\n\nPlease turn on permissions at [Setting] > [Permission]")
.setPermissions(Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION)
.check();
}