C# főbb függvények

using Xamarin.Essentials;
 
Preferences
- Session / LocalStorage helyi megvalósítása, vagyis kulcs / érték párok elmentése fájl szinten.
- Addig tárolódik ezen kulcs / érték pár, amíg meg nem lesz szűntetve, vagy nem törlődik az alkalmazás által elmentett adatok.
Preferences.Get("user_id", 2);
- user_id-nak érték adása.
int user_id = Preferences.Get("user_id", 0);
- user_id értékének lekérdezése
- A második paraméter kötelező és ott kell megadni azt az alapértelmezett értéket, amit a megfelelő Preferences hiányában ad át.
Preferences.Rermove("user_id");
- user_id törlése
 
Aszinkron függvények
- Létrehozáskor az async-t kell tartalmaznia.
- Minimum egy olyan függvény van benne, ami await-et tartalmaz.
- await-et tartalmazó függvény során addig nem lép tovább a program, amíg visszatérési értéket nem kap (pl: szerverrel történő kommunikáció, felugró ablakos választás, stb...)
 async String fgv() {...}
 
Mindenhol elérhető függvények
- Létrehozáskor public static-ot kell tartalmaznia.
- XXXX.cs-n belül jött létre fgv() néven, akkor más C# fájlok esetén XXXX.fgv() módon kell hivatkozni rá.
- Bizonyos korlátozások, megszorítások előfordulhatnak az ilyen függvényen belül alkalmazott parancsok esetén.
public static String fgv() {...}
 
Parancsok futtatása belső üzenet küldésekor
MessagingCenter.Send(EventArgs.Empty, "MESSAGE");
- Egy MESSAGE üzenet küldése.
MessagingCenter.Subscribe<EventArgs>(this, "MESSAGE", args => {...});
- MESSAGE üzenet küldésekor mi fusson le.
- Egyszerre több C# is fogadhatja az üzenetet, így ezek egyszerre futnak le.
- Ha nem lehet public static függvényt alkalmazni (például a menü nyitása/zárása parancs), akkor ehelyett alkalmazható ezen módszer.
- C# fájl InitializeComponent() függvénye előtt kell szerepelnie a MessagingCenter.Subscribe() parancsoknak
 
Felugró ablak
bool valasz = await DisplayAlert("Cím", "Szöveg", "Elfogadás gomb", "Elutasítás gomb");
if (valasz) {
     // Ha az Elfogadás gombra nyomott
} else {
     // Ha az Elutasitás gombra nyomott
}
- Elutasítás gomb nem kötelező.
 
Több választós felugró ablak
string action = await DisplayActionSheet ("Milyen művelet legyen végrehajtva?", "Mégse", "Törlés", "Megosztás", "E-mail küldés");
- Ha nem akarunk Törlés gombot, akkor null legyen az értéke.
- Visszatérési érték a kiválasztott szöveg.
 
Parancs futtatása egy elemre való nyomáskor
- XAML
<Label Text="Zöld szöveg" Style="{StaticResource greenLabel}" x:Name="greenLabel">
     <Label.GestureRecognizers>
          <TapGestureRecognizer x:Name="greenLabelGesture" Tapped="greenLabelGesture_Tapped"/>
     </Label.GestureRecognizers>
</Label>
<Button Text="Fekete Gomb" x:Name="button" Clicked="button_Clicked"/>
- Ha van x:Name-nek értéke, akkor a Tapped=" beírása után a <NewEventHandler> kiválasztása, így a C# fájlban a szükséges függvényet létre is hozza automatikusan és ha az x:Name értéke XXXX, akkor a függvény neve XXXX_Tapped() lesz.
- Button esetén a Clicked attríbútumot kell használni, és akkor a <NewEventHandler> után xxxx_Clicked() lesz a függvény neve.
- C#
private void greenLabelGesture_Tapped(object sender, EventArgs e) {...}
private void button_Clicked(object sender, EventArgs e) {...}

Szöveg kiíratása konzolra

Console.WriteLine("Szöveg");

Megnézni, hogy egy Stringnek van-e értéke

String.IsNullOrWhiteSpace(szoveg)

Base64 konvertálása képpé

byte[] Base64Stream = Convert.FromBase64String(base64);
ImageSource imageSource = ImageSource.FromStream(() => new MemoryStream(Base64Stream));

Aktuális hálózati állapot lekérdezése

// Aktuális hálózati kapcsolat lekérdezése
var current = Connectivity.NetworkAccess;
 
