c# - 取得 - xamarin forms viewcontroller




現在のアクティビティを取得する-Xamarin Android (2)

私は、AndroidとiOS用のポータブルアプリケーションを開発しています。 私の現在の機能は、スクリーンショットを撮って、その画像をコード内で使用しています。 そのため私はポータブルライブラリにインターフェイスを持っています。

public interface IFileSystemService
{
    string GetAppDataFolder();
}

私は次のコードでポータブルライブラリでもScreenshotを取っています:

static public bool TakeScreenshot()
    {
        try
        {
            byte[] ScreenshotBytes = DependencyService.Get<Interface.IScreenshotManager>().TakeScreenshot();
            return true;
        }
        catch (Exception ex)
        {
        }
        return false;
    }

これは、AndroidまたはiOSバージョンを呼び出します。

アンドロイド:

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;
    }

質問は今私のアプリから現在のアクティビティを取得することです。


var view = ((Activity)Xamarin.Forms.Forms.Context).Window.DecorView;実行してみてくださいvar view = ((Activity)Xamarin.Forms.Forms.Context).Window.DecorView;

Xamarinは自動的にActivityForms.Context割り当てます。


var activity = (Activity)Forms.Context;

MainActivityを使用している場合

var activity = (MainActivity)Forms.Context;




xamarin.android