Вы можете реализовать это с помощью службы зависимостей. Я подробно расскажу, чтобы другие, кто не знаком с 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.