如何解决Xamarin Android IntentFilter 图片共享视图更新
我正在尝试将信息从 MainActivity.cs 传递到视图,然后以某种方式将该视图的信息更新到该视图。在这种情况下,图像。问题是我无法从订阅的消息函数中更新视图。该函数确实遇到了断点,但不会更新 UI。
我向 MainActivity.cs 添加了一个意图过滤器,并使用“Xamarin.Forms.Application.Current”通过 MessagingCenter 发送了图像流(是否有更好的方法/对象可以使用?)。
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this,savedInstanceState);
global::Xamarin.Forms.Forms.Init(this,savedInstanceState);
LoadApplication(new App());
if (Intent.Action == "android.intent.action.SEND")
{
var data = Intent.Data;
Android.Net.Uri imageUri = (Android.Net.Uri)Intent.GetParcelableExtra(Android.Content.Intent.ExtraStream);
var stream = ContentResolver.OpenInputStream(imageUri);
MessagingCenter.Send(Xamarin.Forms.Application.Current,"ImageSent",stream);
}
}
public override void OnRequestPermissionsResult(int requestCode,string[] permissions,[GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode,permissions,grantResults);
base.OnRequestPermissionsResult(requestCode,grantResults);
}
}
在我看来,我接受来自消息订阅的信息并有一个运行的功能。它确实遇到了一个断点。
public partial class AboutPage : ContentPage
{
Aboutviewmodel _viewmodel;
public AboutPage()
{
InitializeComponent();
MessagingCenter.Instance.Subscribe<Application,Stream>(Application.Current,OnImageSent);
BindingContext = _viewmodel = new Aboutviewmodel();
}
private void OnImageSent(Application source,Stream imagestream)
{
stack.Children.Add(new Image
{
Source = "xamarin_logo.png",VerticalOptions = Layoutoptions.Center
});
}
}
如果我在构造函数上添加动态图像(我将图像硬编码到我知道在这个实例中存在的图像),它会添加它,但如果它在函数中运行则不会。我知道我应该使用 MVVM 等,但我想用最少的移动部件简单地让它工作,然后从那里开始。当我更新 BindingContext 对象时也存在问题。与运行的函数的上下文有关吗?
我也尝试过尝试在 Device.BeginInvokeOmMainThread 中添加图像的建议。但这也不起作用。
private void OnImageSent(App source,Stream imagestream)
{
Device.BeginInvokeOnMainThread(() =>
{
stack.Children.Add(new Image
{
//HeightRequest = 64,Source = "xamarin_logo.png",VerticalOptions = Layoutoptions.Center
});
});
}
或者我完全以错误的方式处理这个问题?我应该如何将我共享的图像发送到应用程序以供我查看?
解决方法
将 Stream 转换为 ImageSource 并尝试。
private void OnImageSent(Application source,Stream imageStream)
{
var imageSource = ImageSource.FromStream(() => imageStream);
stack.Children.Add(new Image
{
Source = imageSource,VerticalOptions = LayoutOptions.Center,WidthRequest = 100,HeightRequest = 100,}); ;
}
注意:- 我注意到,在调试模式下它不起作用。尝试通过从图库中选择一张照片并打开来启动应用程序。
如果不起作用,请告诉我。我会分享代码。
我只是想证明我可以使用图像从订阅更新 UI
是的,它可以使用图像。
我是否完全以错误的方式处理这个问题?我该如何得到我的 将图像共享到应用程序以供我查看?
使用 MessagingCenter 没问题。您也可以使用 Observer pattern。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。