2013-05-28 2 views
3

В моем приложении для Android есть заставка, которая проверяет gps и получает широту и долготу. Когда пользователь просто включит gps и запустит мое приложение, он не будет ждать исправления местоположения. Приложение просто показывает диалоговое окно с ошибкой и завершает работу. Поэтому я вставил некоторый код, чтобы ждать выполнения до широты и долготы больше нуля. Но это не работает. Это просто ждет и ждет. Любая помощь будет оценена.Как подождать мою нить до широты и долготы больше нуля

это мой код

if(gps.getLatitude()==0.0&&gps.getLongitude()==0.0){ 
    while(gps.getLatitude()>0.0&&gps.getLongitude()>0.0){ 
    try { 
    new Thread() { 
    public void run() { 
     try{ 
    // calling background Async task to load Google Places 
    new LoadPlaces().execute(); 
    } 
     catch (Exception e) { 
     Log.e("inside thread", e.getMessage()); 
    } 
                     } 
    }.wait(); 
    } catch (InterruptedException e) { 
// TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
    } 
    } 
    else{ 
// calling background Async task to load Google Places 
new LoadPlaces().execute(); 
    } 
+1

Lat и lng могут быть отрицательными или положительными, может быть! (Gps.getlatitude == 0), как это во время, чего вы ждете от координат из gps? – JRowan

+0

Если lat и lng оба позитивны, ваш цикл while будет продолжать выполнение и ждать – JRowan

+0

, если gps только что включен, значение местоположения равно null, так что значение широты и долготы будет 0.0, потому что оно не может быть нулевым, его тип double –

ответ

2

Ваш UI поток никогда не должен выполнить блокирующий вызов, как Thread.wait(): делать, что будет заморозить всю нить , в результате чего диалоговое окно приложения не отвечает (ANR) (или тупик или завершение). Прочтите руководства для разработчиков Android о Processes and Threads и Keeping Your App Responsive: важно понять, что они покрывают, прежде чем приступать к написанию многопоточного кода.

Затем ознакомьтесь с руководством Making Your App Location-Aware: конкретно Receiving Location Updates. Это объясняет, как получить последнее известное местоположение, если оно есть, и реализовать LocationListener для получения обновлений.

+0

, если я использую другую асинтезу внутри этого блока, чтобы получить место, которое больше 0, будет ли оно лучше? –

+1

Не имеет значения, сколько вы используете «AsyncTask»: все, что имеет значение, - это то, что вы не блокируете внутри потока пользовательского интерфейса, ожидающего какой-либо из них. В этом случае вы, вероятно, не хотите запускать дополнительные задачи: служба определения местоположений уже является отдельным процессом. То, что вам нужно сделать, - создать и зарегистрировать «LocationListener», как описано в этих руководствах, для получения обратных вызовов и обновления вашего пользовательского интерфейса (например, путем закрытия заставки). –

-1

Вы можете использовать LocationListener.onLocationChanged для просмотра местоположения изменения

Смежные вопросы