要访问Google Fit API时出现异常 "用户必须登录才能进行此API调用",需要确保用户已经登录到他们的Google账号,并且已经授权了访问Google Fit数据的权限。下面是一个解决方法的代码示例:
dependencies {
implementation 'com.google.android.gms:play-services-fitness:18.0.0'
}
import com.google.android.gms.auth.api.signin.GoogleSignIn;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.fitness.Fitness;
import com.google.android.gms.fitness.data.DataType;
public class MyFitApiService {
private GoogleSignInClient signInClient;
public MyFitApiService() {
GoogleSignInOptions signInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
signInClient = GoogleSignIn.getClient(this, signInOptions);
}
public void checkFitApiAccess() {
GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
if (account == null) {
signIn();
} else {
checkFitPermissions();
}
}
private void signIn() {
Intent signInIntent = signInClient.getSignInIntent();
startActivityForResult(signInIntent, RC_SIGN_IN);
}
private void checkFitPermissions() {
Fitness.getRecordingClient(this, GoogleSignIn.getLastSignedInAccount(this))
.subscribe(DataType.TYPE_STEP_COUNT_DELTA)
.addOnSuccessListener(new OnSuccessListener() {
@Override
public void onSuccess(Void aVoid) {
// 成功访问Google Fit API
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// 访问Google Fit API失败
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_SIGN_IN) {
Task task = GoogleSignIn.getSignedInAccountFromIntent(data);
handleSignInResult(task);
}
}
private void handleSignInResult(Task completedTask) {
try {
GoogleSignInAccount account = completedTask.getResult(ApiException.class);
checkFitPermissions();
} catch (ApiException e) {
Log.e(TAG, "signInResult:failed code=" + e.getStatusCode());
}
}
}
通过以上步骤,你的Android App应该能够成功访问Google Fit API,并且不再出现 "用户必须登录才能进行此API调用" 的异常。