Mobiele apps programmeren met Xamarin – Essentials

print
Deze handleiding maakt deel uit van het programmeertraject:


Inhoud


Wat vooraf ging


Wat is Xamarin.Essentials?

Xamarin.Essentials is een bibbliotheek (een API) van instructies die kunnen gebruikt worden in Xamarin applicaties en u toegang verleent tot het eenvoudig programmeren van essentiële functionaliteiten zoals:

Deze lijst kan (en zal) uitgebreid worden, voor een volledig overzicht ga naar de officiële webpagina.


Installatie

Het gebruik van Xamarin.Essentials vraagt enige voorbereiding.

  • Start een nieuw Xamarin.Forms project of opent het project waar u de Essentials wilt aan toevoegen.

Uit de officiële handleiding:

Xamarin.Essentials supports a minimum Android version of 4.4, corresponding to API level 19, but the target Android version for compiling must be 9.0, corresponding to API level 28. (In Visual Studio, these two versions are set in the Project Properties dialog for the Android project, in the Android Manifest tab. In Visual Studio for Mac, they’re set in the Project Options dialog for the Android project, in the Android Application tab.)

Xamarin.Essentials installs version 28.0.0.1 of the Xamarin.Android.Support libraries that it requires. Any other Xamarin.Android.Support libraries that your application requires should also be updated to version 28.0.0.1 using the NuGet package manager. All Xamarin.Android.Support libraries used by your application should be the same, and should be at least version 28.0.0.1.

Xamarin.Essentials komt als een NuGet Package.

  • Klik rechts op de Solution en kies Manage NuGet Packages for Solution….

  • In de officiële handleiding lezen we dat voor Android, alle Android bibliotheken minimaal van versie 28.0.0.1 moeten zijn. Ga naar Updates in de NuGet Manager en, indien dit niet het geval is, selecteer alle Android bibliotheken voer de Update uit. U kunt ook meteen alles updaten.

  • Ga naar Browse in de NuGet Manager en zoek naar Xamarin.Essentials.
  • Selecteer het volledige project en installeer de laatste stabiele versie.

Voor UWP en iOS zijn we klaar, voor Android is er nog een beetje werk.

Android

Xamarin.Essentials supports a minimum Android version of 4.4, corresponding to API level 19, but the target Android version for compiling must be 9.0, corresponding to API level 28. (In Visual Studio, these two versions are set in the Project Properties dialog for the Android project, in the Android Manifest tab. In Visual Studio for Mac, they’re set in the Project Options dialog for the Android project, in the Android Application tab.)

Xamarin.Essentials installs version 28.0.0.1 of the Xamarin.Android.Support libraries that it requires. Any other Xamarin.Android.Support libraries that your application requires should also be updated to version 28.0.0.1 using the NuGet package manager. All Xamarin.Android.Support libraries used by your application should be the same, and should be at least version 28.0.0.1.

De tweede paragraaf, de updates, hebben we reeds uitgevoerd. Voor de eerste paragraaf, compileren naar minimaal versie 9.0 doen we het volgende

  • Ga naar de Properties van het Android Project en onder Android Manifest (dus NIET onder Application, want dit genereerde fouten bij me), kies Android 9.0 (API Level 28 – Pie) onder Target Android Version.

Tenslotte dienen we nog een beetje code toe te voegen.

  • Open het bestand MainActivity.cs in het Android Project.
  • Voeg volgende code toe binnen de OnCreate-methode:
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
  • en voeg onderstaande methode toe:
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
    Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);

    base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}

Het resultaat voor MainActivity.cs ziet u hier:

using Android.App;
using Android.Content.PM;
using Android.Runtime;
using Android.OS;

namespace TestEssentials.Droid
{
    [Activity(Label = "TestEssentials", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;

            base.OnCreate(savedInstanceState);
            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
            LoadApplication(new App());
        }

        public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
        {
            Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);

            base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }
}

Testen

Laten we dit eens uittesten.

In MainPage.xaml, geef een naam bv. x:Name="lblTest" aan het aanwezige label.

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:TestEssentials" x:Class="TestEssentials.MainPage">

    <StackLayout>
        <!-- Place new controls here -->
        <Label x:Name="lblTest" Text="Welcome to Xamarin.Forms!" HorizontalOptions="Center" VerticalOptions="CenterAndExpand" />
    </StackLayout>

</ContentPage>

In MainPage.xaml.cs, geef eerst aan dat we de namespace/bibliotheek Xamarin.Essentials willen gebruiken.

