Android Wifi сканирует слишком медленно - PullRequest
0 голосов
/ 16 февраля 2011

Я на начальной стадии разработки приложения, которое должно сканировать точки доступа Wi-Fi в секунду.Сканирующая часть хорошо работает с одним героем HTC, однако моей вкладке galaxy для завершения одного сканирования требуется 6 секунд.Я пишу очень простую программу, постоянно сканирую wifi и записываю, сколько времени занимает одно сканирование.(от wifi.startScan () до получателя получить результаты).В телефоне HTC это 500 мс, а на вкладке Samsung - в среднем 6 с.Интересно, кто-нибудь может помочь мне решить эту проблему.Это из-за того, что Samsung изменил ОС или из-за проблемы с оборудованием?

Программа выглядит следующим образом:

import java.util.Date;
import java.util.List;

import android.app.Activity;
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.Bundle;
import android.util.Log;
import android.widget.TextView;

public class wifiScan extends Activity {

    private class WifiReceiver extends BroadcastReceiver{
      @Override
      public void onReceive(Context c, Intent intent) {
        List<ScanResult> results = wifi.getScanResults();
        Date tempDate=new Date();
        String info=testNumber+" "+(tempDate.getTime()-testDate.getTime())+" "+results.size();
        Log.i("wifiScan", info);    
        wifiText.setText(info);
        testNumber++;
        testDate=new Date();
        wifi.startScan();

        }
    }
    private TextView wifiText;
    private WifiManager wifi;
    private WifiReceiver receiver;
    private Date testDate;
    private static int testNumber=0;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        testNumber=0;

        wifiText = (TextView) findViewById(R.id.wifiText);
        receiver=new WifiReceiver();
        registerReceiver(receiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
        wifi =(WifiManager)getSystemService(Context.WIFI_SERVICE);
        if(!wifi.isWifiEnabled()){
            wifi.setWifiEnabled(true); 
        }
        startScan();
    }
    @Override
    public void onStop(){
        super.onStop();
        finish();
    }
    public void startScan(){
        testDate=new Date();
        wifi.startScan();
    }
}

Информация журнала:

Ответы [ 2 ]

1 голос
/ 17 февраля 2011

Я думаю, что вы видите разницу между пассивным и активным сканированием.Если вы сканируете пассивно, вы должны оставаться не менее 100 мс на каждом канале (возможно, ближе к 200 мс на практике), в то время как при активном сканировании вы можете сканировать намного быстрее.Предположительно, сканирование 6s является пассивным, в то время как сканирование 500 мс активно.

В области регулирования устройству не разрешено передавать, если оно не может определить, какие каналы разрешены, поэтому оно должно сканировать пассивно, пока не получит необходимую информацию,После этого он сможет переключиться на активное сканирование.

0 голосов
/ 13 мая 2011

Если вы хотите активное сканирование, вы можете вызвать wifi.startScanActive ().

...