Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Os pacotes de recursos oferecem uma ótima maneira de reduzir o volume ocupado no disco dos usuários, segmentando o idioma ou escalando ativos específicos em pacotes separados que são baixados automaticamente pelo Windows, dependendo da configuração de máquina dos usuários. Se o usuário adicionar um novo idioma à lista de idiomas do SO nas configurações de Região e Idioma ou alterar a configuração de exibição, em uma atualização automática de repositório, o SO buscará pacotes de recursos aplicáveis para todos os aplicativos instalados no dispositivo.
No SDK do Windows 10.0.17095.0, a API AddResourcePackageAsync permite que os desenvolvedores instalem um pacote de recursos para um aplicativo sob demanda.
Como usar a API AddResourcePackageAsync
A API AddResourcePackageAsync usa o PackageFamilyName do aplicativo e a ID do recurso que identifica exclusivamente o pacote de recursos que está tentando baixar. A ID do recurso corresponde ao elemento ResourceId no AppxManifest.xml do pacote de recursos.
O aplicativo deve ser reiniciado para obter uma exibição mesclada de todos os recursos que estão disponíveis para ele. A API oferece a opção ForceTargetApplicationShutdown que pode passar para reiniciar o aplicativo.
Se houver uma atualização disponível para o aplicativo quando o pacote de recursos estiver sendo baixado, a API falhará quando a versão mais antiga do aplicativo não estiver mais disponível. Ao passar no sinalizador ApplyUpdateIfAvailable, a API atualizará o aplicativo e obterá o pacote de recursos solicitado como parte do mesmo download.
A API retorna um progresso para o download que pode ser exibido no aplicativo. Observe também que, para aplicativos publicados no repositório, a aquisição do pacote de recursos é exibida na página de downloads e atualizações da Microsoft Store e aparece como uma atualização para o seu aplicativo. O usuário final pode escolher pausar ou cancelar o download do pacote de recursos da Microsoft Store.
Exemplo
private async void DownloadGermanResourcePackage(object sender, RoutedEventArgs e)
{
// ResourceId that is unique to the resource package
string resourceId = "split.language-de";
// Warn user that application will need to restart.
// To take update if available pass in the ApplyUpdateIfAvailable flag
var packageCatalog = PackageCatalog.OpenForCurrentPackage();
PackageCatalogAddResourcePackageResult result = await packageCatalog.AddResourcePackageAsync("29270depappf.CaffeMacchiato_gah1vdar1nn7a", resourceId,
AddResourcePackageOptions.ApplyUpdateIfAvailable | AddResourcePackageOptions.ForceTargetApplicationShutdown)
.AsTask<PackageCatalogAddResourcePackageResult, PackageInstallProgress>(new Progress
(progress =>;
{
// Draw progress
}));
if (result.ExtendedError != null)
{
//Display error or retry if needed
}
}
Validação
Para obter validação local, os desenvolvedores podem criar um .msixbundle ou .appxbundle e instalar na sua unidade local, no compartilhamento de rede ou no servidor Web. Quando o aplicativo chama a API AddResourcePackageAsync, o Windows adquire o pacote de recursos da localização onde o aplicativo original foi instalado. Isso simplifica a validação. Assim que isso funcionar, o aplicativo estará pronto para ser implantado.
Remover pacotes de recursos
O aplicativo pode escolher remover os pacotes de recursos baixados por meio da API RemoveResourcePackageAsync. No entanto, os pacotes de recursos aplicáveis ao usuário ou ao dispositivo como um todo não podem ser desinstalados.
Exemplo
private async void RemoveResourcePackage(object sender, RoutedEventArgs e)
{
var packageCatalog = PackageCatalog.OpenForCurrentPackage();
List resourcePackagesToRemove = new List();
resourcePackagesToRemove.Add("split.language-de");
//Warn user that application will be restarted
var removePackageResult = await packageCatalog.RemoveResourcePackagesAsync(resourcePackagesToRemove);
if (removePackageResult.ExtendedError != null)
{
// display error
}
}