Tôi phải gửi chi tiết vị trí hiện tại của mình (lat & long) đến máy chủ định kỳ (Ví dụ: cứ 5 phút một lần). Có cách nào tốt nhất không? Tôi biết cách lấy vị trí hiện tại & cách gửi chi tiết đến máy chủ. Nhưng làm thế nào để tôi lặp lại điều này trong khoảng thời gian định kỳ?Gửi Vị trí Hiện tại đến máy chủ định kỳ trong android
Trả lời
Đăng ký báo thức bằng cách sử dụng AlarmManager
để đánh thức sau 5 phút khi người dùng mở ứng dụng lần đầu tiên. tạo một dịch vụ (tìm vị trí và cập nhật lên máy chủ) để chạy khi báo động thông báo cho ứng dụng của bạn. Sau khi dịch vụ kết thúc công việc, đăng ký báo thức lần nữa để thức dậy sau 5 phút. bằng cách này bạn có thể đạt được nhiệm vụ của mình.
ref
Android: How to periodically send location to a server
http://developer.android.com/reference/android/app/AlarmManager.html
http://developer.android.com/reference/android/app/Service.html
1st Edit - Thêm mẫu mã
Bước 1 - Tạo quản lý báo động và đăng ký báo
AlarmManager alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(Main.this, YourWakefulReceiver.class);
bool flag = (PendingIntent.getBroadcast(Main.this, 0,
intent, PendingIntent.FLAG_NO_CREATE)==null);
/*Register alarm if not registered already*/
if(flag){
PendingIntent alarmIntent = PendingIntent.getBroadcast(Main.this, 0,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
// Create Calendar obj called calendar
/* Setting alarm for every one hour from the current time.*/
int intervalTimeMillis = 1000 * 60 * 60; // 1 hour
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP,
calander.getTimeInMillis(), intervalTimeMillis,
alarmIntent);
}
Bước 2 - Tạo Receiver lớp
public class YourWakefulReceiver extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent service = new Intent(context, SimpleWakefulService.class);
startWakefulService(context, service);
}
}
}
Setp 3 - Tạo lớp Service
public class YourService extends IntentService {
private static String tagName = "YourService";
public SimpleWakefulService() {
super("YourService");
}
@Override
protected void onHandleIntent(Intent intent) {
// Start your location
LocationUtil.startLocationListener();
try {
// Wait for 10 seconds
Thread.sleep(1000*10);
} catch (InterruptedException e) {
}
//Stop location listener
LocationUtil.stopLocationListener();
// upload or save location
uploadGps();
SimpleWakefulReceiver.completeWakefulIntent(intent);
}
}
Bước 4 - Đăng ký dịch vụ và người nhận
<service android:name="com.envision.ghari.services.YourService"></service>
<receiver android:name="com.envision.ghari.receivers.YourWakefulReceiver"></receiver>
Lưu ý: Mã này là hiểu việc triển khai. Nó sẽ không biên dịch.
Tôi muốn điều này câu trả lời là một chút thịt hơn. –
cũng thêm kiểm tra tính khả dụng của Mạng.Nếu mạng không khả dụng thì lưu trữ tọa độ cục bộ và gửi chúng đến máy chủ khi mạng có ở đó – Harsh
có lẽ là cách tốt nhất để bắt đầu .. –
Vì không yêu cầu tương tác giao diện người dùng, bạn nên tạo dịch vụ cho dịch vụ này, dịch vụ sẽ gọi phương thức requestLocationUpdates, trong phương pháp này, chuyển thời gian tối thiểu tham số đến 5 phút.
Sử dụng BroadcastReceiver là lựa chọn tốt để gửi yêu cầu định kỳ.
Here là hướng dẫn sử dụng BroadcastReceiver.
Cách tốt nhất để đánh thức dịch vụ bằng cách sử dụng AlarmManager
và đăng vị trí bạn đến máy chủ.
Tôi đang phát triển một ứng dụng nhận vị trí điện thoại di động cả ngày trong 10 và 15 giây trong một dịch vụ, nó hoạt động tốt nhưng đôi khi phương pháp OnLocationChanged của trình lắng nghe nhà cung cấp mạng ngừng được gọi.
import android.location.Address;
import android.location.Geocoder;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import java.io.IOException;
import java.util.List;
import foodinn.databases.LocationUpdaterDatabase;
public class LocationUpdatesActivity extends AppCompatActivity {
private LocationUpdaterDatabase locationUpdaterDatabase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_location_updates);
locationUpdaterDatabase = new LocationUpdaterDatabase(this, "Locations.db", null, 1);
final Geocoder geocoder = new Geocoder(this);
ListView listView = (ListView) findViewById(R.id.locationUpdatesListView);
listView.setAdapter(new SimpleCursorAdapter(this, R.layout.location_updates_list_view_view, locationUpdaterDatabase.getLocationUpdates(), new String[] {"latitude", "longitude", "whenUpdated"}, new int[] {R.id.listViewTextView1, R.id.listViewTextView2, R.id.listViewTextView3}, SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER));
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
double latitude = Double.valueOf(((TextView) view.findViewById(R.id.listViewTextView1)).getText().toString());
double longitude = Double.valueOf(((TextView) view.findViewById(R.id.listViewTextView2)).getText().toString());
try {
List<Address> addressList = geocoder.getFromLocation(latitude, longitude, 1);
String address = addressList.get(0).getAddressLine(0); // If any additional address line present than only, check with max available address lines by getMaxAddressLineIndex()
String city = addressList.get(0).getLocality();
String state = addressList.get(0).getAdminArea();
String country = addressList.get(0).getCountryName();
String postalCode = addressList.get(0).getPostalCode();
String knownName = addressList.get(0).getFeatureName();
((TextView) view.findViewById(R.id.listViewTextView4)).setText(address + ", " + city + ", " + country);
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
}
Trong khi đoạn mã này có thể giải quyết câu hỏi, [bao gồm giải thích] (http: //meta.stackexchange .com/questions/114762/giải thích-hoàn toàn-dựa trên-câu trả lời) thực sự giúp cải thiện chất lượng bài viết của bạn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho người đọc trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn. –
- 1. Cách định kỳ tìm vị trí gps trong Android
- 2. vị trí hiện tại của gps android
- 3. Định vị vị trí hiện tại trong Android mà không cần GPS
- 4. Cách nhận vị trí hiện tại trong Android
- 5. Đến/zoom với chức năng hiện tại vị trí (MapKit)
- 6. Android Scroller fling đến vị trí cố định
- 7. Dịch vụ nền cần gửi vị trí GPS trên máy chủ
- 8. Đánh dấu Vị trí Hiện tại trên Bản đồ, Android
- 9. Android PagerAdapter, có được vị trí hiện tại
- 10. cách gửi tệp âm thanh từ máy khách Android đến máy chủ servlet
- 11. Định cấu hình vị trí máy chủ TFS trong TFS powertools
- 12. Cách thích hợp để nhận ETA (thời gian đến ước tính) từ bất kỳ vị trí nào đến địa điểm hiện tại của tôi
- 13. Cách tính từ vị trí của tôi đến vị trí đích trong android
- 14. Android gửi yêu cầu gửi đến máy chủ django csrf không
- 15. Phát hiện tính năng cho vị trí: cố định
- 16. Gửi tệp từ máy khách đến máy chủ bằng XMLRPC?
- 17. gửi nhiều tin nhắn từ máy chủ TCP đến máy khách (C sharp tới Android)
- 18. Vòng bi vị trí hiện tại trong SDK iOS
- 19. là phương pháp tốt để gửi dữ liệu 50mb tại một vị trí hoặc bất kỳ cách nào khác để gửi dữ liệu json 50mb tới máy chủ trong Android?
- 20. Gửi video camera từ trình duyệt đến máy chủ
- 21. Cách sao chép từ vị trí hiện tại đến cuối dòng trong vi
- 22. Tìm vị trí của tệp m hiện tại trong MATLAB
- 23. Kiểm tra chức năng Android; gửi vị trí địa lý đến trình giả lập
- 24. Vị trí con trỏ đến cuối văn bản trong uitextview và cuộn đến vị trí
- 25. Vị trí của Nhật ký máy chủ GlassFish
- 26. Xóa từ vị trí hiện tại đến đầu dòng trong các emacs?
- 27. Vị trí để đặt tệp trên máy chủ glassfish
- 28. Gửi AJAX đến máy chủ trước khi tải
- 29. Di chuyển màn hình đến vị trí nhất định
- 30. Lấy dữ liệu định kỳ (bỏ phiếu) từ máy chủ trong Android
Vui lòng kiểm tra điều này, nhiều ứng dụng tương tự và đang hoạt động tốt nhưng tôi cần một số trợ giúp về một số tính năng mà bạn sẽ biết sau khi đọc bài đăng và xin lỗi vì đã đặt câu trả lời này tùy chọn nhận xét. . http://stackoverflow.com/questions/14088095/how-can-i-send-the-gps-and-network-location-cordinates-to-a-server-static-ip/14103445#14103445 – user2010282