C# 从play store xamarin获取最新的应用程序版本
如何从Google play store获取最新的android应用程序版本?前面使用下面的代码来执行此操作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
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很高兴它有帮助