using Xamarin.Essentials;

In de Constructor, het opstarten van de pagina, kennen we AppInfo.Name toe aan het label.

lblTest.Text = AppInfo.Name;

AppInfo wordt gehaald uit de Xamarin.Essential App Information.

De volledige code voor MainPage.xaml.cs is:

using Xamarin.Forms;
using Xamarin.Essentials;

namespace TestEssentials
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();

            lblTest.Text = AppInfo.Name;
        }
    }
}

Laat het programmaatje lopen.

Ziet u de naam van uw programma staan, gevolgd door het type van het project, dan werkt alles zoals het moet en kunnen we ons verder verdiepen.


Voorbeelden

Het is niet de bedoeling alles over alles te beschrijven, ik beperk me tot de essentie van de meest essentiële, wilt u alles weten, klik dan op de betreffende link (zoals aan het begin van dit document).

De app die ik gebruik als voorbeeld is heel eenvoudig opgebouwd.

Een Label voor de titel, een Entry om tekst in te voeren en voor de rest allemaal Buttons met een Clicked-event.

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:TestEssentials" x:Class="TestEssentials.MainPage">

    <ScrollView>

        <StackLayout>
            <Label Text="PCVO Groeipunt" FontSize="Large" HorizontalOptions="CenterAndExpand"></Label>
            <Entry x:Name="Invoer" Placeholder="Invoer" ></Entry>
            
            <Button x:Name="BtnAppInformatie" Clicked="BtnAppInformatie_Clicked" Text="App Informatie"></Button>
            <Button x:Name="BtnBatterij" Clicked="BtnBatterij_Clicked" Text="Test batterij"></Button>
            <Button x:Name="BtnConnectie" Clicked="BtnConnectie_Clicked" Text="Test connectie"></Button>
            <Button x:Name="BtnDevice" Clicked="BtnDevice_Clicked" Text="Device Informatie"></Button>

            <StackLayout Orientation="Horizontal" >
                <Button x:Name="BtnLauncher" Clicked="BtnLauncher_Clicked" Text="Lanceer website" HorizontalOptions="FillAndExpand"></Button>
                <Button x:Name="BtnBrowser" Clicked="BtnBrowser_Clicked" Text="Open browser" HorizontalOptions="FillAndExpand"></Button>                
            </StackLayout>

            <StackLayout Orientation="Horizontal" >
                <Button x:Name="BtnLocatie" Clicked="BtnLocatie_Clicked" Text="Geolocatie" HorizontalOptions="FillAndExpand"></Button>
                <Button x:Name="BtnMap" Clicked="BtnMap_Clicked" Text="Open map" HorizontalOptions="FillAndExpand"></Button>
            </StackLayout>

            <StackLayout Orientation="Horizontal" >
                <Button x:Name="BtnTelefoon" Clicked="BtnTelefoon_Clicked" Text="Telefoneer" HorizontalOptions="FillAndExpand"></Button>
                <Button x:Name="BtnSMS" Clicked="BtnSMS_Clicked" Text="SMS" HorizontalOptions="FillAndExpand"></Button>
            </StackLayout>
            
            <Button x:Name="BtnDeel" Clicked="BtnDeel_Clicked" Text="Deel"></Button>
            <Button x:Name="BtnSpreek" Clicked="BtnSpreek_Clicked" Text="Tekst naar spraak"></Button>
            <Button x:Name="BtnMail" Clicked="BtnMail_Clicked" Text="E-mail"></Button>
        </StackLayout>

    </ScrollView>

</ContentPage>

App Information

App Information toont informatie over uw App.

Dit is de informatie die u ook vindt in het Android Manifest.

async private void BtnAppInformatie_Clicked(object sender, System.EventArgs e)
{
    string Uitvoer = "";

    Uitvoer += "Applicatie" + System.Environment.NewLine + System.Environment.NewLine;
    Uitvoer += "Name: " + AppInfo.Name + System.Environment.NewLine;
    Uitvoer += "PackageName: " + AppInfo.PackageName + System.Environment.NewLine;
    Uitvoer += "Version: " + AppInfo.VersionString + System.Environment.NewLine;
    Uitvoer += "Build: " + AppInfo.BuildString + System.Environment.NewLine;

    await DisplayAlert("PCVO Groeipunt", Uitvoer, "OK");
}

De appinformatie bevindt zich in AppInfo respectievelijk: AppInfo.Name, AppInfo.PackageName, AppInfo.VersionString en AppInfo.BuildString.

Battery

Battery geeft informatie over de status van de batterij.

Om toegang te krijgen tot de Battery, onder Android, moet u een permissie hebben.

Dit doet u door toevoeging aan AssemblyInfo.cs van:

[assembly: UsesPermission(Android.Manifest.Permission.BatteryStats)]

Of, door toevoeging aan AndroidManifest.xml van:

<uses-permission android:name="android.permission.BATTERY_STATS" />

Ik heb gekozen voor het wijzigen van AssemblyInfo.cs.

private void BtnBatterij_Clicked(object sender, System.EventArgs e)
{
    Battery.BatteryInfoChanged += Battery_BatteryInfoChanged;
}

private void Battery_BatteryInfoChanged(object sender, BatteryInfoChangedEventArgs e)
{
    var level = e.ChargeLevel;
    var state = e.State;
    var source = e.PowerSource;

    BtnBatterij.Text = $"Level: {level}, State: {state}, Source: {source}";
}

De batterij moet constant gemonitord worden, hiertoe wordt een BatteryInfoChanged-event toegevoegd Battery.BatteryInfoChanged += Battery_BatteryInfoChanged;.

Binnen deze event wordt BatteryInfoChangedEventArgs e gebruikt om de e.ChargeLevel, e.State en e.PowerSource op te vragen.

Connectivity

Connectivity controleert de netwerkconnectie.

Om toegang te krijgen tot de Connectivity, onder Android, moet u een permissie hebben.

Dit doet u door toevoeging aan AssemblyInfo.cs van:

[assembly: UsesPermission(Android.Manifest.Permission.AccessNetworkState)]

Of, door toevoeging aan AndroidManifest.xml van:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

Ik heb gekozen voor het wijzigen van AssemblyInfo.cs.

private void BtnConnectie_Clicked(object sender, EventArgs e)
{
    var current = Connectivity.NetworkAccess;

    if (current == NetworkAccess.Internet)
    {
        BtnConnectie.Text = "Verbonden met het internet";
    }
    else
    {
        BtnConnectie.Text = "Niet verbonden met het internet";
    }
}

Bepaal de toegang tot het netwerk Connectivity.NetworkAccess.

Kijk of de huidige connectie een Internetconnectie is NetworkAccess.Internet.

Andere mogelijke connecties die kunnen getest worden zijn:

  • Internet – Lokaal en internettoegang.
  • ConstrainedInternet – Gelimiteerd internettoegang.
  • Local – Enkel lokale toegang.
  • None – Er is geen connectie beschikbaar.
  • Unknown – Onbekend of er connectie is.

Device Information

Device Information geeft informatie over uw device (toestel).

async private void BtnDevice_Clicked(object sender, EventArgs e)
{
    string Uitvoer = "";

    Uitvoer += "Device" + System.Environment.NewLine + System.Environment.NewLine;
    Uitvoer += "Model: " + DeviceInfo.Model + System.Environment.NewLine;
    Uitvoer += "Manufacturer: " + DeviceInfo.Manufacturer + System.Environment.NewLine;
    Uitvoer += "Name: " + DeviceInfo.Name + System.Environment.NewLine;
    Uitvoer += "version: " + DeviceInfo.VersionString + System.Environment.NewLine;

    await DisplayAlert("PCVO Groeipunt", Uitvoer, "OK");

}

De informatie bevindt zich in DeviceInfo respectievelijk: DeviceInfo.Model, DeviceInfo.Manufacturer, DeviceInfo.Name en DeviceInfo.VersionString.

Launcher

Launcher lanceert de website via het systeem, niet de browser.

async private void BtnLauncher_Clicked(object sender, EventArgs e)
{
    await Launcher.OpenAsync("https://www.pcvogroeipunt.be/");
}

Browser

Browser opent een website in de standaardbrowser.

async private void BtnBrowser_Clicked(object sender, EventArgs e)
{
    await Browser.OpenAsync("https://www.pcvogroeipunt.be/", BrowserLaunchMode.SystemPreferred);
}

Geolocation

Geolocation bepaalt de locatie op basis van longitude en latitude.

Om toegang te krijgen tot de Geolocation , onder Android, moet u een permissie hebben.

Dit doet u door toevoeging aan AssemblyInfo.cs van:

[assembly: UsesPermission(Android.Manifest.Permission.AccessCoarseLocation)]
[assembly: UsesPermission(Android.Manifest.Permission.AccessFineLocation)]
[assembly: UsesFeature("android.hardware.location", Required = false)]
[assembly: UsesFeature("android.hardware.location.gps", Required = false)]
[assembly: UsesFeature("android.hardware.location.network", Required = false)]

Of, door toevoeging aan AndroidManifest.xml van:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-feature android:name="android.hardware.location" android:required="false" />
<uses-feature android:name="android.hardware.location.gps" android:required="false" />
<uses-feature android:name="android.hardware.location.network" android:required="false" />

Ik heb gekozen voor het wijzigen van AssemblyInfo.cs.

Onderstaand voorbeeld is op basis van willekeurige invoer en in is dus niet de exacte locatie van het PCVO Groeipunt.

async private void BtnLocatie_Clicked(object sender, EventArgs e)
{
    var location = await Geolocation.GetLastKnownLocationAsync();

    if (location != null)
    {
        await DisplayAlert("PCVO Groeipunt", $"Latitude: {location.Latitude}, Longitude: {location.Longitude}, Altitude: {location.Altitude}", "OK");
    }
}

Vraag de Geolocatie op via var location = await Geolocation.GetLastKnownLocationAsync() of Geolocation.GetLocationAsync().

Indien deze niet null is location != null kan de latitude location.Latitude en longitude location.Longitude opgevraagd worden.

U kunt de Location ook gebruiken om de afstand tussen 2 locaties te berekenen.

Location boston = new Location(42.358056, -71.063611);
Location sanFrancisco = new Location(37.783333, -122.416667);
double afstand = Location.CalculateDistance(boston, sanFrancisco, DistanceUnits.Kilometers);

Permissions

Een nieuw (Xamarin.Essentials versie 1.5) toegevoegde tool is Permissions waarmee u toestemming kunt vragen tot het gebruik van tools op uw toestel.

U kunt de toestemming controleren, bv. u kunt de toestemming om de Location te gebruiken controleren.

var status = await Permissions.CheckStatusAsync<Permissions.LocationWhenInUse>();

U kunt toestemming aanvragen, bv. u kunt toestemming aanvragen om de Location van uw toestel te gebruiken.

var status = await Permissions.RequestAsync<Permissions.LocationWhenInUse>();

De toestemming wordt weergegeven in de PermissionStatus en kan één van volgende statussen hebben:

  • Unknown – Onbekend
  • Denied – geweigerd
  • Disabled – de feature waar u toelating voor vraagt is niet beschikbaar
  • Granted – toegestaan
  • Restricted – beperkt toegestaan

Onderstaande code controleert eerst de toestemming en indien er geen toestemming is wordt ze aangevraagd.

public async Task<PermissionStatus> CheckAndRequestPermissionAsync<TPermission>()
{
    var status = await Permissions.CheckStatusAsync<Permissions.LocationWhenInUse>();
    if (status != PermissionStatus.Granted)
    {
        status = await Permissions.RequestAsync<Permissions.LocationWhenInUse>();
    }

    // Additionally could prompt the user to turn on in settings

    return status;
}

Map

Met Map kunt u de Map-app openen op een gekozen locatie.

async private void BtnMap_Clicked(object sender, EventArgs e)
{
    var placemark = new Placemark
    {
        CountryName = "België",
        Locality = "PCVO Groeipunt Ninove"
    };
    var options = new MapLaunchOptions { Name = "PCVO Groeipunt" };

    await Map.OpenAsync(placemark, options);
}

Via Placemark kunt u o.a. het land (CountryName) en de benaming van de locatie (Locality) meergeven. U kunt eventueel ook MapLaunchOptions opgeven zoals var options = new MapLaunchOptions { Name = "PCVO Groeipunt" };.

Het openen van de Map-app doet u via await Map.OpenAsync(placemark, options);.

Het is ook mogelijk om de map te openen op basis van de Location.

var location = new Location(47.645160, -122.1306032);
var options =  new MapLaunchOptions { Name = "Microsoft Building 25" };

await Map.OpenAsync(location, options);

Een volledige uitwerking van de Placemark kan zijn:

var placemark = new Placemark
{
    CountryName = "United States",
    AdminArea = "WA",
    Thoroughfare = "Microsoft Building 25",
    Locality = "Redmond"
};
var options = new MapLaunchOptions { Name = "Microsoft Building 25" };

await Map.OpenAsync(placemark, options);

Phone Dialer

Met Phone Dialer kunt u de telefoon-app openen en een nummer doorgeven.

private void BtnTelefoon_Clicked(object sender, EventArgs e)
{
    PhoneDialer.Open("0123456789");
}

SMS

Met SMS verstuurt u een SMS gebruikmakend van de ingebouwde SMS-app van uw toestel.

async private void BtnSMS_Clicked(object sender, EventArgs e)
{
    var message = new SmsMessage("De Tekst", new[] { "nummer ontvanger" });
    await Sms.ComposeAsync(message);
}

Stel de boodschap op via var message = new SmsMessage("De Tekst", new[] { "nummer ontvanger" }); en sms het bericht await Sms.ComposeAsync(message);.

Share

Met Share maakt u gebruik van de Deel-apps van het toestel om tekst of een URL te delen.

async private void BtnDeel_Clicked(object sender, EventArgs e)
{
    await Share.RequestAsync(new ShareTextRequest
    {
        Text = Invoer.Text,
        Title = "Deel tekst"
    });
}

U maakt een Share.RequestAsyn() en stelt hierbinnen een ShareTextRequest op met een tekst en een titel.

Gelijkaardig kunt u een URI delen.

await Share.RequestAsync(new ShareTextRequest
{
    Uri = uri,
    Title = "Share Web Link"
});

Opmerking, het delen van bestanden is op het ogenblik van dit schrijven nog in preview.

Text-to-Speech

Met Text-to-Speech kunt u tekst omzetten naar spraak.

async private void BtnSpreek_Clicked(object sender, EventArgs e)
{
    await TextToSpeech.SpeakAsync(Invoer.Text);

}

Email

Met Email verstuurt u een email met een E-mail-app naar keuze.

async private void BtnMail_Clicked(object sender, EventArgs e)
{
    List<string> Ontvangers = new List<string>();

    Ontvangers.Add("geert.linthoudt@pcvogroeipunt.be");

    var message = new EmailMessage
    {
        Subject = "Test",
        Body = "Dit is een test",
        To = Ontvangers,
        //Cc = ccRecipients,
        //Bcc = bccRecipients
    };
    await Email.ComposeAsync(message);
}

Maak eerst een lijst aan van ontvangers, vervolgens bouwt u de email en verstuurt u deze via await Email.ComposeAsync(message);.

Opmerking, het versturen van bestanden in bijlage is op het ogenblik van dit schrijven nog in preview.

De volledige code:

MainPage

using Xamarin.Forms;
using Xamarin.Essentials;
using System;
using System.Collections.Generic;

