XAMARIN Android Приложение, как мне получить список установленных приложений в виде сервиса в MVVM? - PullRequest
1 голос
/ 29 апреля 2020
  1. Я хочу загрузить список установленных приложений на телефон Android.
  2. Я пытаюсь создать приложение Xamarin Forms, использующее инфраструктуру MVVM.
  3. Я с помощью Visual Studio 2019 Pro и Xamarin Forms

Я продолжаю находить статьи, говорящие о Android.App.Application.Context.PackageManager.GetInstalledApplications, однако мне не удалось выяснить, как получить ссылку на него.

1 Ответ

1 голос
/ 02 мая 2020

Вы можете реализовать это с помощью службы зависимостей. Я подробно расскажу, чтобы другие, кто не знаком с Xamarin, тоже могли понять. Вы можете назвать это как InApp.cs в общем каталоге.

public class InApp
{
    public string AppName { get; set; }
    public string PackageName { get; set; }

    public InApp(string appName, string packageName)
    {
        AppName = appName;
        PackageName = packageName;
    }
}

Теперь мы можем создать нашу службу зависимостей в Android Папке. Назовите это как AndroidService.cs.

public class AndroidService : IAndroidService
{
    public List<InApp> GetIntalledApps()
    {
        List<InApp> inApps = new List<InApp>();
        IList<ApplicationInfo> apps = Android.App.Application.Context.PackageManager.GetInstalledApplications(PackageInfoFlags.MatchAll);
        for (int i = 0; i < apps.Count; i++)
        {
            inApps.Add(new InApp(apps[i].LoadLabel(Android.App.Application.Context.PackageManager), apps[i].PackageName));
        }
        return inApps;
    }
}

Приведенный выше код получит установленные приложения, затем создаст List модели, которую мы создали выше, и вернет ее.

Во время выполнения Xamarin должен знать, где искать службу зависимостей, поэтому мы должны добавить это выше пространства имен класса AndroidService, который мы создали выше.

[assembly: Xamarin.Forms.Dependency(typeof(AndroidService))]

IAndroidService is интерфейс, который будет обращаться к классу Android folder AndroidService во время выполнения. Мы создадим этот класс в общем каталоге. Мы можем назвать это как IAndroidService.cs.

public interface IAndroidService
{
    List<InApp> GetIntalledApps();
}

Теперь мы завершили реализацию службы зависимостей. Следующая часть - создать ListView и добавить список возвращенных установленных приложений из нашей службы Android.

Поскольку мы делаем это в MVVM, мы сейчас создадим модель представления.

Создать InstalledAppViewModel.cs в общем каталоге.

public class InstalledAppViewModel: INotifyPropertyChanged
{
    private ObservableCollection<InApp> installedApps;
    public ObservableCollection<InApp> InstalledApps
    {
        get { return installedApps; }
        set
        {

            installedApps = value;
        }
    }

    public InstalledAppViewModel()
    {
        List<InApp> listOfInstalledApps = DependencyService.Get<IAndroidService>().GetIntalledApps();
        InstalledApps = new ObservableCollection<InApp>(listOfInstalledApps);
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

Выше мы сделали внедрение зависимостей и добавили возвращенные значения из метода GetInstalledApps в наш список Observable.

Теперь в вашем MainPage.Xaml.Cs связывается модель представления.

BindingContext = new InstalledAppViewModel();

Добавьте представление списка в MainPage.Xaml.

 <ListView ItemsSource="{Binding InstalledApps}">
<ListView.ItemTemplate>
    <DataTemplate>
        <ViewCell>
            <StackLayout Orientation="Vertical">
                <StackLayout Orientation="Horizontal" VerticalOptions="CenterAndExpand">
                    <Label Text="{Binding AppName}" FontSize="Medium" />
                </StackLayout>
            </StackLayout>
        </ViewCell>
    </DataTemplate>
</ListView.ItemTemplate>

В ItemSource атрибута представления списка, вы связываете список Observable, который мы создали в классе View Model.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...