Использование GPS в фоновом режиме

#android #android-gps

Вопрос:

В приложении GPS, которое я разрабатываю, я хочу, чтобы мой GPS продолжал предоставлять мне свою информацию, даже если приложение больше не находится на переднем плане.

Но я чувствую, что больше не получаю его информацию, когда мое приложение находится в фоновом режиме.

Мой смартфон-Samsung A41 с Android 10.

И все же я думаю, что поступил правильно. Вот что я сделал:

В файле «build.gradle (модуль GPSNav.app)»):

 apply plugin: 'com.android.application'
 
android {
    compileSdkVersion 29
    buildToolsVersion "29.0.3"
 
    defaultConfig {
        applicationId "com.example.gpsnav"
        minSdkVersion 23
        targetSdkVersion 29
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
 
dependencies {
    //noinspection GradleCompatible
    implementation 'com.android.support:support-v4:24.2.1'
}
 

В «androidManifest.xml» файл, который у меня есть:

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

В моем заявлении у меня есть:

 private static final int PERMISSION_REQUEST_GPS = 100;
 
...
 
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_BACKGROUND_LOCATION) != PackageManager.PERMISSION_GRANTED
amp;amp; ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED
amp;amp; ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(Main.this, new String[]{
        Manifest.permission.ACCESS_BACKGROUND_LOCATION,
        Manifest.permission.ACCESS_COARSE_LOCATION,
        Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSION_REQUEST_GPS);
        return;
    }
 
... 
 
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if (requestCode == PERMISSION_REQUEST_GPS) {
        if (grantResults[0] == PackageManager.PERMISSION_DENIED) { // Ferme l'application
            Toast.makeText(Main.this, "Désolé !!! vous ne pouvez pas utiliser cette application sans permission", Toast.LENGTH_LONG).show();
            finish();
        }
    }
}
 

Очевидно, этого недостаточно.

Что нужно сделать ?

Комментарии:

1. Рассматривали ли вы возможность использования для этого службы переднего плана?

2. В современных версиях Android вам нужно будет использовать службу переднего плана, как было предложено выше, а также пользователю необходимо внести ваше приложение в белый список в настройках экономии заряда батареи устройства.

Ответ №1:

Это действительно метод, включающий сервисы, который позволяет поддерживать GPS активным, даже если приложение больше не находится на переднем плане.

Наконец-то я понял, почему это не работает. Это было связано с тем, что у меня был только один параметр, который нужно было указать в «NotificationCompat.Builder».

При поиске документа об уведомлениях я увидел, что необходимо иметь эту зависимость в файле «build.gradle».:

 dependencies {
    implementation "com.android.support:support-compat:28.0.0"
}
 

У меня его не было. Я заменил тот, который у меня был, на указанный, и на этот раз я смог установить два параметра, которые я хотел и … У меня больше не было ошибок.

Сегодня днем я отправился в поход со своим приложением, которое я несколько раз прерывал с помощью «PlantNet», «birdNET», это последнее приложение также использует GPS: никаких проблем с работой и записью треков с моим приложением.