Mục lục:
- Cách cập nhật cấu hình xây dựng của bạn
- siêu. onStop ();}
- FusedLocationApi. requestLocationUpdates (
- trả về null;
Video: Hướng dẫn tự tạo 1 Ứng dụng hoặc Games Android trên ĐT mà không cần biết lập trình & Code v.v 2025
Nhiều ứng dụng Android có thể mang lại lợi ích tốt đẹp cho người dùng của họ bằng cách đưa vị trí vào trải nghiệm người dùng của họ. Cho dù điều đó đơn giản như hiển thị cho người dùng vị trí của họ trên bản đồ hoặc phức tạp hơn như cung cấp thông báo nền dựa trên GPS, việc bổ sung các dịch vụ định vị cho ứng dụng của bạn thường là điều người dùng mong đợi.
Có nhiều cách bạn có thể thêm vị trí vào ứng dụng Android của mình. Trong Lollipop, một số phổ biến nhất là
-
Hiển thị thành phố hiện tại của người dùng hoặc địa chỉ đường phố. Đây được gọi là mã hóa địa lý ngược.
-
Tích cực theo dõi vị trí của người dùng, chẳng hạn như khi hiển thị vị trí của người dùng trên bản đồ.
-
Thiết lập tính địa lý để nhận thông báo khi người dùng đến hoặc rời khỏi vị trí.
-
Theo dõi vị trí của người dùng để thực hiện nhận biết hoạt động và xác định xem họ đang đi bộ, đi xe đạp hay lái xe.
-
Phát hiện xem một người sử dụng đang ở gần một iBeacon bằng cách sử dụng Bluetooth.
Bài viết này chỉ ra cho bạn một trong những cách sử dụng phổ biến nhất của vị trí, đó là để theo dõi vị trí của người dùng và hiển thị địa chỉ đường phố hiện tại của họ tới họ trong TextView.
Bạn cần làm bốn việc để thiết lập vị trí trong ứng dụng của mình:
-
Cập nhật cấu hình xây dựng của bạn.
-
Mở một kết nối với Google Play.
-
Đăng ký cập nhật vị trí.
-
Hiển thị địa chỉ của người dùng.
Cách cập nhật cấu hình xây dựng của bạn
Android có một bộ API vị trí cũ hơn được tích hợp vào hệ điều hành dưới Android. vị trí gói. Các API này không còn được duy trì, vì vậy bạn nên sử dụng API dịch vụ Google Play mới để lấy vị trí của người dùng thay thế.
Để thêm API vị trí của Dịch vụ Google Play vào dự án của bạn, đặt sự phụ thuộc sau vào trong bản xây dựng của bạn. config file:
phụ thuộc (biên dịch ' com. Google. android. gms: play-services-location: 6. 5. 87 ' }
Tiếp theo, thêm thông tin sau vào AndroidManifest của bạn. xml:
" cho phép android ACCESS_COARSE_LOCATION " /> " cho phép android ACCESS_FINE_LOCATION " /> @ integer / google_play_services_version /> Sự cho phép ACCESS_COARSE_LOCATION sử dụng thông tin Wi-Fi và tháp di động, nếu có, để cung cấp cập nhật vị trí gần bằng kích thước của một khối thành phố. Quyền ACCESS_FINE_LOCATION có thể giúp bạn có được thông tin có độ phân giải cao hơn bằng GPS của điện thoại, nhưng tốn kém hơn mức tiêu thụ pin.Nếu ứng dụng của bạn chỉ cần vị trí thô, bạn có thể nghĩ rằng chỉ cần yêu cầu cấp phép ACCESS_COARSE_LOCATION, nhưng hầu hết các ứng dụng đều muốn cả hai quyền. Bạn thường phải yêu cầu cả hai quyền vì bạn sẽ sử dụng LocationProvider gọi là FusedLocationProvider, nó sẽ tự động chọn giữa Wi-Fi, tháp điện thoại di động và các nhà cung cấp vị trí GPS để cung cấp cho bạn độ chính xác tốt nhất với chi phí thấp nhất cho pin của bạn. Nếu bạn biết rằng bạn sẽ không bao giờ cần thông tin vị trí tốt, bạn có thể xem xét xóa quyền ACCESS_FINE_LOCATION, nhưng hãy lưu ý rằng ứng dụng của bạn có thể không hoạt động tốt ở những nơi không có tháp điện thoại di động hoặc truy cập Wi-Fi. Thẻ meta-data là cần thiết bất cứ khi nào bạn sử dụng thư viện Dịch vụ Google Play. Cách mở một kết nối đến Google Play Các API Vị trí khá đơn giản, nhưng để sử dụng chúng, bạn sẽ cần phải thiết lập API Dịch vụ của Google Play và những điều này phức tạp hơn một chút để sử dụng. Để thiết lập kết nối với Dịch vụ Google Play, hãy thêm đoạn mã sau vào hoạt động hoặc đoạn của bạn: // Ứng dụng Google API, cho các dịch vụ định vị GoogleApiClient googleApiClient; @ Xoá bỏ công khai void onCreate (Bundle savedInstanceState) {super. onCreate (savedInstanceState); googleApiClient = new GoogleApiClient. Builder (getActivity ()). addConnectionCallbacks (này). addOnConnectionFailedListener (này). addApi (LocationServices, API). xây dựng(); …} @ Xoá bỏ void onStart () {super. băt đâu();
googleApiClient. kết nối();
} @Chuyển công khai void onStop () {
googleApiClient. ngắt kết nối ();
siêu. onStop ();}
Đoạn mã này tạo một đối tượng GoogleApiClient mới trong onCreate () của bạn để kết nối với Dịch vụ của Google Play, và sau đó nó cố gắng kết nối trong onStart () của bạn và ngắt kết nối trong onStop () của bạn. GoogleApiClient cần một đối tượng gọi lại mà nó có thể thông báo khi nào một kết nối đã được thiết lập, vì vậy bạn cần thêm callbacks vào hoạt động hoặc đoạn của bạn. Bạn có thể thêm callbacks vào TaskEditFragment để hoạt động bất kỳ của đoạn.
ConnectionCallbacks, OnConnectionFailedListener { @Override public void onConnected (Gói kết nốiHint) { // Kết nối với Google Play dịch vụ!
// Đây là nơi bạn sẽ bắt đầu hỏi vị trí
// cập nhật.} @Override public void onConnectionSuspended (nguyên nhân int) { // Kết nối Google Play đã bị gián đoạn. // Vô hiệu hoá bất kỳ thành phần UI nào phụ thuộc vào Google // APIs cho đến khi được gọi onConnected (). // // Ví dụ này không ' t cần phải làm bất cứ điều gì ở đây. @Override public void onConnectionFailed (kết quả ConnectionResult) { // Hàm gọi lại này rất quan trọng để xử lý lỗi // có thể xảy ra khi cố kết nối với > / / Google. // // Nếu ứng dụng của bạn thắng ' t hoạt động bình thường mà không có vị trí // cập nhật, thì nó ' là quan trọng để xử lý kết nối / / lỗi chính xác.Xem // // developer. android. com / google / auth / api-client. html // để biết thêm thông tin về xử lý lỗi khi // kết nối với Google. // // Thông tin vị trí là tùy chọn cho ứng dụng này, do đó / / lỗi kết nối có thể được bỏ qua một cách an toàn ở đây. } } Xin chúc mừng! Bạn đã thiết lập đúng kết nối với Dịch vụ của Google Play sẽ tự động ngắt kết nối khi hoạt động hoặc đoạn của bạn bị dừng. Bước tiếp theo là yêu cầu cập nhật vị trí.Cách đăng ký cập nhật vị trí Bạn đã trải qua phần khó khăn. Sau khi kết nối thành công với Dịch vụ Google Play, bạn có thể bắt đầu nghe bản cập nhật vị trí. Trước tiên bạn cần phải nói với API Vị trí một cách thường xuyên và mức độ chính xác bạn muốn cập nhật vị trí của mình. Nếu bạn phải hiển thị địa điểm hiện tại của người dùng đến họ trên bản đồ, có lẽ bạn sẽ muốn cập nhật rất chính xác và nhanh chóng, để người dùng có thể thấy được nơi họ đang di chuyển. Hầu hết các ứng dụng có thể cần cập nhật thường xuyên ít hơn, và đó là những gì bạn sẽ sử dụng trong ví dụ này. Thêm trường sau đây vào đoạn mã hoặc hoạt động của bạn: // LocationRequest xác định tần suất chúng ta cần vị trí // Cập nhật LocationRequest locationRequest = new LocationRequest (). setInterval (30000). setPriority (LocationRequest. PRIORITY_BALANCED_POWER_ACCURACY); Vị trí này Yêu cầu được thiết lập để yêu cầu cập nhật vị trí mới xấp xỉ 30 giây và để cân bằng độ chính xác tốt với mức tiêu thụ năng lượng khá. Nếu bạn muốn tiêu thụ pin thấp hơn, hãy thử PRIORITY_LOW_POWER hoặc nếu bạn muốn độ chính xác cao hơn, hãy thử PRIORITY_HIGH_ACCURACY. Thậm chí bạn có thể sử dụng PRIORITY_NO_POWER cho các ứng dụng cập nhật rất ít trong nền và chỉ muốn sao chép lại các cập nhật vị trí mà các ứng dụng khác yêu cầu! Kiểm tra LocationRequest trên trang Nhà phát triển Android để biết thêm thông tin về các tùy chọn khác nhau mà bạn có thể sử dụng.
Để bắt đầu lắng nghe các bản cập nhật vị trí, thêm phần sau vào phương thức onConnected () mà bạn vừa tạo:
@Chuyển công khai void onConnected (Bundle connectionHint) {// Liên kết với các dịch vụ của Google Play! // Bắt đầu đăng ký để cập nhật vị tríFusedLocationApi. requestLocationUpdates (
googleApiClient, locationRequest, điều này);
}Yêu cầu FusedLocationApi bắt đầu gửi bản cập nhật vị trí ứng dụng của bạn bằng cách sử dụng LocationRequest mà bạn vừa cấu hình. Để nó hoạt động, tuy nhiên, bạn cần phải cung cấp một đối tượng gọi lại có thể nhận được cập nhật vị trí. Thêm giao diện LocationListener vào hoạt động hoặc đoạn của bạn, sau đó thêm phương thức onLocationChanged () như sau:
lớp công khai TaskEditFragment mở rộng Phần thực hiện Fragment ConnectionCallbacks, OnConnectionFailedListener,
com. Google. android. gms. vị trí. LocationListener
{
@Override public void onLocationChanged (vị trí vị trí cuối cùng) { Toast. makeText (getActivity (), location toString (), Toast. LENGTH_LONG). chỉ();
}}
Nhân đây, nếu bạn quan tâm đến vị trí hiện tại của người dùng và bạn không quan tâm đến việc cập nhật nó, hãy kiểm tra FusedLocationApi.getLastLocation (), loại bỏ sự cần thiết cho giao diện LocationListener. Bây giờ, nếu bạn chạy hoạt động của mình, bạn sẽ thấy thông báo Toast in ra vị trí hiện tại của người dùng. Tuy nhiên, có thể thấy GPS của họ không thực sự hữu ích cho người dùng, vì vậy hãy sử dụng vị trí của họ để tìm ra địa chỉ hiện tại của họ và hiển thị nó cho họ. Cách hiển thị địa chỉ của người dùng Android có một API được gọi là bộ mã hóa địa lý để tìm kiếm địa chỉ của người dùng từ tọa độ GPS của họ (và ngược lại). Nó khá đơn giản để sử dụng. Việc bắt duy nhất là bởi vì nó làm cho một yêu cầu mạng cho Google trên các chủ đề hiện tại, nó vào bạn để đảm bảo rằng bạn chỉ chạy nó trên chủ đề nền (để bạn không gây treo trên thread UI chính trên chậm mạng). Thêm đoạn mã sau vào hoạt động hoặc đoạn: Bộ mã hóa địa lý bằng địa lý; @ Xoá bỏ công khai void onCreate (Bundle savedInstanceState) {super. onCreate (savedInstanceState); … geocoder = new Geocoder (getActivity ());} @Xóa bỏ khoảng trống công khai trên Vị tríChanged (Vị trí Vị trí cuối cùng) {/ / Hỏi google về địa chỉ của vị trí. / / Điều này có thể mất một thời gian, do đó, làm nó trong một AsyncTask. new AsyncTask () {@Gọi địa chỉ doInBackground bảo vệ địa chỉ được bảo vệ (Void [] params) {try {List addresses = geocoder. getFromLocation (vị trí getLatitude (), vị trí getLongitude (), 1); if (địa chỉ! = null && địa chỉ. size ()> 0) địa chỉ trả lại. nhận được (0);
} catch (IOException e) {
// bỏ qua
}
trả về null;
}
// Thực hiện trên thread UI
@Override
protected void onPostExecute (Address address) ( if (address! = Null) { Chuỗi s = địa chỉ. getThoroughfare (); if (s! = Null) Toast. makeText (getActivity (), s, Toast. LENGTH_LONG). chỉ(); } } }. thi hành(); } Mã này thêm trường Geocoder vào hoạt động hoặc đoạn của bạn, khởi tạo nó trong onCreate () và sau đó sử dụng nó trong onLocationChanged () để tìm địa chỉ cho vị trí hiện tại. Sau đó, nó sẽ hiển thị thông báo Toast với "đường cao tốc" cho địa chỉ, ví dụ: "600 West Chicago Avenue. "Đối tượng Address trả về bởi Geocoder rất phong phú với thông tin; hãy kiểm tra javadocs để biết chi tiết về những gì bạn có thể hiển thị.Và với điều đó, bạn có tất cả mọi thứ bạn cần biết về đăng ký địa điểm hiện tại của người dùng từ trong hoạt động hoặc phân đoạn của Android.
