Java 在android中保存当前位置
我有一个问题,我更新我的位置后,每10秒。我想把我的起始位置也存储在firebase上。。。。我无法理解如何存储起始点,因为firebase正在更新。。。这是我的密码Java 在android中保存当前位置,java,android,firebase,save,location,Java,Android,Firebase,Save,Location,我有一个问题,我更新我的位置后,每10秒。我想把我的起始位置也存储在firebase上。。。。我无法理解如何存储起始点,因为firebase正在更新。。。这是我的密码 i am having an issue that i am updating my location after every 10 sec. i want to store my starting position as well on firebase .... i cant understand how to store
i am having an issue that i am updating my location after every 10 sec. i want to store my starting position as well on firebase .... i cant understand how to store the starting point because the firebase is updating ... here is my code
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.app.Activity;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.content.Context;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.iid.FirebaseInstanceId;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
public class Location_activity extends Activity implements LocationListener , ScheduledExecutorService{
private TextView latituteField, longitudeField;
private LocationManager lm;
private String provider;
private Button startbtn , cancelbtn;
DatabaseReference mDatabaseref;
FirebaseUser current_user;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_location_activity);
latituteField = (TextView) findViewById(R.id.TextView02);
longitudeField = (TextView) findViewById(R.id.TextView04);
startbtn = (Button) findViewById(R.id.btn_start);
cancelbtn = (Button) findViewById(R.id.btn_cancel);
startbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(5);
scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
public void run() {
lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Location myLocation = null;
if (lm != null) {
if (ActivityCompat.checkSelfPermission(Location_activity.this,
android.Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(Location_activity.this,
android.Manifest.permission.ACCESS_COARSE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
return;
}
myLocation = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (myLocation == null) {
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_COARSE);
String provider = lm.getBestProvider(criteria, true);
myLocation = lm.getLastKnownLocation(provider);
}
if (myLocation == null) {
myLocation = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
}
if (myLocation != null){
System.out.println("Provider " + provider + " has been selected.");
onLocationChanged(myLocation);
}
}
}
}, 1, 10, TimeUnit.SECONDS);
cancelbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
scheduleTaskExecutor.shutdown();
}
});
}
});
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onPause() {
super.onPause();
lm.removeUpdates(this);
}
@Override
public void onLocationChanged(Location location) {
double lat = (double) (location.getLatitude());
double lng = (double) (location.getLongitude());
current_user = FirebaseAuth.getInstance().getCurrentUser();
String uid = current_user.getUid();
mDatabaseref = FirebaseDatabase.getInstance().getReference().child("location").child(uid);
String device_token = FirebaseInstanceId.getInstance().getToken();
HashMap<String, String> userMap = new HashMap<>();
userMap.put("latitude", String.valueOf(lat));
userMap.put("longitude" , String.valueOf(lng));
userMap.put("device_token", device_token);
mDatabaseref.setValue(userMap).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Toast.makeText(getApplicationContext() , "Location updated" , Toast.LENGTH_SHORT ).show();
}
});
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
Toast.makeText(this, "Enabled new provider " + provider,
Toast.LENGTH_SHORT).show();
}
@Override
public void onProviderDisabled(String provider) {
Toast.makeText(this, "Disabled provider " + provider,
Toast.LENGTH_SHORT).show();
}
@NonNull
@Override
public ScheduledFuture<?> schedule(@NonNull Runnable command, long delay, @NonNull TimeUnit unit) {
return null;
}
@NonNull
@Override
public <V> ScheduledFuture<V> schedule(@NonNull Callable<V> callable, long delay, @NonNull TimeUnit unit) {
return null;
}
@NonNull
@Override
public ScheduledFuture<?> scheduleAtFixedRate(@NonNull Runnable command, long initialDelay, long period, @NonNull TimeUnit unit) {
return null;
}
@NonNull
@Override
public ScheduledFuture<?> scheduleWithFixedDelay(@NonNull Runnable command, long initialDelay, long delay, @NonNull TimeUnit unit) {
return null;
}
@Override
public void shutdown() {
}
@NonNull
@Override
public List<Runnable> shutdownNow() {
return null;
}
@Override
public boolean isShutdown() {
return false;
}
@Override
public boolean isTerminated() {
return false;
}
@Override
public boolean awaitTermination(long timeout, @NonNull TimeUnit unit) throws InterruptedException {
return false;
}
@NonNull
@Override
public <T> Future<T> submit(@NonNull Callable<T> task) {
return null;
}
@NonNull
@Override
public <T> Future<T> submit(@NonNull Runnable task, T result) {
return null;
}
@NonNull
@Override
public Future<?> submit(@NonNull Runnable task) {
return null;
}
@NonNull
@Override
public <T> List<Future<T>> invokeAll(@NonNull Collection<? extends Callable<T>> tasks) throws InterruptedException {
return null;
}
@NonNull
@Override
public <T> List<Future<T>> invokeAll(@NonNull Collection<? extends Callable<T>> tasks, long timeout, @NonNull TimeUnit unit) throws InterruptedException {
return null;
}
@NonNull
@Override
public <T> T invokeAny(@NonNull Collection<? extends Callable<T>> tasks) throws InterruptedException, ExecutionException {
return null;
}
@Override
public <T> T invokeAny(@NonNull Collection<? extends Callable<T>> tasks, long timeout, @NonNull TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {
return null;
}
@Override
public void execute(@NonNull Runnable command) {
}
}
我有一个问题,我更新我的位置后,每10秒。我想把我的起始位置也存储在firebase上。。。。我无法理解如何存储起始点,因为firebase正在更新。。。这是我的密码
i am having an issue that i am updating my location after every 10 sec. i want to store my starting position as well on firebase .... i cant understand how to store the starting point because the firebase is updating ... here is my code
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.app.Activity;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.content.Context;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.iid.FirebaseInstanceId;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
public class Location_activity extends Activity implements LocationListener , ScheduledExecutorService{
private TextView latituteField, longitudeField;
private LocationManager lm;
private String provider;
private Button startbtn , cancelbtn;
DatabaseReference mDatabaseref;
FirebaseUser current_user;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_location_activity);
latituteField = (TextView) findViewById(R.id.TextView02);
longitudeField = (TextView) findViewById(R.id.TextView04);
startbtn = (Button) findViewById(R.id.btn_start);
cancelbtn = (Button) findViewById(R.id.btn_cancel);
startbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(5);
scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
public void run() {
lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Location myLocation = null;
if (lm != null) {
if (ActivityCompat.checkSelfPermission(Location_activity.this,
android.Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(Location_activity.this,
android.Manifest.permission.ACCESS_COARSE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
return;
}
myLocation = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (myLocation == null) {
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_COARSE);
String provider = lm.getBestProvider(criteria, true);
myLocation = lm.getLastKnownLocation(provider);
}
if (myLocation == null) {
myLocation = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
}
if (myLocation != null){
System.out.println("Provider " + provider + " has been selected.");
onLocationChanged(myLocation);
}
}
}
}, 1, 10, TimeUnit.SECONDS);
cancelbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
scheduleTaskExecutor.shutdown();
}
});
}
});
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onPause() {
super.onPause();
lm.removeUpdates(this);
}
@Override
public void onLocationChanged(Location location) {
double lat = (double) (location.getLatitude());
double lng = (double) (location.getLongitude());
current_user = FirebaseAuth.getInstance().getCurrentUser();
String uid = current_user.getUid();
mDatabaseref = FirebaseDatabase.getInstance().getReference().child("location").child(uid);
String device_token = FirebaseInstanceId.getInstance().getToken();
HashMap<String, String> userMap = new HashMap<>();
userMap.put("latitude", String.valueOf(lat));
userMap.put("longitude" , String.valueOf(lng));
userMap.put("device_token", device_token);
mDatabaseref.setValue(userMap).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Toast.makeText(getApplicationContext() , "Location updated" , Toast.LENGTH_SHORT ).show();
}
});
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
Toast.makeText(this, "Enabled new provider " + provider,
Toast.LENGTH_SHORT).show();
}
@Override
public void onProviderDisabled(String provider) {
Toast.makeText(this, "Disabled provider " + provider,
Toast.LENGTH_SHORT).show();
}
@NonNull
@Override
public ScheduledFuture<?> schedule(@NonNull Runnable command, long delay, @NonNull TimeUnit unit) {
return null;
}
@NonNull
@Override
public <V> ScheduledFuture<V> schedule(@NonNull Callable<V> callable, long delay, @NonNull TimeUnit unit) {
return null;
}
@NonNull
@Override
public ScheduledFuture<?> scheduleAtFixedRate(@NonNull Runnable command, long initialDelay, long period, @NonNull TimeUnit unit) {
return null;
}
@NonNull
@Override
public ScheduledFuture<?> scheduleWithFixedDelay(@NonNull Runnable command, long initialDelay, long delay, @NonNull TimeUnit unit) {
return null;
}
@Override
public void shutdown() {
}
@NonNull
@Override
public List<Runnable> shutdownNow() {
return null;
}
@Override
public boolean isShutdown() {
return false;
}
@Override
public boolean isTerminated() {
return false;
}
@Override
public boolean awaitTermination(long timeout, @NonNull TimeUnit unit) throws InterruptedException {
return false;
}
@NonNull
@Override
public <T> Future<T> submit(@NonNull Callable<T> task) {
return null;
}
@NonNull
@Override
public <T> Future<T> submit(@NonNull Runnable task, T result) {
return null;
}
@NonNull
@Override
public Future<?> submit(@NonNull Runnable task) {
return null;
}
@NonNull
@Override
public <T> List<Future<T>> invokeAll(@NonNull Collection<? extends Callable<T>> tasks) throws InterruptedException {
return null;
}
@NonNull
@Override
public <T> List<Future<T>> invokeAll(@NonNull Collection<? extends Callable<T>> tasks, long timeout, @NonNull TimeUnit unit) throws InterruptedException {
return null;
}
@NonNull
@Override
public <T> T invokeAny(@NonNull Collection<? extends Callable<T>> tasks) throws InterruptedException, ExecutionException {
return null;
}
@Override
public <T> T invokeAny(@NonNull Collection<? extends Callable<T>> tasks, long timeout, @NonNull TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {
return null;
}
@Override
public void execute(@NonNull Runnable command) {
}
}
导入android.content.pm.PackageManager;
导入android.os.Bundle;
导入android.app.Activity;
导入android.support.annotation.NonNull;
导入android.support.v4.app.ActivityCompat;
导入android.content.Context;
导入android.location.Criteria;
导入android.location.location;
导入android.location.LocationListener;
导入android.location.LocationManager;
导入android.view.view;
导入android.widget.Button;
导入android.widget.TextView;
导入android.widget.Toast;
导入com.google.android.gms.tasks.OnCompleteListener;
导入com.google.android.gms.tasks.Task;
导入com.google.firebase.auth.FirebaseAuth;
导入com.google.firebase.auth.FirebaseUser;
导入com.google.firebase.database.DatabaseReference;
导入com.google.firebase.database.FirebaseDatabase;
导入com.google.firebase.iid.FirebaseInstanceId;
导入java.util.Collection;
导入java.util.HashMap;
导入java.util.List;
导入java.util.concurrent.Callable;
导入java.util.concurrent.ExecutionException;
导入java.util.concurrent.Executors;
导入java.util.concurrent.Future;
导入java.util.concurrent.ScheduledExecutorService;
导入java.util.concurrent.ScheduledFuture;
导入java.util.concurrent.TimeUnit;
导入java.util.concurrent.TimeoutException;
公共类Location_活动扩展活动实现LocationListener、ScheduledExecutorService{
私有文本视图latituteField、LONGTITUTEFIELD;
私人位置经理lm;
私有字符串提供者;
专用按钮startbtn、cancelbtn;
数据库引用mDatabaseref;
FirebaseUser当前用户;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u location\u activity);
latituteField=(TextView)findViewById(R.id.TextView02);
longitudeField=(TextView)findViewById(R.id.TextView04);
startbtn=(按钮)findViewById(R.id.btn\U start);
cancelbtn=(按钮)findViewById(R.id.btn\u cancel);
startbtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
最终ScheduledExecutorService scheduleTaskExecutor=Executors.newScheduledThreadPool(5);
scheduleTaskExecutor.scheduleAtFixedRate(新的可运行(){
公开募捐{
lm=(LocationManager)getSystemService(Context.LOCATION\u服务);
位置myLocation=null;
如果(lm!=null){
如果(ActivityCompat.checkSelfPermission(位置)\u activity.this,
android.Manifest.permission.ACCESS\u FINE\u位置)
!=PackageManager.PERMISSION\u已授予和&ActivityCompat.checkSelfPermission(位置\u activity.this,
android.Manifest.permission.ACCESS\u\u位置)
!=PackageManager.权限(已授予){
返回;
}
myLocation=lm.getLastKnownLocation(LocationManager.GPS\U提供程序);
if(myLocation==null){
标准=新标准();
标准.设定精度(标准.精度\u粗略);
字符串提供程序=lm.getBestProvider(条件为true);
myLocation=lm.getLastKnownLocation(提供者);
}
if(myLocation==null){
myLocation=lm.getLastKnownLocation(LocationManager.NETWORK\u提供程序);
}
if(myLocation!=null){
System.out.println(“已选择提供程序”+提供程序+”);
onLocationChanged(我的位置);
}
}
}
},1,10,时间单位为秒);
cancelbtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
scheduleTaskExecutor.shutdown();
}
});
}
});
}
@凌驾
受保护的void onResume(){
super.onResume();
}
@凌驾
受保护的void onPause(){
super.onPause();
lm.移除更新(本);
}
@凌驾
已更改位置上的公共无效(位置){
double lat=(double)(location.getLatitude());
double lng=(double)(location.getLongitude());
current_user=FirebaseAuth.getInstance().getCurrentUser();
字符串uid=current_user.getUid();
mDatabaseref=FirebaseDatabase.getInstance().getReference().child(“位置”).child(uid);
字符串device_token=FirebaseInstanceId.getInstance().getToken();
HashMap userMap=新的HashMap();
userMap.put(“纬度”,String.valueOf(lat));
userMap.put(“经度”,String.valueOf(lng));
put(“设备令牌”,设备令牌);
mDatabaseref.setValue(userMap).addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共无效(@NonNull T
if(!isStartingPointWritten) {
// write your userMap to the database
isStartingPointWritten = true;
}