Windows10 Dev - Giao tiếp ứng dụng

Giao tiếp giữa ứng dụng với ứng dụng có nghĩa là ứng dụng của bạn có thể nói chuyện hoặc giao tiếp với một ứng dụng khác được cài đặt trên cùng một thiết bị. Đây không phải là một tính năng mới trong ứng dụng Universal Windows Platform (UWP) và cũng đã có trong Windows 8.1.

Trong Windows 10, một số cách mới và cải tiến được giới thiệu để dễ dàng giao tiếp giữa các ứng dụng trên cùng một thiết bị. Giao tiếp giữa hai ứng dụng có thể theo những cách sau:

  • Một ứng dụng khởi chạy một ứng dụng khác với một số dữ liệu.
  • Các ứng dụng chỉ đơn giản là trao đổi dữ liệu mà không cần khởi chạy bất cứ thứ gì.

Ưu điểm chính của giao tiếp ứng dụng với ứng dụng là bạn có thể chia các ứng dụng thành các phần nhỏ hơn, có thể được bảo trì, cập nhật và sử dụng dễ dàng.

Chuẩn bị sẵn sàng ứng dụng của bạn

Nếu bạn Làm theo các bước dưới đây, các ứng dụng khác có thể khởi chạy ứng dụng của bạn.

  • Thêm khai báo giao thức trong tệp kê khai gói ứng dụng.

  • Nhấp đúp vào Package.appxmanifest , có sẵn trong Trình khám phá Giải pháp như được hiển thị bên dưới.

  • Đi đến Declaration và viết Tên của giao thức như hình dưới đây.

  • Bước tiếp theo là thêm activation mã, để ứng dụng có thể phản hồi thích hợp khi được khởi chạy bởi ứng dụng khác.

  • Để phản hồi các kích hoạt giao thức, chúng tôi cần ghi đè OnActivatedphương thức của lớp kích hoạt. Vì vậy, hãy thêm mã sau vàoApp.xaml.cs tập tin.

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(); 
		
   } 
}
  • Để khởi chạy ứng dụng, bạn chỉ cần sử dụng Launcher.LaunchUriAsync phương thức này sẽ khởi chạy ứng dụng với giao thức được chỉ định trong phương thức này.

await Windows.System.Launcher.LaunchUriAsync(new Uri("win10demo:?SomeData=123"));

Hãy để chúng tôi hiểu điều này với một ví dụ đơn giản trong đó chúng tôi có hai ứng dụng UWP với ProtocolHandlerDemoFirstProtocolHandler.

Trong ví dụ này, ProtocolHandlerDemo ứng dụng chứa một nút và bằng cách nhấp vào nút, nó sẽ mở FirstProtocolHandler ứng dụng.

Mã XAML trong ứng dụng ProtocolHandlerDemo, chứa một nút được đưa ra bên dưới.

<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>

Dưới đây là mã C #, trong đó sự kiện nhấp vào nút được triển khai.

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")); 
      }
		
   }
}

Bây giờ chúng ta hãy xem xét FirstProtocolHandlerbảng ứng dụng. Dưới đây là mã XAML, trong đó một khối văn bản được tạo với một số thuộc tính.

<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>

Việc triển khai C # của App.xaml.cs tập tin trong đó OnActicatedđược ghi đè được hiển thị bên dưới. Thêm mã sau vào trong lớp Ứng dụng trongApp.xaml.cs tập tin.

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(); 
   } 
}

Khi bạn biên dịch và thực thi ProtocolHandlerDemo ứng dụng trên trình giả lập, bạn sẽ thấy cửa sổ sau.

Bây giờ, khi bạn nhấp vào nút, nó sẽ mở ra FirstProtocolHandler ứng dụng như hình dưới đây.