2010-07-26 27 views
5

Tôi đang gặp khó khăn một chút với LocationListener trong Android. Tôi muốn tạo một ứng dụng sẽ nhận vị trí GPS hiện tại và sau đó ngủ lâu. Một ngày hoặc hơn. Trong khoảng thời gian này tôi muốn biểu tượng thông báo GPS không hiển thị.Tắt biểu tượng GPS khi LocationListener đang ngủ

Những gì tôi có bây giờ, nằm trong onLocationChanged một Thread.sleep (x) nhưng điều này sẽ giữ biểu tượng trong thời gian ngủ. Làm thế nào tôi có thể làm điều này, và là có một cách tiếp cận tốt hơn so với sử dụng Thread.sleep?

Cảm ơn trước

Trả lời

4

Bạn phải tắt Trình quản lý vị trí hoàn toàn cho điều đó. Tôi đã làm điều đó trong ứng dụng của mình, nơi tôi chỉ kiểm tra Vị trí cứ 10 giây một lần, bởi vì tôi phát hiện ra rằng việc tắt tiết kiệm pin nhiều hơn một chút so với min_distance hoặc min_time của LocationManager.

Cái gì như:

// Turning off 
mLocationManager.removeUpdates(gpsListener); 
mLocationManager = null; 

// Turning on again 
mLocationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);    
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, GPS_MINTIME, GPS_MINDISTANCE, gpsListener); 

Biểu tượng này sẽ biến mất cho đến khi LocationManager được bật lại.

+0

Hey Fluffball Vâng tôi cuối cùng đã tìm ra nó, đã làm nó một cách chính xác theo cách bạn mô tả. Tôi cũng biết rằng Thread.sleep là xấu. Đọc về lớp Trình xử lý và cách trì hoãn các tác vụ. Điều này hóa ra kinh khủng kể từ khi tôi kết thúc với chức năng đệ quy. Và kể từ khi tôi có một sự chậm trễ biến, tôi không thể sử dụng phương pháp lặp lại. Cuối cùng tôi bị mắc kẹt với người quản lý báo động, và nó hoạt động như một sự quyến rũ. Cảm ơn bạn đã trả lời :) – Andreas

1

Nếu bạn có lớp phủ, suy nghĩ để vô hiệu hóa các vị trí trên họ quá:

@Override 
protected void onResume() 
{ 
    Log.i("ProjetTEA", "onResumeMain"); 
    if (mLocationListener != null) 
    { 
     mLocationOverlay.enableMyLocation(); 
     mLocationManager = (LocationManager) getApplicationContext().getSystemService(LOCATION_SERVICE); 
     mLocationManager.requestLocationUpdates(mBestProvider, 10000, 2, mLocationListener); 
    } 
    super.onResume(); 
} 

@Override 
protected void onPause() 
{ 
    Log.i("ProjetTEA", "onPauseMain"); 
    mLocationOverlay.disableMyLocation(); 
    mLocationManager.removeUpdates(mLocationListener); 
    mLocationManager = null; 
    super.onPause(); 
} 
Các vấn đề liên quan