J'essaie de développer une application qui empêche un utilisateur d'accéder à une application spécifiée sans mot de passe. Le scénario est ...
- l'utilisateur clique sur l'application "E-mail" (par exemple)
- mon application détecte le lancement d'une application
- mon application confirme qu'il s'agit de l'application "E-mail"
- mon application ouvre une vue sur le dessus, demandant un mot de passe
- l'utilisateur entre un mot de passe, s'il est correct, mon application disparaît, laissant l'application "E-mail" en haut
Je suis d'accord pour faire le reste, juste la partie 2 me laisse perplexe, et après de nombreux jours à lire sur les intentions de diffusion, etc. et à essayer d'écouter "android.intent.action.MAIN", etc. dans mes projets d'essai, je ne peux pas semblent détecter lorsqu'une application autre que la mienne est démarrée.
Quelqu'un peut-il aider? Est-ce que je procède de la bonne manière, en recherchant de nouvelles applications diffusant une intention de démarrage, ou devrais-je lire le journal système pour de nouvelles intentions, ou faire quelque chose en code natif?
N'importe quel pointeur aiderait, même si vous ne pouvez pas y répondre complètement, je pourrai faire plus de recherches. Merci beaucoup. Ian
Réponses:
Je pense que nous pouvons utiliser
logcat
et analyser sa sortie.Dans tous les programmes similaires, j'ai trouvé cette autorisation:
android.permission.READ_LOGS
Cela signifie qu'ils l'utilisent tous, mais il semble que le programme démarre et qu'après cela, notre programme (protecteur d'application) démarrera et se mettra au premier plan.
Utilisez le code ci-dessous:
Et n'oubliez pas d'ajouter sa permission dans le fichier Manifest.
la source
Une façon astucieuse de le faire est d'avoir un service avec une boucle chronométrée qui vérifie
Vous parcourez cette liste pour voir ce qui fonctionne sur le téléphone. Vous pouvez maintenant les identifier avec les identifiants et processName, donc pour les activités standard, c'est facile pour les activités personnalisées, sauf si vous les arrêtez, il est difficile de les distinguer ...
Remarque: ce n'est pas une liste de ce qui est réellement à l'écran, juste une liste de ce qui est en cours d'exécution ... annulant peut-être un peu votre objectif, mais au moins vous saurez quand quelque chose commence à fonctionner ... cela continuera à l'être. liste même en arrière-plan.
Pour le mot de passe, vous pouvez simplement démarrer votre activité lorsque vous avez trouvé une application protégée ou autre.
la source
android.app.usage
plutôt le package. developer.android.com/reference/android/app/usage/…Je pense et j'espère que ce n'est pas possible. Pensez à la facilité avec laquelle une telle fonctionnalité pourrait être abusée par des logiciels malveillants. Vous pouvez écouter les intentions qui vous sont adressées et celles qui sont diffusées, mais le lancement d'une application ne doit pas être un événement de diffusion.
Ce que vous pourrez peut-être faire est de remplacer le lanceur . Si l'utilisateur y consent.
la source
Vous pouvez obtenir le fonctionnement actuel
Activity
et vérifier si celaActivity
correspond à l'Email
application.Exécuter
CheckRunningActivity
Thread
auApplication
démarrage (ou au démarrage de l'appareil).Mise à jour: cette classe a besoin d'une
android.permission.GET_TASKS
autorisation, alors ajoutez la ligne suivante au manifeste:la source
Looper.loop()
instruction semble ne jamais être exécutée car lawhile(true)
boucle ne se termine jamais. Est-ce une erreur?Le problème principal est que vous essayez d'écouter les intentions implicites lorsque le lanceur (écran d'accueil) utilise généralement des intentions explicites.
Une intention implicite est lorsque vous voulez dire "Quelqu'un joue cette vidéo" et qu'Android choisit une application qui peut gérer cette intention.
Une intention explicite est ce qui se produit lorsque vous cliquez sur l'icône "E-mail" sur l'écran d'accueil. Il indique spécifiquement à Android d'ouvrir cette application spécifique par un nom complet (c'est-à-dire com.android.mail ou quelque chose).
Il n'y a aucun moyen pour l'AFAIK d'intercepter de telles intentions explicites. C'est une mesure de sécurité intégrée à Android que deux activités ne peuvent pas avoir le même nom de package complet. Cela empêche un tiers de cloner l'application et de se faire passer pour cette application. Si ce que vous souhaitez faire était possible, vous pourriez théoriquement installer une application qui pourrait empêcher toutes les applications de vos concurrents de fonctionner.
Ce que vous essayez de faire va à l'encontre du modèle de sécurité Android.
Une chose que vous pouvez faire est de vous associer à des développeurs d'applications spécifiques pour transmettre les intentions à votre système de sécurité, mais ce n'est probablement pas quelque chose que vous voulez traiter.
la source
getRunningTasks()
est obsolète dans Android L.Pour obtenir des statistiques d'utilisation des applications, vous pouvez utiliser la classe UsageStats du package android.app.usage .
La nouvelle API de statistiques d'utilisation des applications permet aux développeurs d'applications de collecter des statistiques liées à l'utilisation des applications. Cette API fournit des informations d'utilisation plus détaillées que la méthode obsolète getRecentTasks ().
Pour utiliser cette API, vous devez d'abord déclarer l'
android.permission.PACKAGE_USAGE_STATS
autorisation dans votre manifeste. L'utilisateur doit également activer l'accès pour cette application viaSettings > Security > Apps with usage access
.Voici un exemple d'application de base montrant comment utiliser l'API de statistiques d'utilisation des applications pour permettre aux utilisateurs de collecter des statistiques liées à l'utilisation des applications.
la source
Peut-être avez-vous besoin d'un service, quelque chose qui fonctionnera constamment en arrière-plan. Que votre service fasse ce que vous avez dit. Écoutez le android.intent.action.MAIN également avec la catégorie android.intent.category.LAUNCHER. Ensuite, demandez à ce récepteur de diffusion de remplacer la méthode onReceive et de vérifier le nom de l'application, etc.
la source