подробное описание библиотеки
тут Не поленитесь, ознакомьтесь, может не будете писать, типа, пять раз прочитал "ничё" не понял. Итак к самому вопросу:
Есть в этой библиотеке класс APEZProvider, как я понял его задача - это чтение файлов упакованных в зип архив, с чем у меня и возникли трудности. Вот моя реализация этого класса:
[assembly: Dependency(typeof(KidsApp.Droid.ZipFileContentProvider))]
namespace KidsApp.Droid
{
[ContentProvider(new[] { ContentProviderAuthority }, Exported = false)]
[MetaData(APEZProvider.MetaData.MainVersion, Value = "7")]
[MetaData(APEZProvider.MetaData.PatchVersion, Value = "0")]
public class ZipFileContentProvider : APEZProvider, IDeviceInfo
{
public const string ContentProviderAuthority = "kids.Kids.ZipFileContentProvider";
public override string Authority => ContentProviderAuthority;
public string AddAdres(string a)
{
var uri = Android.Net.Uri.Parse(string.Format("content://" + ContentProviderAuthority + "/" + a));
{
return uri.ToString();
}
}
}
}
Кстати проект создан в Xamarin PCL профиль №111(без UWP). Все классы находятся в переносимом проекте, а вышеупомянутый класс в проекте Droid. С помощью привязки я использую в классе переносимого проекта функцию "public string AddAdres(string a)" из класса находящегося в проекте Droid. Для чего, спросите Вы?
Вот кусок кода из одного из классов переносимого проекта
public class startLayer : CCLayerColor
{
CCSprite DP;
CCSprite An;
CCSprite op;
IDeviceInfo dev;
public startLayer() : base(CCColor4B.Black)
{
var touchListener = new CCEventListenerTouchAllAtOnce();
touchListener.OnTouchesEnded = (touches, ccevent) => Director.PushScene(new GameScena(GameView));
AddEventListener(touchListener, this);
dev = DependencyService.Get<IDeviceInfo>();
}
protected override void AddedToScene()
{
base.AddedToScene();
AddAn();
Addop();
AddDP();
Schedule(RunGameLogic);
}
void AddDP()
{
DP = new CCSprite(dev.AddAdres("DP"));
DP.AnchorPoint = CCPoint.AnchorMiddle;
DP.ScaleX = App.Width / DP.TextureRectInPixels.MaxX * 0.4f;
DP.ScaleY = App.Height / DP.TextureRectInPixels.MaxY * 0.15f;
DP.PositionX = App.Width / 2; ;
DP.PositionY = App.Height / 2; ;
DP.Opacity = 0;
AddChild(DP);
}
Как видите "DP = new CCSprite(dev.AddAdres("DP"));" в качестве имени объекта CCSprite я использую функцию dev.AddAdres и передаю в неё имя необходимого изображения, с целью получить обратно ( return uri.ToString(); ) строку с полным путём и именем самого файла. Но почему то при реализации приложения изображения не открываются.
Что скажете по поводу этого?