안드로이드 사용자 질문/답변
(글 수 3,598)
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초 이렇게 일정하지 않게 됩니다. 해결방법이 있나요? ㅠ