Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从play store xamarin获取最新的应用程序版本_C#_Android_Xamarin_Xamarin.android_Google Play Services - Fatal编程技术网

C# 从play store xamarin获取最新的应用程序版本

C# 从play store xamarin获取最新的应用程序版本,c#,android,xamarin,xamarin.android,google-play-services,C#,Android,Xamarin,Xamarin.android,Google Play Services,如何从Google play store获取最新的android应用程序版本?前面使用下面的代码来执行此操作 using (var webClient = new System.Net.WebClient()) { var searchString = "itemprop=\"softwareVersion\">"; var endString = "</"; //possible network error if phone gets disconnecte

如何从Google play store获取最新的android应用程序版本?前面使用下面的代码来执行此操作

using (var webClient = new System.Net.WebClient())
{
    var searchString = "itemprop=\"softwareVersion\">";
    var endString = "</";
    //possible network error if phone gets disconnected
    string jsonString = webClient.DownloadString(PlayStoreUrl);
    var pos = jsonString.IndexOf(searchString, StringComparison.InvariantCultureIgnoreCase) + searchString.Length;
    var endPos = jsonString.IndexOf(endString, pos, StringComparison.Ordinal);
    appStoreversion = Convert.ToDouble(jsonString.Substring(pos, endPos - pos).Trim());
    System.Diagnostics.Debug.WriteLine($"{currentVersion} :: {appStoreversion}");
    System.Diagnostics.Debug.WriteLine($"{appStoreversion > currentVersion}");
    if ((appStoreversion.ToString() != currentVersion.ToString() && (appStoreversion > currentVersion)))
    {
        IsUpdateRequired = true;
    }
}
接收:

Android.OS.NetworkOnMainThreadException:类型的异常 引发了“Android.OS.NetworkOnMainThreadException”。在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()


但现在Play store似乎改变了一些条件,所以现有的功能被破坏了。这里已经很少有类似的线程可用,但这些线程似乎已经过时。

基于此,当应用程序尝试在其主线程上执行网络操作时,会引发此异常。您可以参考其中的说明,Android上的网络操作需要在主UI线程之外执行。最简单的方法是使用将其推送到默认线程池中的线程上。

基于此,当应用程序尝试在其主线程上执行网络操作时,会引发此异常。您可以参考其中的说明,Android上的网络操作需要在主UI线程之外执行。最简单的方法是使用将其推送到默认线程池中的线程上。

这将返回基于字符串的版本,至少在Google再次更改html页面内容之前是如此

var version = await Task.Run(async () =>
{
    var uri = new Uri($"https://play.google.com/store/apps/details?id={PackageName}&hl=en");
    using (var client = new HttpClient())
    using (var request = new HttpRequestMessage(HttpMethod.Get, uri))
    {
      request.Headers.TryAddWithoutValidation("Accept", "text/html");
      request.Headers.TryAddWithoutValidation("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0");
      request.Headers.TryAddWithoutValidation("Accept-Charset", "ISO-8859-1");
      using (var response = await client.SendAsync(request).ConfigureAwait(false))
      {
            try
            {
                response.EnsureSuccessStatusCode();
                var responseHTML = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
                var rx = new Regex(@"(?<=""htlgb"">)(\d{1,3}\.\d{1,3}\.{0,1}\d{0,3})(?=<\/span>)", RegexOptions.Compiled);
                MatchCollection matches = rx.Matches(responseHTML);
                return matches.Count > 0 ? matches[0].Value : "Unknown";
            }
            catch
            {
                return "Error";
            }
          }
      }
   }
);
Console.WriteLine(version);
var version=wait Task.Run(异步()=>
{
var uri=新的uri($”https://play.google.com/store/apps/details?id={PackageName}&hl=en“;
使用(var client=new HttpClient())
使用(var request=newhttprequestmessage(HttpMethod.Get,uri))
{
request.Headers.TryAddWithoutValidation(“Accept”、“text/html”);
request.Headers.TryAddWithoutValidation(“用户代理”、“Mozilla/5.0(Windows NT 6.2;WOW64;rv:19.0)Gecko/20100101 Firefox/19.0”);
未经验证的request.Headers.tryadd(“接受字符集”、“ISO-8859-1”);
使用(var response=await client.sendaync(request.ConfigureAwait(false))
{
尝试
{
response.EnsureSuccessStatusCode();
var responseHTML=await response.Content.ReadAsStringAsync().ConfigureAwait(false);
var rx=newregex(@“(?)(\d{1,3}\.\d{1,3}\.{0,1}\d{0,3})(?=)”,RegexOptions.Compiled);
MatchCollection matches=rx.matches(responseHTML);
返回匹配项。计数>0?匹配项[0]。值:“未知”;
}
接住
{
返回“错误”;
}
}
}
}
);
Console.WriteLine(版本);

这将返回一个基于字符串的版本,至少在Google再次更改html页面内容之前是这样

var version = await Task.Run(async () =>
{
    var uri = new Uri($"https://play.google.com/store/apps/details?id={PackageName}&hl=en");
    using (var client = new HttpClient())
    using (var request = new HttpRequestMessage(HttpMethod.Get, uri))
    {
      request.Headers.TryAddWithoutValidation("Accept", "text/html");
      request.Headers.TryAddWithoutValidation("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0");
      request.Headers.TryAddWithoutValidation("Accept-Charset", "ISO-8859-1");
      using (var response = await client.SendAsync(request).ConfigureAwait(false))
      {
            try
            {
                response.EnsureSuccessStatusCode();
                var responseHTML = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
                var rx = new Regex(@"(?<=""htlgb"">)(\d{1,3}\.\d{1,3}\.{0,1}\d{0,3})(?=<\/span>)", RegexOptions.Compiled);
                MatchCollection matches = rx.Matches(responseHTML);
                return matches.Count > 0 ? matches[0].Value : "Unknown";
            }
            catch
            {
                return "Error";
            }
          }
      }
   }
);
Console.WriteLine(version);
var version=wait Task.Run(异步()=>
{
var uri=新的uri($”https://play.google.com/store/apps/details?id={PackageName}&hl=en“;
使用(var client=new HttpClient())
使用(var request=newhttprequestmessage(HttpMethod.Get,uri))
{
request.Headers.TryAddWithoutValidation(“Accept”、“text/html”);
request.Headers.TryAddWithoutValidation(“用户代理”、“Mozilla/5.0(Windows NT 6.2;WOW64;rv:19.0)Gecko/20100101 Firefox/19.0”);
未经验证的request.Headers.tryadd(“接受字符集”、“ISO-8859-1”);
使用(var response=await client.sendaync(request.ConfigureAwait(false))
{
尝试
{
response.EnsureSuccessStatusCode();
var responseHTML=await response.Content.ReadAsStringAsync().ConfigureAwait(false);
var rx=newregex(@“(?)(\d{1,3}\.\d{1,3}\.{0,1}\d{0,3})(?=)”,RegexOptions.Compiled);
MatchCollection matches=rx.matches(responseHTML);
返回匹配项。计数>0?匹配项[0]。值:“未知”;
}
接住
{
返回“错误”;
}
}
}
}
);
Console.WriteLine(版本);

您需要在后台线程上运行它。您需要在后台线程上运行它。@CGPA6.4查看我的正则表达式更新,它现在应该匹配多个字符xxx.xxx和xxx.xxx.xxx格式。@CGPA6.4很高兴它有帮助@CGPA6.4查看我的正则表达式更新,它现在应该匹配多个字符xxx.xxx和xxx.xxx.xxx格式。@CGPA6.4很高兴它有帮助