6

Tôi đang sử dụng MapView để hiển thị vị trí hiện tại của người dùng trên Bản đồ. Để cập nhật vị trí trong khi người dùng đang di chuyển, tôi phải lựa chọn:MyLocationOverlay hoặc LocationManager để cập nhật vị trí hiện tại

  • Tôi có thể sử dụng MyLocationOverlay để vẽ vị trí hiện tại và mở rộng nó để cho phép theo dõi vị trí của người dùng khi đang di chuyển và có tùy chỉnh đánh dấu. Vấn đề với MyLocationOverlay là tôi không thể kiểm soát tần suất mà thiết bị yêu cầu vị trí từ GPS. Tôi lo lắng về việc tiêu hao pin ở đây.
  • Tôi có thể sử dụng Trình quản lý vị trí và đăng ký sử dụng requestLocationCập nhật để nhận vị trí từ GPS. Ở đây tôi có nhiều quyền kiểm soát tần suất mà GPS được truy vấn. Tôi có thể treo lên một LocationListener và viết mã trong đó.

Nhưng tôi đã đọc tại đây rằng SO có thể không phải là cách tiếp cận tốt để sử dụng Trình quản lý vị trí và MyLocationOverlay nên được ưu tiên hơn.

Ngoài ra, hãy xem xét ứng dụng của tôi là ứng dụng dựa trên vị trí mà vị trí của người dùng sẽ được theo dõi khi anh ấy di chuyển.

Mọi người có thể đề xuất phương pháp hay nhất để triển khai và có tác động tương đối ít hơn đối với pin.

Lưu ý rằng tôi là người mới bắt đầu trong Android, vì vậy hãy tha thứ cho bất kỳ sai lầm rõ ràng nào.

Cảm ơn bạn trước, andy

+0

Nhà cung cấp GPS có bắt buộc phải không?Ý tôi là bạn muốn chính xác, đúng không? – overbet13

+0

Yup Tôi muốn chính xác. GPS có mức độ ưu tiên thấp hơn vị trí Mạng. Nhưng câu hỏi của tôi vẫn là viết tắt. – andy

+0

Vâng, bạn không thể chính xác và hiệu quả cùng một lúc. Nếu bạn cần thông tin vị trí chính xác, hãy sử dụng biến thể đầu tiên (do chính bạn đề xuất). – overbet13

Trả lời

2

tôi sử dụng ít Fluffy Location - thời gian thư viện, bạn thiết lập của nó để cập nhật hoặc từ xa, thư viện này làm cho một máy thu phát sóng, thực hiện LocationListener, n thông báo cho ứng dụng khi thay đổi vị trí của bạn .

Đơn giản, nhanh chóng, dễ dàng!

Vui lòng tham khảo this liên kết:

Sau khi vị trí thay đổi, cập nhật lớp phủ của bạn trên bản đồ! =)

nếu bạn cần, tôi gửi giải pháp đầy đủ cho các vị trí.

+1

Bạn thân tôi có thể cho tôi biết làm thế nào tôi có thể sử dụng thư viện này? –

1

Sử dụng ít Fluffy Location 1º:

trong Manifest:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-feature android:name="android.hardware.location" android:required="true" /> 
<uses-feature android:name="android.hardware.location.gps" android:required="false" /> 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 


<Application...> 
<service android:name="com.littlefluffytoys.littlefluffylocationlibrary.LocationBroadcastService" /> 

    <receiver android:name="com.littlefluffytoys.littlefluffylocationlibrary.StartupBroadcastReceiver" android:exported="true"> 
     <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     </intent-filter> 
    </receiver> 
    <receiver android:name="com.littlefluffytoys.littlefluffylocationlibrary.PassiveLocationChangedReceiver" android:exported="true" /> 

2º Tạo lớp để mở rộng ứng dụng

public class YourApplication extends Application { 
    public void onCreate(){ 
     super.onCreate(); 
     LocationLibrary.showDebugOutput(true); 
     LocationLibrary.initialiseLibrary(getBaseContext(), 0, 2 * 60 * 1000, "com.yourpackage.broadcastpackage");  
    } 

    public static Context getAppContext() { 
     return ApplicationVexPromoter.context; 
    } 
} 

3º Tạo broadcast receiver

public class Broadcast extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     final LocationInfo locationInfo = (LocationInfo) intent.getSerializableExtra(LocationLibraryConstants.LOCATION_BROADCAST_EXTRA_LOCATIONINFO); 

    } 
} 

Và Sử dụng:

trong hoạt động của bạn:

public class YourActivity extends Activity { 

LocationInfo info; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.id.yourview); 
     info = new LocationInfo(getBaseContext()); 
     double latitude = info.lastLat; 
     double longitude = info.lastLong; 
    } 
} 

Cần nhiều hơn? Please refer this

Làm việc cho tôi!

+0

Tôi đang thêm mã này vào mã của mình, nhưng bộ thu phát sóng không bao giờ được gọi. Tôi không thấy trong mã của bạn ở trên bất kỳ nơi nào tham khảo BroadcastReceiver 'Broadcast'. Bộ đó ở đâu? – Darren