Google Awareness API не может зарегистрировать забор местоположения (Fence API) Kotlin

Я пытался использовать Google Awareness API (Fence API), и я могу зарегистрировать любой другой вид ограждения — наушники, ходьбу — и мой широковещательный приемник, который обрабатывает обратные вызовы от изменений состояния ограждения, работает, но продолжает получать com.google.android .gms.common.api.ApiException: 7503 при регистрации забора местоположения

Искал похожие сообщения о переполнении стека и убедился, что не отключил местоположение своих телефонов - ниже приведен код, который я пытался использовать только для типов ограждений местоположения.

Манифест:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.location_try_dos">

    <!-- Needed For Awarness - Fence API -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />
    <uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" />


    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <receiver
            android:name=".FenceReciever"
            android:enabled="true"
            android:exported="false"></receiver>

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

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <meta-data
            android:name="com.google.android.awareness.API_KEY"
            android:value="MYKEY" />
    </application>

</manifest>

MainActivity.kt

  override fun onStart() {
        super.onStart()
        Timber.i("onStart Called")
        //there was two optations for manifest
        if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION)
                == PackageManager.PERMISSION_GRANTED){

            Toast.makeText(this,
                "Have Permissions Needed",
                Toast.LENGTH_LONG).show()

            val locationFence:AwarenessFence = LocationFence.entering(37.4220,-122.0841, 1609.0)


            Awareness.getFenceClient(this).updateFences(FenceUpdateRequest.Builder()
                .addFence(FENCE_KEY, locationFence,
                    PendingIntent.getBroadcast(
                        this,
                        FENCE_INTENT_ID,
                        Intent(this,FenceReciever::class.java),
                        PendingIntent.FLAG_UPDATE_CURRENT))
                .build())
                .addOnSuccessListener { Log.i("FENCE API", "Fence was successfully registered.") }
                .addOnFailureListener { e -> Log.e("FENCE API", "Fence could not be registered: $e") }
        }
    }

person user14111584    schedule 15.08.2020    source источник
comment
вы используете эмулятор или реальное устройство? в эмуляторе есть сервисы гугл плей?   -  person tamtom    schedule 16.08.2020
comment
тестирование как на реальном, так и на эмуляторе - у обоих есть сервисы Google Play   -  person user14111584    schedule 16.08.2020


Ответы (1)


На случай, если у кого-то тоже возникнет эта проблема.

Имейте Android 10 API 29 на физическом устройстве. Если вы тестируете телефон/эмулятор на Android 29, вам нужно добавить разрешение ACCESS_BACKGROUND_LOCATION в манифест и разрешить приложению постоянно получать ваше местоположение.

Если вы тестируете API 30 - вам нужно разрешить только то, что приложение используется, чтобы правильно регистрировать заборы местоположения.

person user14111584    schedule 18.08.2020