[英]XAMARIN Android App, how do I get a list of installed apps as a service in MVVM?
我一直在尋找有關Android.App.Application.Context.PackageManager.GetInstalledApplications
的文章,但是我無法弄清楚如何獲得對它的引用。
您可以使用依賴服務來實現這一點。 我將詳細介紹,以便其他不熟悉 Xamarin 的人也可以理解。
首先,我們將創建 model。 您可以在 Shared 目錄中將其命名為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;
}
}
上面的代碼將獲取已安裝的應用程序,然后創建我們在上面創建的 model 的List
並返回它。
在運行時,Xamarin 應該知道在哪里尋找依賴服務,因此我們應該將其添加到我們上面創建的AndroidService
class 的名稱空間之上。
[assembly: Xamarin.Forms.Dependency(typeof(AndroidService))]
IAndroidService
是在運行時訪問Android
文件夾AndroidService
class 的接口。 我們將在 Shared 目錄中創建這個 class。 我們可以將其命名為IAndroidService.cs
。
public interface IAndroidService
{
List<InApp> GetIntalledApps();
}
現在我們已經完成了依賴服務的實現。 下一部分是創建一個ListView
並添加從我們的 Android 服務返回的已安裝應用程序列表。
由於我們在MVVM
中執行此操作,我們現在將創建一個視圖 model。
在 Shared 目錄中創建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
綁定視圖 model。
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
中,您正在綁定我們在視圖 Model class 中創建的Observable
列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.