requestLocationUpdates 不适用于 Android 11 和 Android 11 12

发布于 2025-01-16 09:59:48 字数 6556 浏览 2 评论 0原文

我正在尝试调用我的纬度 &手机每5秒的经度数据。 此代码适用于 Android 9 和 10,但不适用于 11 和 12。 初始位置已更新,但后续位置根本未更新。 需要精细和粗略位置权限。可能是什么问题?

            if (!isGPSEnabled && !isNetworkEnabled) {
                lat = 0;
                lon = 0;
            } else {
                this.isGetLocation = true;
                // GPS
                if (isGPSEnabled) {
                    locationManager.requestLocationUpdates(
                            LocationManager.GPS_PROVIDER,
                            0,
                            0, this);

                    if (locationManager != null) {
                        location = locationManager
                                .getLastKnownLocation(LocationManager.GPS_PROVIDER);

                        if(location != null && location.getTime() > Calendar.getInstance().getTimeInMillis() - 5000) {
                            gpsUse = true;
                        }
                        if (location != null) {
                            lat = location.getLatitude();
                            lon = location.getLongitude();
                        }
                    }
                }
                if (isNetworkEnabled) {
                        locationManager.requestLocationUpdates(
                                LocationManager.NETWORK_PROVIDER,
                                0,
                                0, this);
                        if (locationManager != null) {
                            location4 = locationManager
                                    .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                            if(location4 != null && location4.getTime() > Calendar.getInstance().getTimeInMillis() - 5000) {
                                networkUse = true;
                            }
                            if (location4 != null) {
                                lat = location4.getLatitude();
                                lon = location4.getLongitude();

                            }
                        }
                    }
                }
        } catch (Exception e) {
            e.printStackTrace();
        }
  • 我添加了AndroidManifest.xml的代码
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.HanyangHCI.crc_test">

    <!--    <uses-permission android:name="android.permission.INTERNET"/>-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
    <uses-permission
        android:name="android.permission.WRITE_EXTERNAL_STORAGE"
        android:maxSdkVersion="29" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.VIBRATE"/>
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_SERVICE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<!--    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />-->
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission
        android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
        tools:ignore="ScopedStorage" />


    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_hci"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:requestLegacyExternalStorage="true"
        tools:ignore="GoogleAppIndexingWarning">

        <activity android:name=".MainActivity"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name = ".Collecting"
            android:screenOrientation="portrait" />
        <service android:name=".Collecting"
            android:foregroundServiceType="location"/>
        <activity android:name=".Survay"
            android:screenOrientation="portrait"/>
        <activity android:name=".Survay2"
            android:screenOrientation="portrait"/>
        <activity android:name=".PopUp"
            android:theme="@android:style/Theme.Dialog"
            android:excludeFromRecents="true" />
        <service android:name=".BackGroundCollecting"
            android:enabled="true"
            android:stopWithTask="false"
            android:foregroundServiceType="location">
            <intent-filter>
                <action android:name="com.HanyangHCI.crc_test.BackGroundCollecting"/>
            </intent-filter>
        </service>
        <service android:name=".GPSTracker"
            android:foregroundServiceType="location">
            <intent-filter>
                <action android:name="com.HanyangHCI.crc_test.GPSTracker"/>
            </intent-filter>
        </service>

        <receiver android:name="com.HanyangHCI.crc_test.RestartService" android:process=":remote"/>

        <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="com.hanyangHCI.crc_test.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/filepaths" />
        </provider>

    </application>
</manifest>

I'm trying to call my latitude & longitude data of the phone every 5 seconds.
This code worked well for Android 9 and 10, but it is not working for 11 and 12.
The initial location is updated but the following location is not updated at all.
FINE and COARSE location permissions are requested. What could be the problem?

            if (!isGPSEnabled && !isNetworkEnabled) {
                lat = 0;
                lon = 0;
            } else {
                this.isGetLocation = true;
                // GPS
                if (isGPSEnabled) {
                    locationManager.requestLocationUpdates(
                            LocationManager.GPS_PROVIDER,
                            0,
                            0, this);

                    if (locationManager != null) {
                        location = locationManager
                                .getLastKnownLocation(LocationManager.GPS_PROVIDER);

                        if(location != null && location.getTime() > Calendar.getInstance().getTimeInMillis() - 5000) {
                            gpsUse = true;
                        }
                        if (location != null) {
                            lat = location.getLatitude();
                            lon = location.getLongitude();
                        }
                    }
                }
                if (isNetworkEnabled) {
                        locationManager.requestLocationUpdates(
                                LocationManager.NETWORK_PROVIDER,
                                0,
                                0, this);
                        if (locationManager != null) {
                            location4 = locationManager
                                    .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                            if(location4 != null && location4.getTime() > Calendar.getInstance().getTimeInMillis() - 5000) {
                                networkUse = true;
                            }
                            if (location4 != null) {
                                lat = location4.getLatitude();
                                lon = location4.getLongitude();

                            }
                        }
                    }
                }
        } catch (Exception e) {
            e.printStackTrace();
        }
  • I added the code of AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.HanyangHCI.crc_test">

    <!--    <uses-permission android:name="android.permission.INTERNET"/>-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
    <uses-permission
        android:name="android.permission.WRITE_EXTERNAL_STORAGE"
        android:maxSdkVersion="29" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.VIBRATE"/>
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_SERVICE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<!--    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />-->
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission
        android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
        tools:ignore="ScopedStorage" />


    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_hci"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:requestLegacyExternalStorage="true"
        tools:ignore="GoogleAppIndexingWarning">

        <activity android:name=".MainActivity"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name = ".Collecting"
            android:screenOrientation="portrait" />
        <service android:name=".Collecting"
            android:foregroundServiceType="location"/>
        <activity android:name=".Survay"
            android:screenOrientation="portrait"/>
        <activity android:name=".Survay2"
            android:screenOrientation="portrait"/>
        <activity android:name=".PopUp"
            android:theme="@android:style/Theme.Dialog"
            android:excludeFromRecents="true" />
        <service android:name=".BackGroundCollecting"
            android:enabled="true"
            android:stopWithTask="false"
            android:foregroundServiceType="location">
            <intent-filter>
                <action android:name="com.HanyangHCI.crc_test.BackGroundCollecting"/>
            </intent-filter>
        </service>
        <service android:name=".GPSTracker"
            android:foregroundServiceType="location">
            <intent-filter>
                <action android:name="com.HanyangHCI.crc_test.GPSTracker"/>
            </intent-filter>
        </service>

        <receiver android:name="com.HanyangHCI.crc_test.RestartService" android:process=":remote"/>

        <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="com.hanyangHCI.crc_test.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/filepaths" />
        </provider>

    </application>
</manifest>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

也许对你有帮助
https://developer.android.com/training/location/permissions

p/s : 上传一些AndroidManifest的图片

It's maybe helping you
https://developer.android.com/training/location/permissions

p/s: Upload some image of AndroidManifest

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文