package com.example.ky.wifiscanner;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.wifi.ScanResult;

import android.net.wifi.WifiManager;
import android.os.Environment;
import android.os.SystemClock;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.method.ScrollingMovementMethod;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

import static android.R.attr.data;
import static java.security.AccessController.getContext;
import static java.sql.DriverManager.println;

public class MainActivity extends AppCompatActivity {
int num=1;
WifiManager wifi;
BroadcastReceiver receiver;
TextView textView;
Button button;
Button button2;
String ess = Environment.getExternalStorageState();
String sdCardPath = null;
ArrayList<String> data = new ArrayList<String>();
String res;
// String first_receive_MAC[]=new String[200];
// float fisrst_receive_frequency[]=new float[200];
// int first_receive_dBm[]=new int[200];
long clicktime;
long starttime;
long finishtime;
long intevertime;
private static final float NS2S=1.0f/1000000000.0f;//나노초를 초 단위로
float time;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// Register Broadcast Receiver
receiver = new WiFiScanReceiver();
registerReceiver(receiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));


if(ess.equals(Environment.MEDIA_MOUNTED)) {
sdCardPath = Environment.getExternalStorageDirectory().getAbsolutePath();


Toast.makeText(this,"SD Card stored in " + sdCardPath, Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this,"SD Card not ready!"+ sdCardPath, Toast.LENGTH_SHORT).show();
}


textView =(TextView)findViewById(R.id.textView);
textView.setMovementMethod(new ScrollingMovementMethod());
button =(Button)findViewById(R.id.button);
button2 =(Button)findViewById(R.id.button2);
wifi=(WifiManager)getSystemService(Context.WIFI_SERVICE);
// if(!wifi.isWifiEnabled())
// wifi.setWifiEnabled(true);


button.setOnClickListener(new View.OnClickListener() {//저장버튼 이벤트 리스너
@Override
public void onClick(View v) { //저장 버튼이 눌렷을경우 데이터 저장.

MediaScanner scanner = MediaScanner.newInstance(MainActivity.this);
scanner.mediaScanning(sdCardPath +"/wifi.txt");

}
});




button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

BackgroundThread thread = new BackgroundThread();
clicktime = System.currentTimeMillis();


thread.start();


}
});


}

public class WiFiScanReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context c, Intent intent) {


List<ScanResult> results = wifi.getScanResults();


finishtime = System.currentTimeMillis() - clicktime;
intevertime = finishtime - starttime;

println(String.valueOf(num) + " " + starttime+" "+finishtime + " / " + intevertime);

num++;
for (int i = 0; i < results.size(); i++) {

ScanResult result = results.get(i);

String bssid = result.BSSID;

String level = String.valueOf(result.level);
String res = bssid + " " + level;

data.add(res);

}
data.add(String.valueOf(num-1) + "================================================");
//Toast.makeText(getApplicationContext(), "스캔완료" + String.valueOf(num - 1), Toast.LENGTH_LONG).show();

File file = new File(sdCardPath);
if (!file.exists()) {
file.mkdirs();
}
try {
FileOutputStream fos = new FileOutputStream(file + "/wifi.txt");

for (int j = 0; j < data.size(); j++) {
// String name=(i+1)+" "+a.get(i)+"\r\n";
String name = data.get(j) + "\r\n";

fos.write(name.getBytes());
}
Toast.makeText(getApplicationContext(), "저장완료", Toast.LENGTH_LONG).show();
fos.close();

} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}


}

}

class BackgroundThread extends Thread {//내부 클래스스

public void run() {


for (int i = 0; i< 20; i++) {
try {

starttime = System.currentTimeMillis() - clicktime;
wifi.startScan();
BackgroundThread.sleep(1000);


}

catch (InterruptedException e) {

}

}
}
}




public void println(String data) {

textView.append(data + "\n");
}




}
스레드를 사용하여 1초마다 와이파이를 스캔하려고 하는데요.. 앱을 실행하면 스캔 주기가 1초 3초3초4초 5초 6초 8초8초 이렇게 일정하지 않게 됩니다. 해결방법이 있나요? ㅠ