Android 如果可能的话,如何每x次或每触发一次更新我的位置

Android 如果可能的话,如何每x次或每触发一次更新我的位置,android,firebase,location,Android,Firebase,Location,我正在尝试开发一个应用程序来获取我的位置,并每x小时或当我的手机处于唤醒状态时将其写入firebase 我试着和工作经理讨论这个问题,但为了获得位置,我需要将活动传递给工人类,我不知道如何做到这一点 当我尝试将上下文强制转换为活动时,我得到了多个索引 这是主要的活动 PeriodicWorkRequest uploadWorkRequest = new PeriodicWorkRequest.Builder(UpdateWorker.class,3, TimeUnit.HOURS

我正在尝试开发一个应用程序来获取我的位置,并每x小时或当我的手机处于唤醒状态时将其写入firebase

我试着和工作经理讨论这个问题,但为了获得位置,我需要将活动传递给工人类,我不知道如何做到这一点

当我尝试将上下文强制转换为活动时,我得到了多个索引

这是主要的活动

        PeriodicWorkRequest uploadWorkRequest = new PeriodicWorkRequest.Builder(UpdateWorker.class,3, TimeUnit.HOURS)
                .setConstraints(constraints)
                .setInputData(workerData)
                .build();

        WorkManager.getInstance(getApplicationContext()).enqueue(uploadWorkRequest);
这是我工人班的

public UpdateWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
    super(context, workerParams);
    fusedLocationClient = LocationServices.getFusedLocationProviderClient(context);
    db = FirebaseFirestore.getInstance();
    mAuth = FirebaseAuth.getInstance();
    user = mAuth.getCurrentUser();
    this.context = context;
}

@NonNull
@Override
public Result doWork() {

mAuth = FirebaseAuth.getInstance();
    final FirebaseUser user = mAuth.getCurrentUser();
    fusedLocationClient.getLastLocation()
            .addOnSuccessListener((Activity) context.getApplicationContext(), new OnSuccessListener<Location>() {
                @Override
                public void onSuccess(Location location) {
                    // Got last known location. In some rare situations this can be null.
                    if (location != null) {
                        db.collection(USERS).document(user.getEmail())
                                .set(new LocationDoc(user.getUid(), location.getLatitude(), location.getLongitude()),
                                        SetOptions.merge());
                    }
                }
            });

    return null;
}
public UpdateWorker(@NonNull上下文,@NonNull WorkerParameters workerParams){
超级(上下文、工作参数);
fusedLocationClient=LocationServices.getFusedLocationProviderClient(上下文);
db=FirebaseFirestore.getInstance();
mAuth=FirebaseAuth.getInstance();
user=mAuth.getCurrentUser();
this.context=上下文;
}
@非空
@凌驾
公共成果工作(){
mAuth=FirebaseAuth.getInstance();
最终FirebaseUser=mAuth.getCurrentUser();
fusedLocationClient.getLastLocation()文件
.addOnSuccessListener((活动)上下文.getApplicationContext(),新OnSuccessListener(){
@凌驾
成功时的公共无效(位置){
//已获取最后一个已知位置。在某些罕见情况下,此值可以为空。
如果(位置!=null){
db.collection(USERS).document(user.getEmail())
.set(新位置文档(user.getUid(),location.getLatitude(),location.getLongitude()),
SetOptions.merge());
}
}
});
返回null;
}

}

这里使用的
getApplicationContext()
不是活动上下文-它是全局应用程序上下文,因此不能转换为活动:因此我如何将我的活动传递给我的工人类??一个
activity
是一个
context
所以只需在
getInstance(此)中使用
this
。我尝试了这一点,但它仍然给了我多索引的例外。您还必须修改
addOnSuccessListener
以仅使用
上下文,而不是应用程序上下文。