Obtenez de l'Activité en cours - Xamarin Android
Je suis en train d'élaborer un portable Application pour Android et iOS. Ma fonction actuelle est de prendre une Capture d'écran et d'utiliser cette image dans le code. À cet effet, je dispose d'une Interface dans la bibliothèque portable.
public interface IFileSystemService
{
string GetAppDataFolder();
}
Je prends la Capture d'écran aussi dans la Bibliothèque portable avec le code suivant:
static public bool TakeScreenshot()
{
try
{
byte[] ScreenshotBytes = DependencyService.Get<Interface.IScreenshotManager>().TakeScreenshot();
return true;
}
catch (Exception ex)
{
}
return false;
}
Ce soit des appels Android ou iOS version.
Android:
class ScreenshotManagerAndroid : IScreenshotManager
{
public static Activity Activity { get; set; }
public byte[] TakeScreenshot()
{
if (Activity == null)
{
throw new Exception("You have to set ScreenshotManager.Activity in your Android project");
}
var view = Activity.Window.DecorView;
view.DrawingCacheEnabled = true;
Bitmap bitmap = view.GetDrawingCache(true);
byte[] bitmapData;
using (var stream = new MemoryStream())
{
bitmap.Compress(Bitmap.CompressFormat.Png, 0, stream);
bitmapData = stream.ToArray();
}
return bitmapData;
}
La question maintenant est d'obtenir l'Activité actuelle de mon application.
Vous avez besoin d'affecter l'activité du service dans la méthode oncreate.
OriginalL'auteur Lexu | 2017-04-07
Vous devez vous connecter pour publier un commentaire.
Depuis la sortie de Xamarin 2.5, Xamarin.Les formulaires.Les formulaires.Le contexte est obsolète. Le Contexte peut maintenant être obtenue comme suit:
OriginalL'auteur Hagbard
Une meilleure façon serait d'utiliser la L'Activité Actuelle Du Plugin. Ensuite, vous pouvez simplement faire
CrossCurrentActivity.Current.Activity
.Si vous ne souhaitez pas utiliser un plugin et que vous avez seulement 1
Activity
dans votre application, vous pourriez vous en sortir avec l'affectation d'une variable statique dansMainActivity
et de référencement que l'endroit où vous en avez besoin, comme ceci:Si vous avez besoin d'
Context
au sein d'un moteur de rendu, vous pouvez utiliser laContext
passé dans le constructeur, comme ceci:L'ancien obsolète serait
var view = ((Activity)Xamarin.Forms.Forms.Context).Window.DecorView;
Xamarin affecte automatiquement le
Activity
àForms.Context
.OriginalL'auteur hvaughan3
ou si vous utilisez MainActivity
Yep! Et j'ai lu votre commentaire après validation de la mine à l'origine et à la réalisation j'ai exagéré. J'ai upvoted mais il ne s'affiche pas
OriginalL'auteur Will Faulkner