Meluncurkan aplikasi untuk hasil

API Penting

Pelajari cara meluncurkan aplikasi dari aplikasi lain dan bertukar data di antara keduanya. Ini disebut meluncurkan aplikasi untuk hasil. Contoh di sini menunjukkan kepada Anda cara menggunakan LaunchUriForResultsAsync untuk meluncurkan aplikasi untuk hasil.

API komunikasi aplikasi-ke-aplikasi baru di Windows 10 memungkinkan aplikasi Windows (dan aplikasi Web Windows) untuk meluncurkan aplikasi dan bertukar data dan file. Ini memungkinkan Anda untuk membangun solusi mash-up dari beberapa aplikasi. Dengan menggunakan API baru ini, tugas kompleks yang mengharuskan pengguna untuk menggunakan beberapa aplikasi sekarang dapat ditangani dengan mulus. Misalnya, aplikasi Anda dapat meluncurkan aplikasi jejaring sosial untuk memilih kontak, atau meluncurkan aplikasi checkout untuk menyelesaikan proses pembayaran.

Aplikasi yang akan Anda luncurkan untuk hasil akan disebut sebagai aplikasi yang diluncurkan. Aplikasi yang meluncurkan aplikasi akan disebut sebagai aplikasi panggilan. Untuk contoh ini Anda akan menulis aplikasi panggilan dan aplikasi yang diluncurkan.

Langkah 1: Daftarkan protokol yang akan ditangani di aplikasi yang akan Anda luncurkan untuk mendapatkan hasil

Dalam file Package.appxmanifest dari aplikasi yang diluncurkan, tambahkan ekstensi protokol ke <bagian Aplikasi> . Contoh di sini menggunakan protokol fiksi bernama test-app2app.

Atribut ReturnResults dalam ekstensi protokol menerima salah satu nilai ini:

Dalam contoh ekstensi protokol ini, aplikasi hanya dapat diluncurkan untuk hasil. Ini menyederhanakan logika di dalam metode OnActivated , yang dibahas di bawah ini, karena kita harus menangani hanya kasus "diluncurkan untuk hasil" dan bukan cara lain bahwa aplikasi dapat diaktifkan.

<Applications>
   <Application ...>

     <Extensions>
       <uap:Extension Category="windows.protocol">
         <uap:Protocol Name="test-app2app" ReturnResults="always">
           <uap:DisplayName>Test app-2-app</uap:DisplayName>
         </uap:Protocol>
       </uap:Extension>
     </Extensions>

   </Application>
</Applications>

Langkah 2: Ganti Application.OnActivated di aplikasi yang akan Anda luncurkan untuk hasil

Jika metode ini belum ada di aplikasi yang diluncurkan, buat di dalam App kelas yang ditentukan di App.xaml.cs.

Dalam aplikasi yang memungkinkan Anda memilih teman di jejaring sosial, fungsi ini bisa menjadi tempat Anda membuka halaman pemilih. Dalam contoh berikutnya, halaman bernama LaunchedForResultsPage ditampilkan saat aplikasi diaktifkan untuk hasil. Pastikan bahwa pernyataan penggunaan disertakan di bagian atas file.

using Windows.ApplicationModel.Activation;
...
protected override void OnActivated(IActivatedEventArgs args)
{
    // Window management
    Frame rootFrame = Window.Current.Content as Frame;
    if (rootFrame == null)
    {
        rootFrame = new Frame();
        Window.Current.Content = rootFrame;
    }

    // Code specific to launch for results
    var protocolForResultsArgs = (ProtocolForResultsActivatedEventArgs)args;
    // Open the page that we created to handle activation for results.
    rootFrame.Navigate(typeof(LaunchedForResultsPage), protocolForResultsArgs);

    // Ensure the current window is active.
    Window.Current.Activate();
}

Karena ekstensi protokol dalam file Package.appxmanifest menentukan ReturnResults seperti biasa, kode yang baru saja ditampilkan dapat dilemparkan args langsung ke ProtocolForResultsActivatedEventArgs dengan keyakinan bahwa hanya ProtocolForResultsActivatedEventArgs yang akan dikirim ke OnActivated untuk aplikasi ini. Jika aplikasi Anda dapat diaktifkan dengan cara selain meluncurkan hasil, Anda dapat memeriksa apakah properti IActivatedEventArgs.Kind mengembalikan ActivationKind.ProtocolForResults untuk mengetahui apakah aplikasi diluncurkan untuk hasil.

Langkah 3: Tambahkan bidang ProtocolForResultsOperation ke aplikasi yang Anda luncurkan untuk hasil

private Windows.System.ProtocolForResultsOperation _operation = null;

Anda akan menggunakan bidang ProtocolForResultsOperation untuk memberi sinyal saat aplikasi yang diluncurkan siap mengembalikan hasilnya ke aplikasi panggilan. Dalam contoh ini, bidang ditambahkan ke kelas LaunchedForResultsPage karena Anda akan menyelesaikan operasi peluncuran-untuk-hasil dari halaman itu dan akan memerlukan akses ke sana.

Langkah 4: Ganti OnNavigatedTo() di aplikasi yang Anda luncurkan untuk hasil

