Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在活动打开时调用locationRequest,然后在每个间隔_Android_Google Location Services - Fatal编程技术网

Android 在活动打开时调用locationRequest,然后在每个间隔

Android 在活动打开时调用locationRequest,然后在每个间隔,android,google-location-services,Android,Google Location Services,我制作了一个使用用户位置的应用程序 当用户第一次创建帐户时,我希望它读取他的当前位置,然后每60分钟更新一次 我使用了以下代码: private void initGPS(){ mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this); locationRequest = LocationRequest.create(); locationRequest.setPriorit

我制作了一个使用用户位置的应用程序

当用户第一次创建帐户时,我希望它读取他的当前位置,然后每60分钟更新一次

我使用了以下代码:

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分钟更新一次


谢谢

您能发布更多代码吗?在本活动中添加了连接到某个位置的内容