Windows10 Dev - การสื่อสารแอป
การสื่อสารระหว่างแอปกับแอปหมายความว่าแอปพลิเคชันของคุณสามารถพูดหรือสื่อสารกับแอปพลิเคชันอื่นที่ติดตั้งบนอุปกรณ์เดียวกันได้ นี่ไม่ใช่คุณสมบัติใหม่ในแอปพลิเคชัน Universal Windows Platform (UWP) และยังมีอยู่ใน Windows 8.1
ใน Windows 10 มีการแนะนำวิธีการใหม่ ๆ และปรับปรุงใหม่เพื่อสื่อสารระหว่างแอปพลิเคชันบนอุปกรณ์เดียวกันได้อย่างง่ายดาย การสื่อสารระหว่างสองแอพสามารถทำได้ด้วยวิธีต่อไปนี้ -
- แอปพลิเคชันหนึ่งเปิดตัวแอปอื่นพร้อมข้อมูลบางส่วน
- แอพแลกเปลี่ยนข้อมูลโดยไม่ต้องเปิดตัวอะไรเลย
ข้อได้เปรียบหลักของการสื่อสารระหว่างแอปกับแอปคือคุณสามารถแบ่งแอปพลิเคชันออกเป็นชิ้นเล็ก ๆ ซึ่งสามารถดูแลปรับปรุงและใช้งานได้ง่าย
เตรียมแอปของคุณให้พร้อม
หากคุณทำตามขั้นตอนที่ระบุด้านล่างแอปพลิเคชันอื่น ๆ สามารถเปิดแอปพลิเคชันของคุณได้
เพิ่มการประกาศโปรโตคอลในรายการแพ็กเกจแอปพลิเคชัน
ดับเบิลคลิกที่ไฟล์ Package.appxmanifest ซึ่งมีอยู่ใน Solution Explorer ดังที่แสดงด้านล่าง
ไปที่ไฟล์ Declaration และเขียนชื่อโปรโตคอลตามที่แสดงด้านล่าง
ขั้นตอนต่อไปคือการเพิ่มไฟล์ activation รหัสเพื่อให้แอปสามารถตอบสนองได้อย่างเหมาะสมเมื่อเปิดใช้งานโดยแอปพลิเคชันอื่น
เพื่อตอบสนองต่อการเปิดใช้งานโปรโตคอลเราจำเป็นต้องลบล้างไฟล์ OnActivatedวิธีการของคลาสการเปิดใช้งาน ดังนั้นเพิ่มรหัสต่อไปนี้ในApp.xaml.cs ไฟล์.
protected override void OnActivated(IActivatedEventArgs args) {
ProtocolActivatedEventArgs protocolArgs = args as ProtocolActivatedEventArgs;
if (args != null){
Frame rootFrame = Window.Current.Content as Frame;
// Do not repeat app initialization when the Window already has content,
// just ensure that the window is active
if (rootFrame == null){
// Create a Frame to act as the navigation context and navigate to the first page
rootFrame = new Frame();
// Set the default language
rootFrame.Language = Windows.Globalization.ApplicationLanguages.Languages[0];
rootFrame.NavigationFailed += OnNavigationFailed;
// Place the frame in the current Window
Window.Current.Content = rootFrame;
}
if (rootFrame.Content == null){
// When the navigation stack isn't restored, navigate to the
// first page, configuring the new page by passing required
// information as a navigation parameter
rootFrame.Navigate(typeof(MainPage), null);
}
// Ensure the current window is active
Window.Current.Activate();
}
}
ในการเปิดแอปพลิเคชันคุณสามารถใช้ไฟล์ Launcher.LaunchUriAsync ซึ่งจะเปิดแอปพลิเคชันด้วยโปรโตคอลที่ระบุในวิธีนี้
await Windows.System.Launcher.LaunchUriAsync(new Uri("win10demo:?SomeData=123"));
ให้เราเข้าใจสิ่งนี้ด้วยตัวอย่างง่ายๆที่เรามีแอปพลิเคชัน UWP สองตัวด้วย ProtocolHandlerDemo และ FirstProtocolHandler.
ในตัวอย่างนี้ไฟล์ ProtocolHandlerDemo แอปพลิเคชันมีปุ่มเดียวและเมื่อคลิกที่ปุ่มจะเปิดไฟล์ FirstProtocolHandler ใบสมัคร
รหัส XAML ในแอปพลิเคชัน ProtocolHandlerDemo ซึ่งมีปุ่มเดียวจะได้รับด้านล่าง
<Page
x:Class = "ProtocolHandlerDemo.MainPage"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local = "using:ProtocolHandlerDemo"
xmlns:d = "http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable = "d">
<Grid Background = "{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Button x:Name = "LaunchButton" Content = " Launch First Protocol App"
FontSize = "24" HorizontalAlignment = "Center"
Click = "LaunchButton_Click"/>
</Grid>
</Page>
ด้านล่างนี้คือรหัส C # ซึ่งจะใช้เหตุการณ์การคลิกปุ่ม
using System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
// The Blank Page item template is documented at
http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409
namespace ProtocolHandlerDemo {
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public sealed partial class MainPage : Page {
public MainPage(){
this.InitializeComponent();
}
private async void LaunchButton_Click(object sender, RoutedEventArgs e) {
await Windows.System.Launcher.LaunchUriAsync(new
Uri("win10demo:?SomeData=123"));
}
}
}
ตอนนี้ให้เราดูใน FirstProtocolHandlerตารางใบสมัคร ด้านล่างนี้คือรหัส XAML ที่สร้างบล็อกข้อความด้วยคุณสมบัติบางอย่าง
<Page
x:Class = "FirstProtocolHandler.MainPage"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local = "using:FirstProtocolHandler"
xmlns:d = "http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable = "d">
<Grid Background = "{ThemeResource ApplicationPageBackgroundThemeBrush}">
<TextBlock Text = "You have successfully launch First Protocol Application"
TextWrapping = "Wrap" Style = "{StaticResource SubtitleTextBlockStyle}"
Margin = "30,39,0,0" VerticalAlignment = "Top" HorizontalAlignment = "Left"
Height = "100" Width = "325"/>
</Grid>
</Page>
การใช้งาน C # ของ App.xaml.cs ไฟล์ที่ OnActicatedถูกลบล้างดังแสดงด้านล่าง เพิ่มรหัสต่อไปนี้ภายในคลาส App ในไฟล์App.xaml.cs ไฟล์.
protected override void OnActivated(IActivatedEventArgs args) {
ProtocolActivatedEventArgs protocolArgs = args as ProtocolActivatedEventArgs;
if (args != null) {
Frame rootFrame = Window.Current.Content as Frame;
// Do not repeat app initialization when the Window already has content,
// just ensure that the window is active
if (rootFrame == null) {
// Create a Frame to act as the navigation context and navigate to
the first page
rootFrame = new Frame();
// Set the default language
rootFrame.Language = Windows.Globalization.ApplicationLanguages.Languages[0];
rootFrame.NavigationFailed += OnNavigationFailed;
// Place the frame in the current Window
Window.Current.Content = rootFrame;
}
if (rootFrame.Content == null) {
// When the navigation stack isn't restored navigate to the
// first page, configuring the new page by passing required
// information as a navigation parameter
rootFrame.Navigate(typeof(MainPage), null);
}
// Ensure the current window is active
Window.Current.Activate();
}
}
เมื่อคุณรวบรวมและเรียกใช้ไฟล์ ProtocolHandlerDemo แอปพลิเคชันบนโปรแกรมจำลองคุณจะเห็นหน้าต่างต่อไปนี้
ตอนนี้เมื่อคุณคลิกที่ปุ่มมันจะเปิดไฟล์ FirstProtocolHandler ใบสมัครตามที่แสดงด้านล่าง