[UWP]запуск мобильных приложений в uwp C#

Я нашел несколько новых API-интерфейсов на портале устройств Windows 10 Mobile, которые позволяют запускать приложения на телефоне пользователя. вы можете запустить это, чтобы увидеть результат: http://{PhoneIP}/api/app/packagemanager/packages и есть еще один API для запуска приложений: api/taskmanager/app

Запускает современное приложение

Глагол HTTP: POST

Параметры

appid : PRAID приложения для запуска, кодировка hex64

package : полное имя пакета приложения, закодированное в шестнадцатеричном формате.

У меня есть этот код для запуска приложений, но он не работает?

public class PackageInfoToRun
{
    public string appid { get; set; }
    public string package { get; set; }
    public string PackageFamilyName { get; set; }
}

public class PhoneInstalledPackages
    {
        public Installedpackage[] InstalledPackages { get; set; }
    }

    public class Installedpackage
    {
        public string Name { get; set; }
        public string PackageFamilyName { get; set; }
        public string PackageFullName { get; set; }
        public int PackageOrigin { get; set; }
        public string PackageRelativeId { get; set; }
        public bool IsXAP { get; set; }
    }

private static string Encode(string strn)
    {
        var toEncodeAsBytes = System.Text.ASCIIEncoding.ASCII.GetBytes(strn);
        string appName64 = System.Convert.ToBase64String(toEncodeAsBytes);
        appName64 = appName64.Replace(" ", "20%");
        return appName64;
    }

public async Task<PhoneInstalledPackages> GetInstalledApps()
    {
        //  /api/app/packagemanager/packages
        HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create("http://127.0.0.1/api/app/packagemanager/packages");
        string res = "";
        webrequest.Method = "GET";
        try
        {
            using (var webresponse = await webrequest.GetResponseAsync())
            using (StreamReader loResponseStream = new StreamReader(webresponse.GetResponseStream()))
            {
                res = loResponseStream.ReadToEnd();
            }
            var des = JsonConvert.DeserializeObject<PhoneInstalledPackages>(res);
            return des;
        }
        catch (Exception ex)
        {
            return null;
        }
    }

public async Task<bool> RunAppAsync(string appid, string packagename)
    {
        HttpResponseMessage http = new HttpResponseMessage();
        string str;
        try
        {
            var package = new PackageInfoToRun()
            {
                appid = Encode(appid),
                package = Encode(packagename)
            };
            using (HttpClient client = new HttpClient())
            {
                var serial = JsonConvert.SerializeObject(package);
                http = await client.PostAsync("http://127.0.0.1/api/taskmanager/app", new StringContent(serial, Encoding.UTF8, "application/json"));
                using (HttpResponseMessage response = http)
                {
                    str = await response.Content.ReadAsStringAsync();
                    string retur = str;
                    if (retur.Contains("true"))
                    {
                        return true;
                    }
                    return false;
                }
            }
        }
        catch (Exception ex)
        {
            return false;
        }
    }

что не так в моих кодах? Благодарность :)


person naghme salehi    schedule 10.01.2016    source источник
comment
Какая часть вашего кода не работает?   -  person Simon MᶜKenzie    schedule 10.01.2016
comment
public async Task‹bool› RunAppAsync(string appid, string packagename) не может запустить приложение и перейти к поиску в магазине!   -  person naghme salehi    schedule 10.01.2016
comment
Выбрасывается ли исключение?   -  person Simon MᶜKenzie    schedule 10.01.2016
comment
нет, нет никаких исключений, ответное сообщение: {\Reason\ : \Отсутствует идентификатор приложения или аргумент имени пакета.\}   -  person naghme salehi    schedule 10.01.2016
comment
Одной из проблем может быть то, что вы используете кодировку base64, когда API требует, чтобы вы использовали кодировку hex64. Можете дать ссылку на справку по API?   -  person Simon MᶜKenzie    schedule 12.01.2016
comment
если вы используете Windows 10 Mobile, вы можете включить портал своего устройства на телефоне (настройки -> обновление и безопасность -> для разработчиков), если вы перейдете к IP-адресу устройства (он отображается под порталом устройства, и вы получаете доступ к нему на телефоне с помощью 127.0.0.1) в правом верхнем углу страницы есть справка. там вы можете найти ссылку на API   -  person Ali NGame    schedule 12.01.2016
comment
до сих пор моя проблема не решена, кто-нибудь может помочь?   -  person Ali NGame    schedule 16.01.2016


Ответы (1)


Я использовал ваш код с небольшими изменениями, и он работает для меня. теперь RunAppAsync выглядит так. Не забудьте указать ПОРТ.

HttpClient client = new HttpClient();           
var serial = JsonConvert.SerializeObject(package);
var result = await client.PostAsync(String.Format("http://127.0.0.1:*PORT*/api/taskmanager/app?appid={0}&package={1}", package.appid, package.package), new StringContent(serial));

Где находится пакет

var package = new PackageInfoToRun()          
{
    appid = Encode(app.PackageRelativeId),
    package = Encode(app.PackageFullName),
};

И переменная приложения является экземпляром класса InstalledPackage.

person Ivan Chepikov    schedule 07.11.2016