25/09/2019 |
Admin |
Windows phone
Dans une application universelle, pour la famille Windows Phone, l'appui sur le bouton Back entraine un retour sur la page précédente. Si cette dernière est la première page de l'application, l'application va se fermer.
Ce fonctionnement est logique mais un utilisateur peut utiliser cette fonction intentionnellement. C'est pour cela que l'ajout d'un popup de confirmation peut-être utile dans certains cas.
Dans la méthode OnLaunched de la classe App (App.xaml.cs)
Dans un premier temps, il faut tester si le device est un téléphone et si le bouton back est présent :
if (ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons"))
{
HardwareButtons.BackPressed += OnBackPressed;
}
Ensuite, déclarer une méthode privée au sein de cette même classe :
private async void OnBackPressed(object sender, BackPressedEventArgs e)
{
var frame = (Frame)Window.Current.Content;
e.Handled = true;
if (frame.CanGoBack)
{
frame.GoBack();
}
else
{
var msg = new MessageDialog("Etes-vous sûr de vouloir quitter l'application ?");
var okBtn = new UICommand("Oui");
var cancelBtn = new UICommand("Non");
msg.Commands.Add(okBtn);
msg.Commands.Add(cancelBtn);
IUICommand result = await msg.ShowAsync();
if (result != null && result.Label == "Oui")
{
Application.Current.Exit();
}
}
}

[Capture]
Lire >>
24/09/2019 |
Admin |
C#
La meilleure facon d'obtenir son adresse ip public c'est de le demander a quelqu'un d'autre
Voici le code qui va donner votre adresse ip public
public string GetPublicIP()
{
string result = string.Empty;
WebRequest request = WebRequest.Create("http://checkip.dyndns.org/");
using (WebResponse response = request.GetResponse())
using (StreamReader stream = newStreamReader(response.GetResponseStream()))
{
result = stream.ReadToEnd();
}
//Search for the ip in the html
int first = result.IndexOf("Address: ") + 9;
int last = result.LastIndexOf("</body>");
result = result.Substring(first, last - first);
return result;
}
Lire >>
01/01/2019 |
Admin |
C#
Voici une méthode écrite en c# permettant de calculer la distance entre 2 coordonnées (latitude / longitude). Résulat en kilometres.
Idéal pour la géolocalisation mobile.
(Pour les fans de maths : http://en.wikipedia.org/wiki/Haversine_formula)
///<summary>
/// Get distance between 2 points in kilometers
///</summary>
///<param name="latitudePointA">Latitute point A</param>
///<param name="longitudePointA">Longitute point A</param>
///<param name="latitudePointB">Latitude point B</param>
///<param name="longitudePointB">Longitude point B</param>
///<returns>The distance</returns>
public static double GetDistanceBetween(double latitudePointA, double longitudePointA, double latitudePointB, double longitudePointB)
{
double dDistance = Double.MinValue;
// Convert coordinates to radians
double dLatAInRad = latitudePointA * (Math.PI / 180.0);
double dLongAInRad = longitudePointA * (Math.PI / 180.0);
double dLatBInRad = latitudePointB * (Math.PI / 180.0);
double dLongBInRad = longitudePointB * (Math.PI / 180.0);
double dLongitude = dLongBInRad - dLongAInRad;
double dLatitude = dLatBInRad - dLatAInRad;
// Intermediate result a.
double a = Math.Pow(Math.Sin(dLatitude / 2.0), 2.0) +
...
Lire >>
01/01/2019 |
Admin |
C#
Avoir rencontré plusieurs problemes de spam dans certaines de mes applications j'ai décidé de me pencher sur le sujet. Apres avoir étudié différentes solutions je décide d'utiliser l'API gratuite du site stopforumspam.
Elle est gratuite, simple d'utilisation et communautaire, c'est pourquoi il ne faut pas hésiter a envoyer la liste de ses potentiels spammeurs sur ce forum.
Il y a juste une limite de 20000 requets a ne pas dépasser par jour, ce qui est correcte.
Pour moi le nom d'utilisateur n'est pas assez fiable pour savoir si c'est un spam ou non. C'est pourquoi la détection va se faire premierement par l'adresse IP de l'utilisateur puis par l'email.
Cette API est tres fiable mais l'adresse IP peut etre lié a un autre utilisateur par exemple. Si vous voulez filtrer des commentaires je vous conseille donc de ne pas les supprimer mais de les marquer avec un tag IsSpam = 1
C'est cadeaux, voici la classe:
///<summary>
/// SpamChecker class
///</summary>
public class SpamChecker
{
///<summary>
/// Check if the comment is inside the spam list
///</summary>
///<param name="ip">The ip to test</param>
///<param name="email">The email to test</param>
///<returns>True if it's a spam</returns>
public static bool Check(string ip, string email)
...
Lire >>
01/01/2019 |
Admin |
C#
Copier le contenu d'un répertoire en utilisant la récursivité :
private static void CopyAll(DirectoryInfo source, DirectoryInfo target)
{
// Check if the target directory exists, if not, create it.
if (Directory.Exists(target.FullName) == false)
{
Directory.CreateDirectory(target.FullName);
}
// Copy each file into the new directory.
foreach (FileInfo fi in source.GetFiles())
{
fi.CopyTo(Path.Combine(target.ToString(), fi.Name), true);
}
// Copy each subdirectory using recursion.
foreach (DirectoryInfo diSourceSubDir in source.GetDirectories())
{
DirectoryInfo nextTargetSubDir = target.CreateSubdirectory(diSourceSubDir.Name);
CopyAll(diSourceSubDir, nextTargetSubDir);
}
}
Lire >>
01/01/2019 |
Admin |
C#
List<TheType> theList = new List<TheType>();
theList.Sort(delegate(TheType t1, TheType t2)
{ return t1.PropertyToOrder.CompareTo(t2.PropertyToOrder);
});
Lire >>
01/01/2019 |
Admin |
Xamarin
Il existe des API du Framework .NET qui n'existent pas dans les API .NET des Windows Store Apps.
Par exemple Sytem.IO, dans l'API .Net pour les Windows Apps ne contient pas System.IO.IsolatedStorage mais Windows.Storage.
Cette API fournit un comportement similaire mais son utiliastion est très différente.
Après le développement de plusieurs applications Windows Store, j'ai remarqué que le développement d'une classe FileHelper serait utile.
En effet, des méthodes comme FileExists() ou FolderExists() ne sont pas proposés par Windows.Storage alors que leur utilisation est quasiment inévitable.
J'ai donc décidé de mettre ce code sur GitHub pour qu'il puisse être réutilisé et amélioré. Le code source ainsi que le sample d'une Universal Apps sont disponibles.
Voici la liste des fonctions majeures proposées :
FileHelper :
FileExistsAsync()
FolderExistsAsync()
GetFileStreamAsync()
GetContentFromFileAsync()
GetFileBytesAsync()
WriteToFileAsync()
ConvertStorageFileToBase64StringAsync()
EnumerateFilesAsync()
GetSubFoldersAsync()
DeserialiseXml<T>()
ZipHelper :
ZipFileAsync()
UnZipFileAsync()
Vous pouvez retrouver ce projet sur GitHub et le package nuget correspondant : Ph.WinRtFileHelper
Lire >>