Comment prendre une capture d'écran de l'Activité actuelle et de la partager?
J'ai besoin de prendre une capture d'écran de Activity
(sans la barre de titre, et l'utilisateur ne doit PAS voir qu'une capture d'écran a été effectivement pris) et puis de les partager via un menu action bouton "partager". J'ai déjà essayé quelques solutions, mais ils n'ont pas de travail pour moi. Des idées?
- essayez de this
- ce n'est pas la solution idéale pour moi car il utilise des mises en page et je ne veux pas faire autre chose que de simplement prendre une capture d'écran de l'activité.
- De toute façon vous être en train de capturer un point de vue. Soit le fichier xml de mise en page ou de la créé par programme de mise en page. Dora est à droite.
- Double Possible de procédure de programmation pour prendre une capture d'écran sur Android?
Vous devez vous connecter pour publier un commentaire.
C'est comment j'ai capturé l'écran et le partage.
Première, racine de la vue à partir de l'activité en cours:
Deuxième, la capture de la vue racine:
Troisième, stocker les
Bitmap
dans la carte sd:Au dernier, de partager la capture d'écran de courant
Activity
:J'espère que vous serez inspiré par mes codes.
Mise à JOUR:
Ajouter ci-dessous les autorisations dans votre
AndroidManifest.xml
:Parce qu'il crée et accède à des fichiers dans le stockage externe.
Mise à JOUR:
À partir de Android 7.0 Nougat de partage de fichiers liens sont interdit. De traiter avec ce que vous avez à mettre en œuvre FileProvider et de partage de contenu"://" uri pas "file://" uri.
Ici est une bonne description de comment le faire.
ActivityNotFoundException
destartActivity(Intent.createChooser(intent, "Share Screenshot"));
et après queToast.makeText(context, "No App Available", Toast.LENGTH_SHORT).show();
.View
, google maps en est unView
?com.google.android.gms.maps.MapView
qui s'étend FrameLayout, mais je pense qu'il y a une façon particulière de prendre une capture d'écran de la carte seule (d'ailleurs sur stackoverflow), mais votre façon toujours parfait pour les cas normaux.MapView
etVideoView
ne peut pas être sreenshotted de cette façon.créer le bouton partager avec cliquez sur l'auditeur
Ajouter deux méthodes
Partager la capture d'écran. le partage de la mise en œuvre ici
Vous pouvez le code ci-dessous pour obtenir l'image bitmap pour la vue que vous voyez sur l'écran, Vous pouvez spécifier la vue de créer un bitmap.
Je ne pouvais pas obtenir Silent Knight répondre travailler pour travailler jusqu'à ce que j'ai ajouté
à mon
AndroidManifest.xml
.Vous pouvez prendre une capture d'écran de n'importe quelle partie de votre point de vue.Vous avez juste besoin de la référence de la mise en page dont vous souhaitez la capture d'écran. par exemple, dans votre cas, vous voulez la capture d'écran de votre activité. nous supposons que votre activité de racine mise en page est Linéaire Mise en page .
java.lang.NullPointerException: Attempt to invoke virtual method 'int android.graphics.Bitmap.getWidth()' on a null object reference
Pour tous les Xamarin Utilisateurs:
Xamarin.Android Code:
Créer une Classe externe (j'ai une interface pour chaque plate-forme, et j'ai mis en place ces 3 ci-dessous, les fonctions de la plate-forme android):
Maintenant, à partir de votre Activité, vous exécutez le code ci-dessus comme ceci:
Espérons qu'il sera utile à quiconque.
pour une prise de capture d'écran
pour enregistrer la capture d'écran
et pour le partage de
et simplement dans le
onclick
vous pouvez appeler ces méthodesC'est comment j'ai capturé l'écran et le partage. Prendre un coup d'oeil si vous êtes intéressé.
Et la méthode qui enregistre l'image bitmap de stockage externe:
voir plus : https://www.youtube.com/watch?v=LRCRNvzamwY&feature=youtu.être
C'est ce que j'utilise pour prendre une capture d'écran. Les solutions décrites ci-dessus fonctionnent très bien pour l'API < le 24, mais pour l'API 24 et une plus grande une autre solution est nécessaire. J'ai testé cette méthode sur l'API de 15, 24, & 27.
J'ai placé les méthodes suivantes dans MainActivity.java:
J'ai placé les autorisations suivantes et fournisseur dans mon AndroidManifest.xml:
J'ai créé un fichier appelé provider_paths.xml (veuillez voir ci-dessous) pour diriger le FileProvider où enregistrer la capture d'écran. Le fichier contient une simple balise qui pointe vers la racine du répertoire externe.
Le Fichier a été placé dans le dossier de ressources res/xml (si vous n'avez pas un dossier xml ici, créez-en un et de déposer votre fichier).
provider_paths.xml:
Si quelqu'un est d'obtenir un java.io.FileNotFoundException, à la suite de SilengKnight de la solution, le problème est probablement que le fait d'écrire dans le stockage n'a pas permis de gagner (Même si nous avons ajouté l'utilisateur-autorisation dans le manifeste). Je l'ai résolu en ajoutant ceci dans le magasin de la fonction avant de faire une nouvelle FileOutputStream.
Économiser votre temps et à utiliser ce android bibliothèque
Pourquoi utiliser des InstaCapture?
Il capte tout le contenu de votre écran d'application et évite:
Noir capture d'écran pour les vues comme: Google Maps (MapView, SupportMapFragment), TextureView , GLSurfaceView
Manqué vues comme: les boîtes de dialogue, les menus contextuels, les toasts
Définir un point de vue spécifique(s) pour l'empêcher de capture.
Aucune autorisation n'est nécessaire.