마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

android wifi list 가져오기 질문입니다.

0 추천

안녕하세요 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();

    }

 

마네킹 (200 포인트) 님이 2017년 12월 28일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...