9
votes

Android MediaProjectionManager en service

Je veux construire une application où je dois utiliser MediaProjectionManager dans un service. Mais je ne peux pas le résoudre comme «startActivityForresult» ne peut pas utiliser dans la classe de service.


4 commentaires

Vous auriez besoin d'une activité dans laquelle l'utilisateur peut indiquer qu'ils souhaitent que vous puissiez commencer à enregistrer des captures d'écran ou des écrans screencasts, et de là, vous pouvez utiliser starttactivityForresult () . Je ne suis au courant d'aucun moyen de demander un MediaProjection qui n'implique pas startactivityForresult () .


Je dois prendre une capture d'écran pour certaines applications spécifiques. Je dois donc détecter des applications d'un service et doit prendre des captures d'écran à l'aide de MediaProjection. S'il vous plaît donner un exemple si vous le pouvez. Je suis un débutant. Merci


Ce que vous voulez n'est pas vraiment possible. L'utilisateur doit être impliqué au moment de démarrer l'enregistrement. En outre, Google bloque progressivement la capacité de détecter quelle application est au premier plan. À ce stade (Android 6.0), il est prudent de dire que si une application peut déterminer quelle autre application est au premier plan, qu'il existe une faille de sécurité qui doit être corrigée.


En fait, l'utilisateur doit seulement être impliqué pour dire oui à l'octroi du jeton de sécurité lorsque Android invite. Si l'utilisateur fait confiance à l'application "Ne me demandez pas à nouveau", donnera à l'application la capacité d'obtenir des jetons à volonté. J'ai une application le fait semblable, et lorsque l'application cible n'est pas au premier plan, elle libère le jeton, puis la demande lorsque l'application cible revient dans la mise au point. Je l'ai fait de cette façon parce que si j'étais un utilisateur de l'application, je voudrais savoir que cela surveille uniquement l'écran lorsque je le veux aussi.


3 Réponses :


12
votes

Je veux vraiment faire cela à partir d'un service, c'est comment j'ai trouvé cette question. C'est le plus proche que je suis arrivé, alors je viens de le jeter là-bas jusqu'à une meilleure réponse. Voici un moyen de le faire d'une activité qui est presque comme le faire à partir d'un service: xxx

puis dans votre service lorsque vous avez besoin d'un appel d'autorisation xxx

pour rendre l'activité invisible dans votre androidmanifest.xml xxx

cavaliers:

Pour une brève seconde, l'application que vous avez la capture d'écran perdra se concentrer.

Pour une brève seconde Votre application sera l'application de premier plan, alors ne tripharez pas sur vos propres chaussures


1 commentaires

Pour éviter les brefs seconde problèmes, l'autre question / réponse de @Netsplit pourrait fonctionner Stackoverflow.com/questions/33398211/...



0
votes

OK, j'ai réussi à faire cela, ce n'est pas la solution la plus propre mais fonctionne:

  1. Service lié local : faites votre service A Service lié local , ce qui signifie que votre service transmettra une référence à l'activité principale.
  2. passe une instance de l'activité au service : transmettez la référence de votre activité au service dans la connexion de service-> oneserviceconnected () dans la classe d'activité
  3. Appelez le démarrageForresult : Utilisez l'instance d'activité dans votre service pour appeler la fonction startActivityForresult.

    Note: Lorsqu'il est appelé le startactivityForresult sera pris dans l'onactiviviResult () dans la classe d'activité. Vous devrez remplacer cette fonction dans l'activité et utiliser la référence de service pour revenir à la classe de service. De plus, vous pouvez engager l'activité, du service à la fin.

    J'espère que cela a du sens, désolé de ne pas y compris de code. Si vous avez des questions, il est heureux de vous aider à vous aider plus en détail.


1 commentaires

c'est seulement si l'activité est toujours en cours d'exécution. Un service peut courir même quand il n'y a pas d'activité



0
votes

J'ai utilisé la même approche qu'ici https://medium.com / @ débogagefun / Android-10-Audio-Capture-77DD8E9070f9
Dans mon activité:

<application
    android:name=".StreaminkApplication"


0 commentaires