• Реализация библиотеки APK Expansion Files?

    @Parkjs Автор вопроса
    Кое-что получилось. Изменил методы:
    [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(a, ContentProviderAuthority));
                {
    
                    return uri.ToString();                
                }
            }
            public string AddDirect()
            {
    
                File path = Android.OS.Environment.GetExternalStoragePublicDirectory("Android/obb/kids.Kids");
                {
    
                    return path.ToString();
                }
            }
        }
    }


    второй метод для вышеописанного класса ViewController : ContentView
    namespace KidsApp
    {
        public class ViewController : ContentView
        {
            IDeviceInfo dev;
            public CocosSharpView GameView;
            public ViewController()
            {
                dev = DependencyService.Get<IDeviceInfo>();
                var GameView = new CocosSharpView
                {
                    HorizontalOptions = LayoutOptions.FillAndExpand,
                    VerticalOptions = LayoutOptions.FillAndExpand
                };           
    
                if (GameView != null)
                {                
                    GameView.ViewCreated += (sender, e) =>
                    {
                        CCGameView gameView = sender as CCGameView;
    
                        if (gameView != null)
                        {
                           
                            gameView.DesignResolution = new CCSizeI(App.Width, App.Height);
                            var contentSearchPaths = new List<string> { dev.AddDirect() };
                            gameView.ContentManager.SearchPaths = contentSearchPaths;
                            CCScene sceneStart = new StartScene(gameView);                                              
                            gameView.Director.RunWithScene(sceneStart);
                            gameView.TouchEnabled = true;
                        }
    
                    };
                }
                Content = GameView;
            }
        }
    }

    Изменил директорию для файлов. На эмуляторе начало работать,на телефоне не работает, удалил папку Android-->obb-->kids.Kids, презапустил эмулятор, вернул на место файл расширение и всё, на эмуляторе тоже не работает. Даже не знаю. Метод dev.AddDirect() возвращает строку "/storage/emulated/0/Android/obb/kids.Kids", вроде бы всё верно, далее метод AddAdres(string a) возвращает имя передаваемого в параметре файла, который, по идее, должен быть прочитан ZipFileContentProvider : APEZProvider
  • Реализация библиотеки APK Expansion Files?

    @Parkjs Автор вопроса
    Ваш совет очень к месту, вот, что я получил "сontent://kids.Kids.ZipFileContentProvider/имя файла".
    Хотя судя по конструкции var uri = Android.Net.Uri.Parse(string.Format("content://" + ContentProviderAuthority + "/" + a)); на что можно было ожидать?;-)
    Как бы Вы посоветовали реорганизовать эту строку var uri = Android.Net.Uri.Parse(string.Format("content://" + ContentProviderAuthority + "/" + a)), что бы адрес был корректен. Не знаю сталкивались ли Вы с графическим редактором CocosSharp с помощью которого я реализовываю свою игру, но в нём есть класс
    public class ViewController : ContentView
        {
            public CocosSharpView GameView;
            public ViewController()
            {
                var GameView = new CocosSharpView
                {
                    HorizontalOptions = LayoutOptions.FillAndExpand,
                    VerticalOptions = LayoutOptions.FillAndExpand
                };           
    
                if (GameView != null)
                {                
                    GameView.ViewCreated += (sender, e) =>
                    {
                        CCGameView gameView = sender as CCGameView;
    
                        if (gameView != null)
                        {
                           
                            gameView.DesignResolution = new CCSizeI(App.Width, App.Height);
                            var contentSearchPaths = new List<string> { "Content" };
                            gameView.ContentManager.SearchPaths = contentSearchPaths;
                            CCScene sceneStart = new StartScene(gameView);                                              
                            gameView.Director.RunWithScene(sceneStart);
                            gameView.TouchEnabled = true;
                        }
    
                    };
                    
                }
                Content = GameView;
            }
    
        }

    Как видите директорией для всех файлов должна быть папка Asset-->Content. Нужно ли учитывать это при построении корректного адреса файлов?