Ganti metode OnNavigatedTo pada halaman yang akan Anda tampilkan saat aplikasi diluncurkan untuk hasil. Jika metode ini belum ada, buat dalam kelas untuk halaman yang ditentukan dalam <pagename.xaml>.cs. Pastikan bahwa pernyataan penggunaan berikut disertakan di bagian atas file:

using Windows.ApplicationModel.Activation

Objek NavigationEventArgs dalam metode OnNavigatedTo berisi data yang diteruskan dari aplikasi panggilan. Data tidak boleh melebihi 100KB dan disimpan dalam objek ValueSet .

Dalam kode contoh ini, aplikasi yang diluncurkan mengharapkan data yang dikirim dari aplikasi panggilan berada di ValueSet di bawah kunci bernama TestData, karena itulah yang dikodekan oleh aplikasi panggilan contoh untuk dikirim.

using Windows.ApplicationModel.Activation;
...
protected override void OnNavigatedTo(NavigationEventArgs e)
{
    var protocolForResultsArgs = e.Parameter as ProtocolForResultsActivatedEventArgs;
    // Set the ProtocolForResultsOperation field.
    _operation = protocolForResultsArgs.ProtocolForResultsOperation;

    if (protocolForResultsArgs.Data.ContainsKey("TestData"))
    {
        string dataFromCaller = protocolForResultsArgs.Data["TestData"] as string;
    }
}
...
private Windows.System.ProtocolForResultsOperation _operation = null;

Langkah 5: Tulis kode untuk mengembalikan data ke aplikasi panggilan

Di aplikasi yang diluncurkan, gunakan ProtocolForResultsOperation untuk mengembalikan data ke aplikasi panggilan. Dalam kode contoh ini, objek ValueSet dibuat yang berisi nilai untuk kembali ke aplikasi panggilan. Bidang ProtocolForResultsOperation kemudian digunakan untuk mengirim nilai ke aplikasi panggilan.

    ValueSet result = new ValueSet();
    result["ReturnedData"] = "The returned result";
    _operation.ReportCompleted(result);

Langkah 6: Tulis kode untuk meluncurkan aplikasi untuk hasil dan mendapatkan data yang dikembalikan

Luncurkan aplikasi dari dalam metode async di aplikasi panggilan Anda seperti yang ditunjukkan dalam kode contoh ini. Perhatikan pernyataan penggunaan , yang diperlukan agar kode dikompilasi:

using System.Threading.Tasks;
using Windows.System;
...

async Task<string> LaunchAppForResults()
{
    var testAppUri = new Uri("test-app2app:"); // The protocol handled by the launched app
    var options = new LauncherOptions();
    options.TargetApplicationPackageFamilyName = "67d987e1-e842-4229-9f7c-98cf13b5da45_yd7nk54bq29ra";

    var inputData = new ValueSet();
    inputData["TestData"] = "Test data";

    string theResult = "";
    LaunchUriResult result = await Windows.System.Launcher.LaunchUriForResultsAsync(testAppUri, options, inputData);
    if (result.Status == LaunchUriStatus.Success &&
        result.Result != null &&
        result.Result.ContainsKey("ReturnedData"))
    {
        ValueSet theValues = result.Result;
        theResult = theValues["ReturnedData"] as string;
    }
    return theResult;
}

Dalam contoh ini, ValueSet yang berisi kunci TestData diteruskan ke aplikasi yang diluncurkan. Aplikasi yang diluncurkan membuat ValueSet dengan kunci bernama ReturnedData yang berisi hasil yang dikembalikan ke penelepon.

Anda harus membuat dan menyebarkan aplikasi yang akan Diluncurkan untuk hasil sebelum menjalankan aplikasi panggilan Anda. Jika tidak, LaunchUriResult.Status akan melaporkan LaunchUriStatus.AppUnavailable.

Anda akan memerlukan nama keluarga aplikasi yang diluncurkan saat Anda mengatur TargetApplicationPackageFamilyName. Salah satu cara untuk mendapatkan nama keluarga adalah dengan melakukan panggilan berikut dari dalam aplikasi yang diluncurkan:

string familyName = Windows.ApplicationModel.Package.Current.Id.FamilyName;

Keterangan

Contoh dalam cara ini memberikan pengenalan "halo dunia" untuk meluncurkan aplikasi untuk hasil. Hal utama yang perlu diperhatikan adalah bahwa LAUNCHUriForResultsAsync API yang baru memungkinkan Anda meluncurkan aplikasi secara asinkron dan berkomunikasi melalui kelas ValueSet . Meneruskan data melalui ValueSet dibatasi hingga 100KB. Jika Anda perlu meneruskan jumlah data yang lebih besar, Anda dapat berbagi file dengan menggunakan kelas SharedStorageAccessManager untuk membuat token file yang dapat Anda lewati antar aplikasi. Misalnya, dengan nama inputDataValueSet, Anda dapat menyimpan token ke file yang ingin Anda bagikan dengan aplikasi yang diluncurkan:

inputData["ImageFileToken"] = SharedStorageAccessManager.AddFile(myFile);

Kemudian berikan ke aplikasi yang diluncurkan melalui LaunchUriForResultsAsync.