Android 在活动打开时调用locationRequest,然后在每个间隔
我制作了一个使用用户位置的应用程序 当用户第一次创建帐户时,我希望它读取他的当前位置,然后每60分钟更新一次 我使用了以下代码:Android 在活动打开时调用locationRequest,然后在每个间隔,android,google-location-services,Android,Google Location Services,我制作了一个使用用户位置的应用程序 当用户第一次创建帐户时,我希望它读取他的当前位置,然后每60分钟更新一次 我使用了以下代码: private void initGPS(){ mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this); locationRequest = LocationRequest.create(); locationRequest.setPriorit
private void initGPS(){
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
locationRequest = LocationRequest.create();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval(60 * 60 * 1000);
locationRequest.setFastestInterval(60 * 60 * 1000);
new GpsUtils(this).turnGPSOn( isGPSEnable -> isGPS = isGPSEnable );
locationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
if (locationResult == null) {
return;
}
for (Location location : locationResult.getLocations()) {
if (location != null) {
Lat_Coordinate = location.getLatitude();
Lon_Coordinate = location.getLongitude();
Map<String, Object> user_location = new HashMap<>();
user_location.put( "Lat", Lat_Coordinate );
user_location.put( "Lon", Lon_Coordinate );
db.collection( "Users" ).document( auth.getUid() ).collection( "Location" ).document(auth.getUid()).set( user_location );
if (!isContinue && mFusedLocationClient != null) {
mFusedLocationClient.removeLocationUpdates(locationCallback);
}
}
}
}
};
if (!isGPS) {
Toast.makeText(this, "Please turn on GPS", Toast.LENGTH_SHORT).show();
} else{
isContinue = true;
getLocation();
}
}
private void getLocation() {
if (ActivityCompat.checkSelfPermission(DiscoverActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(DiscoverActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(DiscoverActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION},
1000);
} else {
if (isContinue) {
mFusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, null);
} else {
mFusedLocationClient.getLastLocation().addOnSuccessListener(DiscoverActivity.this, location -> {
if (location != null) {
Lat_Coordinate = location.getLatitude();
Lon_Coordinate = location.getLongitude();
} else {
mFusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, null);
}
});
}
}
}
@SuppressLint("MissingPermission")
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case 1000: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
if (isContinue) {
mFusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, null);
} else {
mFusedLocationClient.getLastLocation().addOnSuccessListener(DiscoverActivity.this, location -> {
if (location != null) {
Lat_Coordinate = location.getLatitude();
Lon_Coordinate = location.getLongitude();
} else {
mFusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, null);
}
});
}
} else {
Toast.makeText(this, "Permission denied", Toast.LENGTH_SHORT).show();
}
break;
}
}
}
private void initGPS(){
mFusedLocationClient=LocationServices.getFusedLocationProviderClient(此);
locationRequest=locationRequest.create();
locationRequest.setPriority(locationRequest.PRIORITY\u高精度);
位置请求设置间隔(60*60*1000);
locationRequest.SetFastTestInterval(60*60*1000);
新的GpsUtils(this).turnGPSOn(isGPSEnable->isGPS=isGPSEnable);
locationCallback=新locationCallback(){
@凌驾
public void onLocationResult(LocationResult LocationResult){
if(locationResult==null){
返回;
}
对于(位置:locationResult.getLocations()){
如果(位置!=null){
Lat_坐标=位置。getLatitude();
Lon_坐标=location.getLongitude();
Map user_location=new HashMap();
用户位置放置(“纬度”,纬度坐标);
用户位置。放置(“Lon”,Lon\u坐标);
db.collection(“Users”).document(auth.getUid()).collection(“Location”).document(auth.getUid()).set(user\u Location);
如果(!isContinue&&mFusedLocationClient!=null){
mFusedLocationClient.RemovelocationUpdate(locationCallback);
}
}
}
}
};
如果(!isGPS){
Toast.makeText(这个“请打开GPS”,Toast.LENGTH_SHORT.show();
}否则{
isContinue=true;
getLocation();
}
}
私有void getLocation(){
if(ActivityCompat.checkSelfPermission(discoverability.this、Manifest.permission.ACCESS\u FINE\u LOCATION)!=PackageManager.permission\u已授予
&&ActivityCompat.checkSelfPermission(DiscoverActivity.this、Manifest.permission.ACCESS\u rough\u LOCATION)!=PackageManager.permission\u provided){
ActivityCompat.requestPermissions(DiscoverActivity.this,新字符串[]{Manifest.permission.ACCESS\u FINE\u LOCATION,Manifest.permission.ACCESS\u rough\u LOCATION},
1000);
}否则{
如果(继续){
mFusedLocationClient.RequestLocationUpdate(locationRequest,locationCallback,null);
}否则{
mFusedLocationClient.getLastLocation().addOnSuccessListener(DiscoverActivity.this,location->{
如果(位置!=null){
Lat_坐标=位置。getLatitude();
Lon_坐标=location.getLongitude();
}否则{
mFusedLocationClient.RequestLocationUpdate(locationRequest,locationCallback,null);
}
});
}
}
}
@SuppressLint(“丢失许可”)
@凌驾
public void onRequestPermissionsResult(int-requestCode,@NonNull-String[]permissions,@NonNull-int[]grantResults){
super.onRequestPermissionsResult(请求代码、权限、授权结果);
开关(请求代码){
案例1000:{
//如果取消请求,则结果数组为空。
如果(grantResults.length>0
&&grantResults[0]==PackageManager.PERMISSION\u已授予){
如果(继续){
mFusedLocationClient.RequestLocationUpdate(locationRequest,locationCallback,null);
}否则{
mFusedLocationClient.getLastLocation().addOnSuccessListener(DiscoverActivity.this,location->{
如果(位置!=null){
Lat_坐标=位置。getLatitude();
Lon_坐标=location.getLongitude();
}否则{
mFusedLocationClient.RequestLocationUpdate(locationRequest,locationCallback,null);
}
});
}
}否则{
Toast.makeText(这是“拒绝许可”,Toast.LENGTH_SHORT).show();
}
打破
}
}
}
此代码每60分钟更新一次位置,但在活动开始时不会立即更新
现在我正在做的是,为了避免代码中的bug,我初始化了位置(为了在firebase中有一个路径),但是当活动开始时,它不会改变我所做的初始化
我想说的是:
是否有一种方法可以使“一次”在活动打开时获取位置,然后使用上面的代码每60分钟更新一次
谢谢您能发布更多代码吗?在本活动中添加了连接到某个位置的内容