將封裝的應用程式與 Windows Share 整合
本文說明如何將封裝的應用程式與 Windows Share 功能整合。 使用 MSIX 封裝的應用程式具有套件身分識別,並準備好註冊為 共用目標。 「共用」功能可讓使用者在應用程式間共用內容。 已封裝的應用程式將會註冊為「共用目標」,以便接收及處理應用程式內的共用檔案。
什麼是「共用目標」?
「共用目標」是 Windows 8 中導入的功能,可讓應用程式接收來自另一個應用程式的資料。 「共用目標」的運作方式就像剪貼簿,但具有動態內容。
若要讓預設的共用目標註冊與 Win32 應用程式搭配使用,應用程式必須具有套件身分識別,並同時將共用引數處理為 ShareTargetActivatedEventArgs,這是來源應用程式的即時物件。 這不是傳送至目標應用程式的靜態記憶體內容。
注意
在 C++ 應用程式中,使用 GetCurrentPackageFullName API 來檢查執行中的應用程式是否有套件身分識別。 如果 API 未使用套件身分識別執行, 則會傳回 APPMODEL_ERROR_NO_PACKAGE
錯誤碼。
必要條件
若要支援 ShareTargetActivatedEventArgs
,應用程式必須以 Windows 10 版本 2004 (組建 10.0.19041.0) 或更新版本為目標。 這是功能的最低目標版本。
註冊為「共用目標」
在您的應用程式中實作「共用」合約需要兩個步驟。
將共用目標延伸模組新增至 appxmanifest
在 Visual Studio 的 [方案總管] 中,開啟解決方案中封裝專案的 package.appxmanifest
檔案,並新增共用目標延伸模組。
<Extensions>
<uap:Extension
Category="windows.shareTarget">
<uap:ShareTarget>
<uap:SupportedFileTypes>
<uap:SupportsAnyFileType />
</uap:SupportedFileTypes>
<uap:DataFormat>Bitmap</uap:DataFormat>
</uap:ShareTarget>
</uap:Extension>
</Extensions>
將應用程式所支援的資料格式新增至 DataFormat
設定。 在此情況下,應用程式支援共用影像,因此 DataFormat
會設定為 Bitmap
。
擷取共用事件引數
從 Windows 10 版本 1809 開始,封裝的應用程式可以呼叫 AppInstance.GetActivatedEventArgs 方法,在啟動期間擷取特定種類的應用程式啟用資訊。 例如,可以調用此方法獲取有關應用程式啟用的資訊;無論是透過打開檔案、按一下互動式快顯通知還是使用已註冊的通訊協定來將其觸發。
但是,只有 Windows 10 版本 2004 和更新版本上才支援 ShareTargetActivatedEventArgs 啟用資訊。 因此,應用程式應該以具有此特定最低版本的裝置為目標。
若要查看 Windows 應用程式 SDK 實作,請參閱共用目標範例應用程式中的 OnLaunched
方法。
對於其他已封裝的應用程式,請在應用程式的 Main
方法中,檢查是否有 AppInstance.GetActivatedEventArgs
。
public static void Main(string[] cmdArgs)
{
...
if (isRunningWithIdentity())
{
var activationArgs = AppInstance.GetActivatedEventArgs();
if (activationArgs != null)
{
switch (activationArgs.Kind)
{
case ActivationKind.Launch:
HandleLaunch(activationArgs as LaunchActivatedEventArgs);
break;
case ActivationKind.ToastNotification:
HandleToastNotification(activationArgs as ToastNotificationActivatedEventArgs);
break;
case ActivationKind.ShareTarget:
HandleShareAsync(activationArgs as ShareTargetActivatedEventArgs);
break;
default:
HandleLaunch(null);
break;
}
}
}
}
如需完整的實作,請參閱 Photo Store Demo 應用程式。
處理共用檔案
下列程式碼片段示範如何處理已封裝應用程式中的共用檔案。 在上一範例中,程式碼片段是應用程式作為「共用目標」啟用時呼叫的 HandleShareAsync
方法的一部分。
static async void HandleShareAsync(ShareTargetActivatedEventArgs args)
{
ShareOperation shareOperation = args.ShareOperation;
shareOperation.ReportStarted();
if (shareOperation.Data.Contains(
Windows.ApplicationModel.DataTransfer.StandardDataFormats.StorageItems))
{
try
{
IReadOnlyList<IStorageItem> items = await shareOperation.Data.GetStorageItemsAsync();
var file = (IStorageFile)items[0];
string path = file.Path;
var image = new ImageFile(path);
image.AddToCache();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
shareOperation.ReportCompleted();
// app launch code
}