【发布时间】:2017-05-28 17:20:50
【问题描述】:
我创建了一个 Xamarin Forms (PCL) 解决方案,目前我专注于 Android 项目。我正在尝试使用依赖服务来实现图像共享。这些图像位于 Android 项目的 drawable 文件夹中。但是,每次我运行下面的代码时,应用程序都会崩溃:发生未处理的异常。我检查了输出日志,但没有什么特别突出的。任何人都可以查看我的代码并告诉我其中是否有错误吗?
非常感谢
界面:
public interface IShare
{
void Share(ImageSource imageSource);
}
Xaml:
<ContentPage.Content>
<Image x:Name="LogoImage" Source="icon.png"/>
</ContentPage.Content>
代码隐藏:
private void Action_Clicked(object sender, EventArgs e)
{
DependencyService.Get<IShare>().Share(LogoImage.Source);
}
ShareClass(在 Android 项目中):
[assembly: Dependency(typeof(ShareClass))]
namespace MyProject.Droid
{
public class ShareClass : Activity, IShare
{
public async void Share(ImageSource imageSource)
{
var intent = new Intent(Intent.ActionSend);
intent.SetType("image/png");
var handler = new ImageLoaderSourceHandler();
var bitmap = await handler.LoadImageAsync(imageSource, this);
var path = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads
+ Java.IO.File.Separator + "logo.png");
using (var os = new System.IO.FileStream(path.AbsolutePath, FileMode.Create))
{
bitmap.Compress(Bitmap.CompressFormat.Png, 100, os);
}
intent.PutExtra(Intent.ExtraStream, Android.Net.Uri.FromFile(path));
Forms.Context.StartActivity(Intent.CreateChooser(intent, "Share Image"));
}
}
}
【问题讨论】:
-
您是否在调试器中单步执行代码以确定导致崩溃的行?
-
@Jason 没有具体做过,但我尝试注释掉 ShareClass.cs 中的 using 语句。当我这样做时,共享 UI 弹出,图像可以共享到其他应用程序,如 OneDrive(但是,图像无法在 OneDrive 中打开,可能是因为它没有正确压缩?)。基于此,我怀疑是 using 语句导致了问题。
-
那么你有没有尝试将它包装在 try/catch 中以捕获异常?
-
是的,try/catch 确认问题出在 using 语句上。您认为这可能与 ShareClass.cs 中 System.IO 和 Java.IO 的混合有关吗?除此之外,我完全没有想法,不知道如何解决这个问题。
-
你得到了什么异常?
标签: android xamarin.forms share