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

Android Studio中AVD运行崩溃及FusedLocationApi无法识别问题求助

解决FusedLocationApi无法识别及Pixel 5x(API27)模拟器崩溃问题

看起来你碰到了两个关联的问题:FusedLocationApi类无法识别、无法导入,同时在Pixel 5x(API27)模拟器上运行应用时崩溃。结合你提到的Gradle怀疑点,我来一步步帮你排查修复:

一、搞定FusedLocationApi无法识别的问题

首先得明确:FusedLocationApi在Google Play Services Location库的11.0.0版本之后就被官方弃用了,现在推荐使用FusedLocationProviderClient来替代。你找不到这个类,大概率是依赖配置不对,或者还在使用已经被移除的过时API。

1. 修正App级Gradle依赖

打开你的App模块下的build.gradle(注意是App级别的,不是Project根目录的那个),把定位服务的依赖换成适配API27的稳定版本——API27对应Android 8.1,推荐用17.0.0版本的Play Services Location,避免版本兼容性问题:

dependencies {
    // 替换成这个适配API27的定位依赖
    implementation 'com.google.android.gms:play-services-location:17.0.0'
    // 保留你其他的依赖项...
}

顺便检查下你的android块配置,确保compileSdkVersion和targetSdkVersion都设为27,和模拟器的API版本匹配:

android {
    compileSdkVersion 27
    defaultConfig {
        targetSdkVersion 27
        // 其他配置...
    }
}

2. 替换过时的FusedLocationApi代码

把原来依赖FusedLocationApi的代码,换成FusedLocationProviderClient的实现,给你个适配的示例:

package com.matt.mapapp;

import android.Manifest;
import android.content.pm.PackageManager;
import android.location.Location;
import android.os.Bundle;
import android.os.Looper;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import com.google.android.gms.location.FusedLocationProviderClient;
import com.google.android.gms.location.LocationCallback;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationResult;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.tasks.OnSuccessListener;

public class MapActivity extends AppCompatActivity {

    private FusedLocationProviderClient fusedLocationClient;
    private LocationCallback locationCallback;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_map);

        // 初始化定位客户端
        fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);

        // 先检查权限,API23+需要动态申请
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
                && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            // 申请定位权限
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1001);
            return;
        }

        // 获取最后一次已知位置
        fusedLocationClient.getLastLocation()
                .addOnSuccessListener(this, new OnSuccessListener<Location>() {
                    @Override
                    public void onSuccess(Location location) {
                        if (location != null) {
                            // 这里处理获取到的位置数据,比如更新地图
                        }
                    }
                });

        // 如果需要持续获取位置更新,用LocationCallback
        LocationRequest locationRequest = LocationRequest.create();
        locationRequest.setInterval(10000); // 10秒更新一次
        locationRequest.setFastestInterval(5000); // 最快5秒更新一次
        locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

        locationCallback = new LocationCallback() {
            @Override
            public void onLocationResult(LocationResult locationResult) {
                if (locationResult == null) return;
                for (Location location : locationResult.getLocations()) {
                    // 处理实时更新的位置
                }
            }
        };

        // 开始请求位置更新
        fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper());
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 记得在销毁时移除位置更新,避免内存泄漏
        if (locationCallback != null) {
            fusedLocationClient.removeLocationUpdates(locationCallback);
        }
    }
}

二、排查Pixel 5x(API27)模拟器崩溃问题

应用崩溃大概率和权限、API兼容性或者模拟器配置有关,按下面的步骤逐一排查:

1. 先看崩溃日志(最关键)

打开Android Studio的Logcat窗口,过滤Error级别日志,找到崩溃的堆栈跟踪信息——比如是NullPointerException、SecurityException还是其他异常,这是定位问题的核心。比如如果是权限没申请,会出现SecurityException: "ACCESS_FINE_LOCATION" permission missing的提示。

2. 确认权限配置正确

在AndroidManifest.xml里必须添加这两个定位权限:

<!-- 精确定位权限 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 粗略定位权限 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

如果你的App需要后台定位(API26+),还得加上:

<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

3. 检查模拟器的定位设置

  • 打开模拟器的系统设置,进入位置选项,确保已开启位置服务,并设置为高精度模式。
  • 可以通过模拟器右侧工具栏的Extended Controls(三个点图标)-> Location,手动输入经纬度模拟位置,测试定位功能是否正常。

4. 清理Gradle缓存并重建项目

有时候Gradle缓存会导致依赖加载异常,执行以下步骤:

  • 点击Android Studio顶部的File -> Invalidate Caches / Restart,选择Invalidate and Restart。
  • 重启后点击Build -> Rebuild Project,彻底重建项目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:05:50