簡體   English   中英

XAMARIN Android 應用程序,如何在 MVVM 中獲取已安裝應用程序的列表作為服務?

[英]XAMARIN Android App, how do I get a list of installed apps as a service in MVVM?

  1. 我想在 Android 手機上加載已安裝應用程序的列表。
  2. 我正在嘗試利用 MVVM 框架構建一個 Xamarin Forms 應用程序。
  3. 我正在使用 Visual Studio 2019 Pro 和 Xamarin Forms

我一直在尋找有關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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM