以下是一段安卓中检测有无使用位置提供者的 Java 代码,如何修改,让其在没有权限时不执行,避免应用崩溃(import androidx.core.content.ContextCompat 与 import android.support.v4.app.ContextCompat; 不可使用)

@Override
public void run() {
    LocationManager locationManager = (LocationManager)mContext.get().getSystemService(Context.LOCATION_SERVICE);
    Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

    if (location != null) {
        boolean isMock = location.isFromMockProvider();
        if (isMock) {
            ToastUtil.showToast(mContext.get(), 'FakeLocation!');
            // 位置来自模拟提供者
            //System.out.println(''+'isMock : return true;');
            //return true;
        } else {
            // 位置不来自模拟提供者
            //System.out.println(''+'isMock : return false;');
            //return false;
        }
    }
}

要在没有权限时不执行该代码段,可以在代码中添加权限检查的逻辑。首先,在 AndroidManifest.xml 文件中添加以下权限:

<uses-permission android:name='android.permission.ACCESS_FINE_LOCATION' />

然后,在代码中添加权限检查的逻辑,例如:

@Override
public void run() {
    if (ContextCompat.checkSelfPermission(mContext.get(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        // 没有位置权限,不执行代码
        return;
    }

    LocationManager locationManager = (LocationManager) mContext.get().getSystemService(Context.LOCATION_SERVICE);
    Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

    if (location != null) {
        boolean isMock = location.isFromMockProvider();
        if (isMock) {
            ToastUtil.showToast(mContext.get(), 'FakeLocation!');
            // 位置来自模拟提供者
            //System.out.println(''+'isMock : return true;');
            //return true;
        } else {
            // 位置不来自模拟提供者
            //System.out.println(''+'isMock : return false;');
            //return false;
        }
    }
}

这样,在没有位置权限时,代码将直接返回,避免应用崩溃。

Android 位置服务权限检查:避免应用因缺少权限而崩溃

原文地址: https://www.cveoy.top/t/topic/hLJC 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录