Я работаю над приложением, которое загружает карту (как изображение). Я использую настроенное представление для загрузки изображения. Я должен выполнить wifi-сканирование и сохранять результаты, когда пользователь прикасается к карте.wifi scan не выполняется при вызове wifi.startScan() вне MainActivity
Я объявил менеджеру WiFi этот путь:
public static WifiManager wifi;
так, что я могу использовать его в моей настраиваемое представление. Когда я вызываю wifi.startScan();
из настраиваемого представления, он не выполняет проверку. Он работает без ошибок или исключений, но результат сканирования не доступен.
Это код моего радиовещательного приемника:
public class WifiReceiver extends BroadcastReceiver {
/*
* This receiver will set a flag in the main activity to indicate the new scan result has been set
* it will set the new result too.
*
*/
public void onReceive(Context c, Intent intent) {
result=wifi.getScanResults();
Log.d("surveyTool","scanning result set");
}
}
Насколько понимаю, как сканирование работы, когда wifi.startScan()
называется, код внутри onReceiver()
должен быть выполнен, когда результат сканирования доступен. Но этого не происходит.
Может ли кто-нибудь сказать мне, что здесь не так? или что мне делать, чтобы начать сканирование с моего индивидуального представления?
Примечание: Я добавил необходимые разрешения и сканирование работает, если я называю это внутри MainActivity ** EDIT: **
Я зарегистрировал приемник в MainActivity с помощью этого:
receiverWifi = new WifiReceiver();
registerReceiver(receiverWifi, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
Я звоню wifi.startScan()
в onTouch()
функции в моей настраиваемое представление:
@Override
public boolean onTouch(View v, MotionEvent event) {
// the coordinate of the touch point
x=event.getX();
y=event.getY();
try {
touchManager.update(event);
// single point touch
if (touchManager.getPressCount() == 1) {
position.add(touchManager.moveDelta(0)); // to keep the point drawn at the touch location
info.addToStartPoint(touchManager.moveDelta(0));
if((touchManager.moveDelta(0).getX()==0 && touchManager.moveDelta(0).getY()== 0))
{
PreviousPoint= CurrentPoint;
CurrentPoint=info.Map(x, y);
if(CurrentPoint.getX()!=PreviousPoint.getX() && CurrentPoint.getY()!= PreviousPoint.getY())
{
// the point is on the image
if(CurrentPoint.getX()!=-1 && CurrentPoint.getY()!= -1)
{
MainActivity.wifi.startScan();
MainActivity.counter++;
Log.d("surveyTool","touch: "+MainActivity.counter);
MainActivity.location=CurrentPoint;
MainActivity.newLocationAvailable=true;
MainActivity.AddNewFingerprin();
}
// Log.d("surveyTool", " new touch event occurred");
// here do the surveying and other stuff
}
}
}
else {
if (touchManager.getPressCount() == 2) {
Vector2D current = touchManager.getVector(0, 1);
Vector2D previous = touchManager.getPreviousVector(0, 1);
float currentDistance = current.getLength();
float previousDistance = previous.getLength();
if (previousDistance != 0) {
scale *= currentDistance/previousDistance; // for the zoom
info.setZoomFactor(scale);
}// end of != 0
}// end of if ==2
}// end of else
invalidate(); // will cause a redraw
}
catch(Throwable t) {
}
return true;
}
EDIT
Отменить регистрацию приемника в onPause()
, и я зарегистрирую его снова в onResume()
.
Когда я сделал то, что предложил, я продолжал получать сообщение, когда мое приложение перестало работать, хотя я его не запускал. Можешь мне сказать почему? – Alaa
Не знаете об этом Можете ли вы рассказать мне, что вы добавили в свой файл манифеста? –