Android,
A Complete Course, From
Basics to Enterprise Edition
Android, A Complete Course, From Basics to Enterprise
Edition
Composants graphiques complexes Android.
1 Communiquer avec l’extérieur de l’activité
Cet
article est extraie du livre « Android, A Complete Course »,
disponible sur Android2ee.com.
Les
exemples ou les programmes présents dans cet ouvrage sont fournis pour
illustrer les descriptions théoriques. Ce code est libre de toute utilisation
mais n'est pas distribuable.
La
distribution du code est reservée au site :
La
propriété intellectuelle du code appartient à :
L’utilisation
de ces codes est sous votre unique responsabilité et personne d’autre que vous
ne pourra être tenu responsable des préjudices ou dommages de quelques natures
que ce soit pouvant résulter de son utilisation.
Tous
les noms de produits ou marques cités dans cet ouvrage sont des marques déposés
par leurs propriétaires respectifs.
Publié par http://android2ee.com
Titre Original : Android, A Complete Course, From
Basics to Enterprise Edition. Édition Française.
ISBN : 979-10-90388-00-0
Copyright © 2011 by Mathias Séguy
Aucune
représentation ou reproduction, même partielle, autre que celles prévues à
l’article L. 122-5 2° et 3° a) du code de la propriété intellectuelle ne peut
être faite sans l’autorisation expresse de Mathias Seguy ou, le cas échéant,
sans le respect des modalités prévues à l’article L. 122-10 dudit code
L’objectif des permissions est de demander à l’utilisateur s’il accepte que tel service utilise tel autre service. Cela permet d’assurer à l’utilisateur qu’il ne se fait pas piller ses données sans même s’en apercevoir.
Si vous ouvrez des services contenant des données privées de votre utilisateur, vous devez exiger que toute application qui veut utiliser ces données demande à l’utilisateur si elle en a le droit.
Pour cela, il suffit de rajouter dans votre fichier manifest.xml, à la racine, les demandes de permissions souhaitées :
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.app.myapp"
>
<uses-permission android:name="android.permission.RECEIVE_SMS" />
</manifest>
La liste des permissions natives d’Android se trouve ici :
http://developer.android.com/reference/android/Manifest.permission.html
Et grosso modo, dès que vous utilisez un programme tiers, une permission est à demander (internet, SMS, GPS, bookmarks, WIFI, Bluetooth, état de la batterie…)
Il est important de souligner que l’Android Market parse vos demandes de permissions à la recherche de permission hardware. Dans ce cas, Android Market considérera que si vous demandez une application Hardware (camera, gps, accelerometer,…) votre application a besoin d’un appareil avec cet hardware pour fonctionner. Votre application sera alors filtrée avec ce critère.
De plus Android préconise que vous utilisiez la balise <uses-feature> pour déclarer ce genre de dépendance. De plus vous pouvez rajouter l’attribut android:required = false si cet hardware n’est pas indispensable au bon fonctionnement de votre application.
Regarder aussi : http://developer.android.com/guide/topics/manifest/permission-element.html pour plus de détails concernant la balise permission.
De manière identique il est de votre responsabilité de protéger les données que vous confie l’utilisateur. Pour cela vous devez obliger les applications tierces à lui poser la question. Votre application peut posséder plusieurs demandes de permissions (accès en lecture, en écriture, pour tel type de données, pour tel autre).
Pour définir une permission, il faut définir :
· Un nom symbolique unique à votre permission. Utilisez le nom de package de votre application suivi de « permission.NomCourtDeLaPermission ».
· Un texte court et compréhensible qui sera affiché à l’utilisateur pour effectuer la demande.
· Une description de la description ; un texte plus long et compréhensible, qui sera affiché à l’utilisateur aussi.
· Un niveau (level) de permission (normal, dangerous, signature ou signatureOrSystem). Si vous n’en mettez pas le niveau est normal.
· Un groupe de permission.
Ensuite il faut la déclarer dans le manifest.xml de votre application :
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.me.app.myapp" >
<permission android:name="packageName.permission.ShortPermissionName"
android:label="@string/permlab_ShortPermissionName
"
android:description="@string/permdesc_ShortPermissionName
"
android:permissionGroup="android.permission-group.COST_MONEY"
android:protectionLevel="dangerous" />
</manifest>
Ensuite il faut déclarer les Activity, Services ou ContentProvider qui utiliseront cette permission. Si vous n’avez fait que la déclarer en en-tête du fichier manifest.xml, elle ne sera pas appliquée. Pour l’appliquer à une activité ou à un service, toujours dans le manifest.xml, il suffit de rajouter à sa déclaration :
<activity
android :name= “ …
“
android.label= “ … “
android :permission= “MyPermissionName”>
…
Dans le cas d’un ContentProvider,
les balises sont :
<provider
android :name= “ …
“
android.authorities= “ … “
android :readPermission= “MyPermissionName”
android :writePermission= “MyPermissionName”>
Enfin, n’oubliez
pas de documenter dans vos activités, services ou fournisseurs de contenus les
permissions requises pour les faire fonctionner. Informez les autres développeurs pour qu’ils
puissent s’interfacer avec vos applications, c’est de votre responsabilité de
programmeur.
1.1.2.1
Le niveau (level) d’une permission.
Le level normal
correspond à une permission pour une application à risque minimal. Le system
accorde cette permission automatiquement, sans demander à l’utilisateur.
Le level
dangerous correspond à une permission pour une application à risque élevé. Si
vous utilisez des données privées de l’utilisateur c’est le level à utiliser.
L’utilisateur sera interrogé.
Le level
signature. Ce level permet d’autoriser automatiquement la permission aux
applications tierces qui sont signées avec le même certificat que votre application
Le level
signatureOrSystem. Ne l’utilisez pas sauf si vous travaillez pour Google dans
le département android ou pour un constructeur. Dans ce cas, vous n’êtes pas en
train de lire cette documentation. Donc toi lecteur, oublie ce level.
La balise <permissionGroup> est optionnelle et n’est utilisée que pour aider le système à afficher la permission à l’utilisateur. Il est préconisé que vous liez votre application à un groupe existant, cela simplifie la présentation à l’utilisateur. La liste des groupes se trouve ici: android.Manifest.permission_group.