IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

GPS : Coarse, precise, foreground background, je suis perdu.


Sujet :

Android

  1. #1
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut GPS : Coarse, precise, foreground background, je suis perdu.
    Bonjour à toutes et à tous,

    Il y a quelques années, j'ai créé une application GPS qui fonctionnait bien et qui utilisait simultanément diverses autorisations telles que :

    dans le fichier manifest :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <?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.example.gpsnav"
        android:versionCode="1"
        android:versionName="1.0"
        tools:ignore="ExtraText">
     
        <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
        <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" />"
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.CAMERA" />
        <uses-permission android:name="android.permission.BLUETOOTH" />
        <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
        <application
            android:requestLegacyExternalStorage="true"
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme"
            android:fullBackupContent="@xml/backup_descriptor">
            <activity
                android:name="com.example.gpsnav.Navig.Main"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
     
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity android:name="com.example.gpsnav.Fichiers.AIDE" />
            <activity
                android:name="com.example.gpsnav.Photos.PICT" >
            </activity>
            <service android:name=".Navig.ServiceGPS"
                android:foregroundServiceType="location" />
            />
        </application>
    </manifest>

    et dans le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    	...
    	private static final int PERMISSION_REQUEST_FILE_GPS_CAMERA = 100;
    	...
    		if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED
    		&& ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
    		&& ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_BACKGROUND_LOCATION) != PackageManager.PERMISSION_GRANTED
    		&& ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED
    		&& ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
    			ActivityCompat.requestPermissions(Main.this, new String[]{
    				Manifest.permission.CAMERA,
    				Manifest.permission.WRITE_EXTERNAL_STORAGE,
    				Manifest.permission.ACCESS_BACKGROUND_LOCATION,
    				Manifest.permission.ACCESS_COARSE_LOCATION,
    				Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSION_REQUEST_FILE_GPS_CAMERA);
    			return;
    		}
    	...
    	@Override
    	public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    		if (requestCode == PERMISSION_REQUEST_FILE_GPS_CAMERA) {
    			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();
    			}
    		}
    	}
    	...
    Au fur et à mesure des nouvelles mises à jour d'Android (aujourd'hui API 30, Android ,11), cet application fonctionne de plus en plus mal voire s'arrête au bout de 10 minutes sans autre forme de procès. Sur des versions précédentes, j'ai pu voir que mon application consommait trop.

    Que fait mon application : elle lit les informations GPS, les affiche sur une carte et les enregistre. Je souhaite avoir les informations les plus précises possibles.
    De plus, je souhaite que ces informations soient valides lorsque mon application est au premier plan et quelles continuent de l'être lorsque qu'elle est au second plan, par exemple lorsque je réponds à un appel téléphonique ou bien que je prends une photo.

    J'ai lu les articles d'Android relatifs à ce sujet, mais j'avoue être loin de tout avoir compris et voire d'avoir tout compris de travers.

    En résumé, pour que mon application fonctionne correctement comme je le souhaite et qu'elle ne s'arrête pas au bout de 10 minutes parce qu'elle consommerait de trop, quelles sont les permissions (coarse, precise) et services (foreground, background)que je dois mettre en œuvre ?

    Merci à vous d'avance.

    Cordialement.

    Pierre.

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    elle lit les informations GPS, les affiche sur une carte et les enregistre
    Quand s'arrete elle ? J'imagine que ce n'est pas perpétuelle et que l'utilisateur à le choix d'arrêter quand il veux à l'image de ce que font les application de sport type Strava ou Garmin ?
    Ca veux donc dire que en théorie tu tombe sous le coup des foreground services et de ACCESS_FINE_LOCATION (il faut utiliser un foreground service).

    Android ne kill pas une application qui consommerait trop de batterie , en revanche les surcouches de certains opérateurs le font. Huawei est réputé très agressif la dessus par exemple. Et là tu ne peux rien y faire , c'est à l'utilisateur de placer ton application dans les exceptions ou de désactiver les optimiseur de batterie.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Citation Envoyé par grunk Voir le message
    Quand s'arrete elle ? J'imagine que ce n'est pas perpétuelle et que l'utilisateur à le choix d'arrêter quand il veux à l'image de ce que font les application de sport type Strava ou Garmin ?
    Ca veux donc dire que en théorie tu tombe sous le coup des foreground services et de ACCESS_FINE_LOCATION (il faut utiliser un foreground service).

    Android ne kill pas une application qui consommerait trop de batterie , en revanche les surcouches de certains opérateurs le font. Huawei est réputé très agressif la dessus par exemple. Et là tu ne peux rien y faire , c'est à l'utilisateur de placer ton application dans les exceptions ou de désactiver les optimiseur de batterie.
    Pour l'instant, je suis le seul utilisateur de mon application ; mon smartphone est un SAMSUNG GALAXY A 41. Comme toute application, elle est lancée en appuyant sur son icône et est arrêtée en appuyant sur un bouton de l'application.

    Avec la dernière mise à jour d'Android, elle s'arrête sans message au bout d'une dizaine de minutes. Avant cette dernière mise à jour, l'arrêt inopiné était suivi de temps en temps d'un message comme quoi elle consommait de trop.

    Avant hier, j'ai désinstallé cette application et l'ai réinstallée : depuis, elle fonctionne correctement : elle ne s'arrête plus inopinément. Pourquoi ?? Combien de temps cela va-t-il durer ??

    A suivre ...

    Cordialement.

    Pierre.

Discussions similaires

  1. [ODBC] Je suis perdu avec ODBC
    Par Nowhere dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 19/05/2006, 08h50
  2. [Tableaux] aide je suis perdu
    Par covin85 dans le forum Langage
    Réponses: 12
    Dernier message: 14/04/2006, 17h56
  3. [Architecture] EJB ou pas EJB ? Je suis perdu ...
    Par n!co dans le forum Java EE
    Réponses: 18
    Dernier message: 26/01/2006, 18h21
  4. RAM DDR, PC3200, 333Mhz , 400Mhz je suis perdu
    Par ahage4x4 dans le forum Composants
    Réponses: 2
    Dernier message: 08/12/2005, 17h52
  5. DLL et MainForm je suis perdu !
    Par rudy2 dans le forum C++Builder
    Réponses: 28
    Dernier message: 02/01/2005, 18h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo