Projekt-Anfragen: Tel: 07022/9319004 info@CodeDocu.de Software Entwicklung in C# WPF Asp.Net Core Vba Excel Word SQL-Server EF Linq, UWP Net
#

UWP: Kontakte in einer App schreiben, lesen und erweitern.

 

Wenn man in der Windows 10 Universal App Kontakte erweitern möchte ohne den ContactPicker zu verwenden, dann benötigt man den Zugriff zu den Kontakten des Windows 10 Systems.

 

Im gezeigten Beispiel werden Kontakte aus der AVM Fritzbox ermittelt und in die Windows 10 Contacts importiert. Der Vorgang geht für Windows 10 Desktop und Mobile Versionen.

 

Diesen Zugriff bekommt man dadurch, dass man unter der Datei Package.appxmanifest die Funktion: Kontaktpersonen aktiviert.

Beschreibung: Bietet die Möglichkeit zum Aufführen der Aggregate auf dem Telefon. Mit dieser Funktion kann ihre App auf alle verknüpften Kontakte zugreifen und eine Übersicht über die Person bereitstellen.

 

Kontakte als Funktion in der App einbauen:

 

Wird beschrieben unter:

https://msdn.microsoft.com/library/windows/apps/xaml/mt270968.aspx

Die contacts-Funktion ermöglicht den Zugriff auf die aggregierte Ansicht der Kontakte aus verschiedenen Kontaktspeichern. Mit dieser Funktion erhält die App eingeschränkten Zugriff (dabei gelten Regeln für Netzwerkberechtigungen) auf Kontakte, die mit verschiedenen Netzwerken synchronisiert wurden, und auf den lokalen Kontaktspeicher.

Die contacts-Funktion muss den uap-Namespace enthalten, wenn sie im App-Paketmanifest wie unten dargestellt deklariert wird.

XML

<Capabilities>

        <uap:Capability Name="contacts"/>

</Capabilities>

 

 

 

 

ContactStore

Bevor man auf die Kontakte zugreifen kann, sollte man mit dem Contactmanager den ContactStore  mit Schreib Leserechten erstellen.

//< Kontrolle.Zugriff Kontakte >

//ContactList contactList = Windows.ApplicationModel.Contacts.ContactList;

//if this is throwing Access Denied, you haven't declared the contacts capability in the manifest

ContactStore contactStore = await ContactManager.RequestStoreAsync(ContactStoreAccessType.AppContactsReadWrite);

 

if (contactStore == null)

{

    //Could not open the contacts store because the user denied you in settings, sorry!

    MessageDialog connectionWarning =

        new MessageDialog("The app needs access to your contacts in order to function correctly. " + "Please grant it access using the options in the settings menu ", "Lost Connection to Store");

    await connectionWarning.ShowAsync();

 

    //you should probably ask the user before taking him/her to the settings page, but ya know, sample

    await Windows.System.Launcher.LaunchUriAsync(new Uri("ms-settings:privacy-contacts"));

    return;

}

//</ Kontrolle.Zugriff Kontakte >

 

 

ContactLists ermitteln

 

Bei Windows 10 Contacts arbeitet man eigentlich immer mit der eigenen Kontaktliste der App.

Hierzu erstellt man beim ersten mal eine neue ContactList und gibt dieser einen Namen passend zur App.

Auf diese sollte man eigentlich dann immer vollen Zugriff haben und hieraus Contact Element erstellen und löschen können.

Leider geht das Überschreiben von contacts zur Zeit 02/2016 noch nicht ohne Probleme (Schreibrechte)

//< aktuelle Kontakt-Liste >

//< alle ContactLists ermitteln >

IReadOnlyList<ContactList> contactLists = await contactStore.FindContactListsAsync();

//</ alle ContactLists ermitteln >

 

//< A: Listen loeschen >

//*und spaeter neu erstellen

foreach (ContactList delete_List in contactLists)

{

    await delete_List.DeleteAsync();

}

//</ A: Listen loeschen >

 

