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 :
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.
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(); } } } ...
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.
Partager