You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android(Java)中配置Google Maps Distance Matrix API及依赖添加方法

嘿,我来帮你解决这个问题!其实Google Distance Matrix API是一个RESTful Web服务,你不需要专门的Android专属依赖包,不过有两种常用的集成方式,我给你一步步拆解:

方法一:使用官方Google Maps Services Java客户端(简化调用)

这个官方客户端已经封装了API的调用逻辑,不用自己拼URL和解析复杂的JSON,用起来更省心。

  1. 首先在你的Module级别的app/build.gradle文件中添加依赖:
dependencies {
    // Google Maps Services Java客户端
    implementation 'com.google.maps:google-maps-services:2.2.0'
    // 客户端需要SLF4J日志支持,添加Android版的日志依赖
    implementation 'org.slf4j:slf4j-android:1.7.36'
}
  1. 在代码中调用API(注意:必须在后台线程执行,不能在主线程,否则会触发NetworkOnMainThreadException):
// 初始化API上下文,传入你的密钥
GeoApiContext apiContext = new GeoApiContext.Builder()
        .apiKey("你的Google Distance Matrix API密钥")
        .build();

// 启动后台任务调用API(这里用ExecutorService举例,替代已废弃的AsyncTask)
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(() -> {
    try {
        // 调用Distance Matrix API,传入起点和终点坐标
        DistanceMatrix result = DistanceMatrixApi.getDistanceMatrix(
                apiContext,
                new String[]{"40.712776,-74.005974"}, // 起点坐标(纬度,经度)
                new String[]{"34.052235,-118.243683"}  // 终点坐标
        ).await();

        // 解析返回结果
        if (result.rows != null && result.rows.length > 0) {
            DistanceMatrixRow row = result.rows[0];
            if (row.elements != null && row.elements.length > 0) {
                DistanceMatrixElement element = row.elements[0];
                String readableDistance = element.distance.humanReadable; // 比如"3,945 km"
                long distanceInMeters = element.distance.inMeters; // 米为单位的距离值

                // 回到主线程更新UI(如果需要的话)
                runOnUiThread(() -> {
                    // 在这里把结果显示到你的UI组件上,比如TextView
                    // distanceTextView.setText(readableDistance);
                });
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
        // 处理错误:比如网络异常、密钥无效、API未启用等
    } finally {
        // 记得关闭API上下文,释放资源
        apiContext.shutdown();
        executor.shutdown();
    }
});
方法二:用OkHttp手动发送HTTP请求(轻量灵活)

如果你不想引入额外的Google客户端库,用普通的HTTP请求库直接调用REST接口也是完全可行的,这种方式更轻量,适合需求简单的场景。

  1. 先在Module级别的app/build.gradle中添加OkHttp依赖:
dependencies {
    implementation 'com.squareup.okhttp3:okhttp:4.12.0'
}
  1. 构建请求并发送(同样要在后台线程执行):
OkHttpClient okHttpClient = new OkHttpClient();

// 替换成你的起点、终点和API密钥
String origin = "40.712776,-74.005974";
String destination = "34.052235,-118.243683";
String apiKey = "你的Google Distance Matrix API密钥";

// 构建API请求URL
String requestUrl = "https://maps.googleapis.com/maps/api/distancematrix/json" +
        "?origins=" + origin +
        "&destinations=" + destination +
        "&key=" + apiKey;

Request request = new Request.Builder()
        .url(requestUrl)
        .build();

// 异步发送请求
okHttpClient.newCall(request).enqueue(new Callback() {
    @Override
    public void onFailure(@NonNull Call call, @NonNull IOException e) {
        e.printStackTrace();
        // 请求失败的处理逻辑:比如提示用户网络问题
    }

    @Override
    public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
        if (response.isSuccessful() && response.body() != null) {
            String jsonResponse = response.body().string();

            // 手动解析JSON结果(用Android自带的JSONObject)
            try {
                JSONObject root = new JSONObject(jsonResponse);
                JSONArray rows = root.getJSONArray("rows");
                JSONObject firstRow = rows.getJSONObject(0);
                JSONArray elements = firstRow.getJSONArray("elements");
                JSONObject firstElement = elements.getJSONObject(0);
                JSONObject distanceObj = firstElement.getJSONObject("distance");
                
                String readableDistance = distanceObj.getString("text");
                long distanceInMeters = distanceObj.getLong("value");

                // 回到主线程更新UI
                runOnUiThread(() -> {
                    // 在这里更新你的UI
                });
            } catch (JSONException e) {
                e.printStackTrace();
                // JSON解析错误的处理
            }
        }
    }
});
几个重要的注意事项
  • API密钥配置:确保你在Google Cloud Console中已经启用了Distance Matrix API,并且给密钥设置了合理的限制(比如绑定你的Android应用的SHA-1指纹和包名),防止密钥被滥用。
  • 网络权限:别忘了在AndroidManifest.xml中添加网络权限:
<uses-permission android:name="android.permission.INTERNET" />
  • 主线程限制:所有网络请求必须在后台线程执行,Android不允许在主线程进行网络操作,否则会抛出异常。

内容的提问来源于stack exchange,提问作者Vizard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:35:28