提问者:小点点

从Xamarin自定义渲染器打开新的activity


这是我的第一个自定义渲染器项目,刚刚开始使用Xamarin。 我有一个相机自定义渲染器,并想通过图像预览(通过文件路径)到另一个activity额外的功能,在安卓。 使用经典:

            Intent intent = new Intent(this, typeof(ResultPage));
        StartActivity(intent);

它会抛出错误:-第一个在“this”中,说“错误CS1503参数1:'CustomRender.Droid.CamerapagerRenderer'可以被转换为'Android.content.context'”-第二个在“StartActivity”中,说“错误CS0103名称'StartActivity'在实际上下文'CustomRender.Android'中不存在”

下面是它应该去的方法:

        async void TakePhotoButtonTapped(object sender, EventArgs e)
    {
        camera.StopPreview();

        var image = textureView.Bitmap;

        try
        {
            var absolutePath = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDcim).AbsolutePath;
            var folderPath = absolutePath + "/Images";
            var filePath = System.IO.Path.Combine(folderPath, string.Format("image_{0}.jpg", Guid.NewGuid()));

            var fileStream = new FileStream(filePath, FileMode.Create);
            await image.CompressAsync(Bitmap.CompressFormat.Jpeg, 50, fileStream);
            fileStream.Close();

            image.Recycle();

            var intent = new Android.Content.Intent(Android.Content.Intent.ActionMediaScannerScanFile);
            var file = new Java.IO.File(filePath);
            var uri = Android.Net.Uri.FromFile(file);
            intent.SetData(uri);
            MainActivity.Instance.SendBroadcast(intent);

            CameraPageRenderer cameraPageRenderer = this;
            Intent intent = new Intent(this, typeof(ResultPage));
            StartActivity(intent);

        }
        catch (Exception ex)
        {
            System.Diagnostics.Debug.WriteLine(@"               ", ex.Message);
        }

共1个答案

匿名用户

CustomRenderer不是Android上下文。 您需要检索当前Android上下文并使用它:

var context = this.Context;
Intent intent = new Intent(context, typeof(ResultPage));
context.StartActivity(intent);

请记住,您的自定义呈现器需要实现参数化构造函数,该构造函数接受上下文作为它的参数,这样才能工作:

public MyCustomRenderer(Context context) : base(context) { }