Android/WI-FI | Posted by 덩치 2015.05.08 11:13

Wifi 비활성화일 때 스캔하는 방법

펌 OK (출처 표시), 상업적 이용 NO, 컨텐츠 변경 NO



일반적으로 많이 알려진 Wifi Scan 방법은 Wifi 활성화 돼 있을때만 가능하다.


때문에 Wifi Scan이 필요할 때, 사용자의 Wifi를 강제로 Enable 시킨 뒤 스캔을 하고, 스캔이 끝다면 다시 비활성화 시키는


방식으로 많이들 구현한다.


그런데 Android 버전 4.3(SDK 18)부터 추가된 '항상 검색 허용' 설정을 이용하면 Wifi비활성화 상태라


Wifi스캔할 수 있다.




해당 옵션이 활성화 돼 있을때만 위와같은 동작이 가능하다.


소스코드상으로는 해당 설정을 컨트롤 할 수 없으며, 사용자가 직접 설정할 수 있다.



따라서 SDK 버전이 18 이상인지, '항상 검색 허용' 설정이 활성화상태인지 체크를 한 다음


조건을 만족하지 않는다면 기존 방식을 이용하고, 만족한다면 Wifi를 건들지 않고 바로 스캔을 진행할 수 있다.



위 조건을 구현하는 방법은 아래와 같다.


if (Build.VERSION.SDK_INT >= 18) {  //  4.3 버전 이상인지 체크한다.

if (mWM.isScanAlwaysAvailable()) {  //  항상검색 허용 설정이 활성화상태인지 체크한다.

mWM.startScan();  // 바로 스캔 실행

return;

}

}

mWM.setWifiEnabled(true);

// 위 조건을 만족하지 않는다면 Wifi 상태에 변화를 줘서 BroadcastReceiver에 액션이 들어오게 하여 스캔을 진행한다.

// 자세한 방법은 http://biig.tistory.com/14 참조


끝.







펌 OK (출처 표시), 상업적 이용 NO, 컨텐츠 변경 NO



간단하게 아래와 같이 하면 된다.


Bitmap bitmap = BitmapFactory.decodeResource(getApplicationContext().getResources(), R.drawable.share_img);



펌 OK (출처 표시), 상업적 이용 NO, 컨텐츠 변경 NO



비트맵, 파일이 저장될 경로, 저장할 파일명을 넘겨받아서


JPEG 파일로 저장하는 방법이다.


public static void SaveBitmapToFileCache(Bitmap bitmap, String strFilePath, String filename) {


File file = new File(strFilePath);


if (!file.exists())

file.mkdirs();


File fileCacheItem = new File(strFilePath + filename);

OutputStream out = null;


try {

fileCacheItem.createNewFile();

out = new FileOutputStream(fileCacheItem);


bitmap.compress(CompressFormat.JPEG, 100, out);

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

out.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}