namespace TestEssentials
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();

        }

        async private void BtnAppInformatie_Clicked(object sender, System.EventArgs e)
        {
            string Uitvoer = "";

            Uitvoer += "Applicatie" + System.Environment.NewLine + System.Environment.NewLine;
            Uitvoer += "Name: " + AppInfo.Name + System.Environment.NewLine;
            Uitvoer += "PackageName: " + AppInfo.PackageName + System.Environment.NewLine;
            Uitvoer += "Version: " + AppInfo.VersionString + System.Environment.NewLine;
            Uitvoer += "Build: " + AppInfo.BuildString + System.Environment.NewLine;

            await DisplayAlert("PCVO Groeipunt", Uitvoer, "OK");
        }

        private void BtnBatterij_Clicked(object sender, System.EventArgs e)
        {
            Battery.BatteryInfoChanged += Battery_BatteryInfoChanged;
        }

        private void Battery_BatteryInfoChanged(object sender, BatteryInfoChangedEventArgs e)
        {
            var level = e.ChargeLevel;
            var state = e.State;
            var source = e.PowerSource;

            BtnBatterij.Text = $"Level: {level}, State: {state}, Source: {source}";
        }

        private void BtnConnectie_Clicked(object sender, EventArgs e)
        {
            var current = Connectivity.NetworkAccess;

            if (current == NetworkAccess.Internet)
            {
                BtnConnectie.Text = "Verbonden met het internet";
            }
            else
            {
                BtnConnectie.Text = "Niet verbonden met het internet";
            }
        }

        async private void BtnDevice_Clicked(object sender, EventArgs e)
        {
            string Uitvoer = "";

            Uitvoer += "Device" + System.Environment.NewLine + System.Environment.NewLine;
            Uitvoer += "Model: " + DeviceInfo.Model + System.Environment.NewLine;
            Uitvoer += "Manufacturer: " + DeviceInfo.Manufacturer + System.Environment.NewLine;
            Uitvoer += "Name: " + DeviceInfo.Name + System.Environment.NewLine;
            Uitvoer += "version: " + DeviceInfo.VersionString + System.Environment.NewLine;

            await DisplayAlert("PCVO Groeipunt", Uitvoer, "OK");

        }

        async private void BtnLauncher_Clicked(object sender, EventArgs e)
        {
            await Launcher.OpenAsync("https://www.pcvogroeipunt.be/");
        }

        async private void BtnBrowser_Clicked(object sender, EventArgs e)
        {
            await Browser.OpenAsync("https://www.pcvogroeipunt.be/", BrowserLaunchMode.SystemPreferred);
        }

        async private void BtnLocatie_Clicked(object sender, EventArgs e)
        {
            var location = await Geolocation.GetLastKnownLocationAsync();

            if (location != null)
            {
                await DisplayAlert("PCVO Groeipunt", $"Latitude: {location.Latitude}, Longitude: {location.Longitude}, Altitude: {location.Altitude}", "OK");
            }

        }

        async private void BtnMap_Clicked(object sender, EventArgs e)
        {
            var placemark = new Placemark
            {
                CountryName = "België",
                Locality = "PCVO Groeipunt Ninove"
            };
            var options = new MapLaunchOptions { Name = "PCVO Groeipunt" };

            await Map.OpenAsync(placemark, options);
        }

        private void BtnTelefoon_Clicked(object sender, EventArgs e)
        {
            PhoneDialer.Open("0123456789");
        }

        async private void BtnSMS_Clicked(object sender, EventArgs e)
        {
            var message = new SmsMessage("De Tekst", new[] { "naam ontvanger" });
            await Sms.ComposeAsync(message);
        }

        async private void BtnDeel_Clicked(object sender, EventArgs e)
        {
            await Share.RequestAsync(new ShareTextRequest
            {
                Text = Invoer.Text,
                Title = "Deel tekst"
            });
        }

        async private void BtnSpreek_Clicked(object sender, EventArgs e)
        {
            await TextToSpeech.SpeakAsync(Invoer.Text);

        }

        async private void BtnMail_Clicked(object sender, EventArgs e)
        {
            List<string> Ontvangers = new List<string>();

            Ontvangers.Add("geert.linthoudt@pcvogroeipunt.be");

            var message = new EmailMessage
            {
                Subject = "Test",
                Body = "Dit is een test",
                To = Ontvangers,
                //Cc = ccRecipients,
                //Bcc = bccRecipients
            };
            await Email.ComposeAsync(message);
        }
    }
}

AssemblyInfo.cs

using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using Android.App;

// General Information about an assembly is controlled through the following 
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("TestEssentials.Android")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("TestEssentials.Android")]
[assembly: AssemblyCopyright("Copyright ©  2014")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]

// Version information for an assembly consists of the following four values:
//
//      Major Version
//      Minor Version 
//      Build Number
//      Revision
//
// You can specify all the values or you can default the Build and Revision Numbers 
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

// Add some common permissions, these can be removed if not needed
[assembly: UsesPermission(Android.Manifest.Permission.Internet)]
[assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage)]

[assembly: UsesPermission(Android.Manifest.Permission.BatteryStats)]
[assembly: UsesPermission(Android.Manifest.Permission.AccessNetworkState)]

[assembly: UsesPermission(Android.Manifest.Permission.AccessCoarseLocation)]
[assembly: UsesPermission(Android.Manifest.Permission.AccessFineLocation)]
[assembly: UsesFeature("android.hardware.location", Required = false)]
[assembly: UsesFeature("android.hardware.location.gps", Required = false)]
[assembly: UsesFeature("android.hardware.location.network", Required = false)]

En verder…

En verder nog een aantal functionaliteiten die ik aanbied via video.


Behandelde Basiscompetenties uit de module ICT Programmeren – Integratie externe functionaliteiten

  • IC BC024 – * kan zijn eigen deskundigheid inzake ICT opbouwen
  • IC BC232 – kan digitale tools gebruiken om modellen, simulaties en visualisaties van de realiteit te maken
  • IC BC254 – kan externe content integreren en structureren
  • IC BC288 – kan ICT-problemen oplossen

Geef een reactie

Deze website gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.

  • Abonneer je op deze website d.m.v. e-mail

    Voer je e-mailadres in om je in te schrijven op deze website en e-mailmeldingen te ontvangen van nieuwe berichten.