developers.strava.com/docs/authen…
package com.huawo.module_service.util;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.util.Log;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Headers;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class StravaManager {
private static final String STRAVA_OAUTH_TOKEN_URL = "https://www.strava.com/oauth/token";
private static final String STRAVA_API_URL = "https://www.strava.com/api/v3/activities";
private static final String CLIENT_ID = "133313"; // Strava Client ID
private static final String CLIENT_SECRET = "7b01eda43dfa69efb4fedd9e641f55ecb46e4331"; // Strava Client Secret
public static void requestIntentAuthorize(Context context) {
Uri intentUri = Uri.parse("https://www.strava.com/oauth/mobile/authorize")
.buildUpon()
.appendQueryParameter("client_id", "133313")
.appendQueryParameter("redirect_uri", "https://www.huawo-wear.com")
.appendQueryParameter("response_type", "code")
.appendQueryParameter("approval_prompt", "auto")
.appendQueryParameter("scope", "activity:write,read")
.build();
Intent intent = new Intent(Intent.ACTION_VIEW, intentUri);
context.startActivity(intent);
}
public static void requestAccessToken(String authorizationCode, Callback callback) {
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded; charset=utf-8");
RequestBody body = new FormBody.Builder()
.add("client_id", CLIENT_ID)
.add("client_secret", CLIENT_SECRET)
.add("code", authorizationCode)
.add("grant_type", "authorization_code")
.build();
Request request = new Request.Builder()
.url(STRAVA_OAUTH_TOKEN_URL)
.post(body)
.build();
client.newCall(request).enqueue(callback);
}
public static void uploadActivity(String accessToken, String name, String activityType, String sportType, long startTime, int elapsedSeconds, float distance,Callback callback) {
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded; charset=utf-8");
RequestBody body = new FormBody.Builder()
.add("name", name)
.add("type", activityType)
.add("sport_type", sportType)
.add("start_date_local", getFormattedDate(startTime))
.add("elapsed_time", String.valueOf(elapsedSeconds))
.add("distance", String.valueOf(distance))
.build();
Headers headers = new Headers.Builder()
.add("Authorization", "Bearer " + accessToken)
.build();
Request request = new Request.Builder()
.url(STRAVA_API_URL)
.headers(headers)
.post(body)
.build();
client.newCall(request).enqueue(callback);
}
// 辅助方法,用于格式化日期
private static String getFormattedDate(long timestamp) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.US);
return sdf.format(new Date(timestamp * 1000));
}
}