ContactList contactList =null;

//< neue Liste erstellen >

if (contactLists.Count == 0)

{

    contactList = await contactStore.CreateContactListAsync("FritzBox");

}

//</ neue Liste erstellen >

//--< nach bestehender Liste suchen >--

//*funktioniert beim speichern von Contact noch nicht wegen schreibschutz

else

{

    foreach (ContactList check_ContactList in contactLists)

    {

        if(check_ContactList!=null)

        {

if (check_ContactList.DisplayName == "FritzBox")

{

    contactList = await contactStore.GetContactListAsync(check_ContactList.Id);

    break;

}

        }

    }

    if (contactList == null)

    {

        //contactList = contactLists.FirstOrDefault();

        contactList = await contactStore.CreateContactListAsync("FritzBox");

    }

}

//--</ nach bestehender Liste suchen >--

//</ aktuelle Kontakt-Liste >

 

Contacts

Auf die Kontakte greift man über die ContactList und kann hier über await contactList.SaveContactAsync(newContact); Kontakte speichern

Nach dem aktuellen Stand 02/2016 besteht leider noch ein Schreibrechte Problem sobald man über Windows 10 UWP universal App einen Contact speichern möchte

//------< Neue Kontakte eintragen >------

try

{

    //----< @Loop: alle Zeilen ausgeben >----

    foreach (tblRowDef_Kontakte row in _listTelefon)

    {

        //< Contact Fritzbox >

        string sName = row.Kontakt_Name;

        string sTelefonNummer = row.Kontakt_Nummer;

        //string contactID = "fritzBox_" + sTelefonNummer;

        //</ Contact Fritzbox >

 

        //--< Check Existing Contact >--

        //*by Phone-Number

 

        //< Find-Contacts >

        IReadOnlyList<Contact>  contacts = await contactStore.FindContactsAsync(sTelefonNummer); //

        //</ Find-Contacts >

 

        if (contacts.Count > 0)

        {

//----< Contact_Exits >----

//*check rename

foreach (Contact contact in contacts)

{

    //Debug.WriteLine("Name=" + contact.DisplayName + ":" + contact.Id +  " , Number=" + contact.Phones[0].Number );

    if (contact.DisplayName == sName )

    {

        //< Contact aendern und speichern >

        //Contact oldContact = await contactStore.GetContactAsync(contact.Id);

        //await contactList.DeleteContactAsync(oldContact);

        //oldContact.Name = sName;

        //await contactList.SaveContactAsync(oldContact);

        //}

        //</ Contact aendern und speichern >

    }

}

//----</ Contact_Exits >----

        }

        else

        {

//----< No_Contact_Exits >----

//< create Contact >

Contact newContact=new Contact();

//</ create Contact >

newContact.Name = sName;

ContactPhone contactPhone = new ContactPhone();

contactPhone.Number = sTelefonNummer;

newContact.Phones.Add(contactPhone);

 

Debug.WriteLine("Name=" + sName + " " + sTelefonNummer);

 

//< save contact >

await contactList.SaveContactAsync(newContact);

//</ save contact >

 

//----</ No_Contact_Exits >----

        }

        //--</ Check Existing Contact >--

    }

    //--</ @Loop: alle Zeilen ausgeben >--   

    //------</ Neue Kontakte eintragen >------    

 

Mobile
»
UWP: Hintergrund von Windows 10 Desktop ändern
»
UWP Sample: ContextMenu als XAML Flyout in Page Resources
»
UWP Sample: Context-Menu PopupMenu
»
UWP Sample: MediaEditing Bearbeiten von Videos
»
UWP Beispiel: Drawing Lines Ink
»
UWP Beispiel: Simple Imaging, Images Pictures
»
Win10 Sample: Title bar sample
»
Face Detection Sample #Win10
»
Win10 Sample: CameraGetPreviewFrame
»
Win10 Samples: CameraResolution Video and Photo

.

Jobs, Projekte, Angebote für Freiberufler, Selbstständig an Info@CodeDocu.de