// Megnézni, hogy csatlakozik-e az internethez
if (current == NetworkAccess.Internet)
{
    // Ha igen, akkor lekérdezni, hogy milyen módon
    var profiles = Connectivity.ConnectionProfiles;
 
    // Megnézni, hogy az egyik csatlakozási mód a WiFi
    if (profiles.Contains(ConnectionProfile.WiFi))
    {
        // Ha csatlakozik a WiFi-hez
    } else {
        // Ha nem csatlakozik a WiFi-hez
    }
} else { 
    // Ha nem kapcsolódik az internethez
}
- Android esetén további módosítás: Projekt.Android > Properties > AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

Telefonszám hívása

PhoneDialer.Open("+36301234567");

- Külső telefon alkalmazás megnyitódik, aminél már a szám is be van írva, így csak ott kell elindítani a hívást -- emiatt nem is kell külön engedélyt kérni, mert nem a Xamarinos program lesz a hívó

SMS küldés

await Sms.ComposeAsync(new SmsMessage("Szöveg", "+36301234567"));

- Külső SMS alkalmazás megnyitódik, aminél már a számok és a szöveg is be van írva, így csak ott kell elindítani az SMS küldést -- emiatt nem is kell külön engedélyt kérni, mert nem a Xamarinos program lesz a küldő

- Több telefonszám esetén pontosvesszőt kell alkalmazni elválasztó karakternek

Email küldése, csatolmánnyal

List<string> recipients = new List<string>();
recipients.Add(...e-mail cím...);
var message = new EmailMessage
{
    Subject = "Fontos",
    Body = "Ez egy teszt üzenet",
    To = recipients
};
var fn = "Attachment.txt";
var file = Path.Combine(FileSystem.CacheDirectory, fn);
File.WriteAllText(file, "Hello World");
message.Attachments.Add(new EmailAttachment(file));
await Email.ComposeAsync(message);
- Külső e-mail alkalmazás megnyitódik, aminél már az e-mail címek, és a szövegek is be vannak írva, valamint a fájlok is csatolva vannak, így csak ott kell elindítani az e-mail küldést -- emiatt nem is kell külön engedélyt kérni, mert nem a Xamarinos program lesz a küldő

Hivatkozás megnyitása

await Launcher.OpenAsync(new Uri("http://www.mvkzrt.hu"));
Vibrálás
Vibration.Vibrate(TimeSpan.FromSeconds(1)); // Vibrálás 1 másodpercig
Vibration.Cancel(); // Aktuális vibrálás megszüntetése
- Android esetén az AndroidManifext.xml-ben
<uses-permission android:name="android.permission.VIBRATE" />
- iOS esetén mindig fél másodpercig tart a vibrálás és a Cancel sem működik.
 
Operációs rendszer nevének lekérdezése
String os = DeviceInfo.Platform.ToString();
Operációs rendszer verziójának lekérdezése
String version = DeviceInfo.Version.ToString();
Alkalmazás verziójának lekérdezése
String number = AppInfo.BuildString;
Vágólap kezelése
- Aktuális elem lekérdezése
var text = await Clipboard.GetTextAsync();
- Új elem felvitele
await Clipboard.SetTextAsync("Hello World!!!!");
Szöveg felolvasása
// Összes lokalitás lekérdezése
var locales = await TextToSpeech.GetLocalesAsync();
 
// Első vagy alapértelmezett kiválasztása
var locale = locales.FirstOrDefault();
 
// Beszéd beállítása
var settings = new SpeechOptions()
{
    Volume = .75f,
    Pitch = 1.0f,
    Locale = locale
};
 
// Beszéd
await TextToSpeech.SpeakAsync("It's lunch time! Go get some food!", settings);
 
Egyik alkalmazás beillesztése másikba
- Például, ha egy külön Templates mappát hozunk létre, akkor 
1) Szülő alkalmazás gyökerében
xmlns:templates="clr-namespace:Projekt.Templates;assembly=Projekt"
2) Szülőben a Templates/XXX gyerek meghívása
<templates:XXX/>

- A gyerek pedig ContentPage helyett másnak kell lennie, például ScrollView

- Szülő-Gyerek kommunikációra pedig a MessagingCenter is alkalmazható

Alkalmazás megnyitása a neve alapján

System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly();
string asm_name = asm.GetName().Name;
var pageType = Type.GetType($"{asm_name}.{pagename}");
var page = Activator.CreateInstance(pageType) as Page;
Application.Current.MainPage.Navigation.PushAsync(page);
- Az alkalmazás nevét ebben az esetben a pagename nevű változó tartalmazza!
Mobilos kategóriák: