Ihre Xamarin PCL Formulare nicht wissen, was es ist ein URI von Android beacuse seine Plattform spezifisch, so:
ImageSource.FromFile(path);
wird nicht Arbeit.
In diesem Fall behandeln Sie plattformspezifische Funktionen, das Laden eines Bildes von Android. Ich schlage vor, diesen Ansatz:
eine Schnittstelle auf Xamarin Erstellen von Formularen PCL wie:
public interface IPhoto
{
Task<Stream> GetPhoto();
}
dann in Android Sie diese Schnittstelle implementieren und die Umsetzung in DependencyService
registrieren:
[assembly: Xamarin.Forms.Dependency(typeof(PhotoImplementation))]
namespace xpto
{
public class PhotoImplementation : Java.Lang.Object, IPhoto
{
public async Task<Stream> GetPhoto()
{
// Open the photo and put it in a Stream to return
var memoryStream = new MemoryStream();
using (var source = System.IO.File.OpenRead(path))
{
await source.CopyToAsync(memoryStream);
}
return memoryStream;
}
}
}
Im Xamarin Formulare PCL-Code erhalten das Bild:
var image = ImageSource.FromStream (() => await DependencyService.Get<IPhoto>().GetPhoto());
Für weitere Details können Sie this konsultieren.
HINWEIS1: Dies funktioniert auf iOS, wenn Sie auch die Schnittstelle IPhoto implementieren.
HINWEIS2: Es gibt eine hilfreiche Bibliothek für diese Art von Funktionen von Xamarin-Forms-Labs namens Camera.
UPDATE (Geteilt Projektlösung)
Wie in den Kommentaren aufgefordert, diese anstelle von PCL in einem freigegebenen Projekt verwenden wir dies tun könnte.
1 - Platzieren Sie die IPhotoInterface
im freigegebenen Projekt.
2 - Umsetzung der Schnittstelle in Android/iOS-Projekt:
public class PhotoImplementation : IPhoto
{
public async Task<Stream> GetPhoto()
{
// Open the photo and put it in a Stream to return.
}
}
3 - Verwenden Sie es im Shared-Projekt:
IPhoto iPhotoImplementation;
#if __ANDROID__
iPhotoImplementation = new shared_native.Droid.GetPicture();
#elif __IOS__
iPhotoImplementation = new shared_native.iOS.GetPicture();
#endif
var image = ImageSource.FromStream (() => await iPhotoImplementation.GetPhoto());
HINWEIS: shared_native
ist der Namespace meiner Lösung und Droid/iOS
werden die Projekte für Android und iOS.
Ihre Anwendung ist nur für Android? – jzeferino
@jzeferino Zuerst ja. Aber ich glaube, dass auch für iOS, wenn ich diesen Pfad von meiner eigenen Anwendung bekomme, dann für iOS Version auch korrekt und lesbar ist. – Episodex
In der endgültigen Version möchte ich die Bilder im privaten Ordner der Anwendung, nicht im externen Speicher speichern. So kann auch die Lösung beispielsweise von "Environment.GetFolderPath (Environment.SpecialFolder.LocalApplicationData)" – Episodex