Tutorials Android για αρχάριους Μέρος-4: Παροχέας περιεχομένου

Αυτό το σεμινάριο Android συζητά τις έννοιες του Παροχέα περιεχομένου. Είναι ένα σημαντικό δομικό στοιχείο του Android, διευκολύνοντας την ανταλλαγή δεδομένων στο σύστημα Android.

Στα προηγούμενα σεμινάρια Android για αρχάριους, συζητήσαμε τα τρία πρώτα δομικά στοιχεία του Android: Δραστηριότητα , Πρόθεση και Υπηρεσίες . Αυτό το άρθρο είναι το τέταρτο σε αυτήν τη σειρά σεμιναρίων Android για αρχάριους και συζητά την υπηρεσία παροχής περιεχομένου, η οποία είναι ένα άλλο πολύ σημαντικό στοιχείο του συστήματος Android.



Το Content Provider είναι ο μεσάζων του συστήματός σας Android, διευκολύνοντας την ανταλλαγή δεδομένων μεταξύ διαφορετικών εφαρμογών Android. Ας δούμε λίγο τις λεπτομέρειες αυτού του σεμιναρίου Android.



Πρόγραμμα εκμάθησης Android για αρχάριους-4 μπόνους: Πραγματοποιήστε λήψη του κώδικα παροχής περιεχομένου εδώ . Θα θέλατε αυτόν τον κωδικό μόλις περάσετε από το σεμινάριο! :)

[dl url = '#' class = 'eModal eModal-6 ″ title =' Κωδικός λήψης 'desc =' 'type =' 'align =' 'for =' download ']



Tutorials Android: Παροχέας περιεχομένου

Ο Παροχέας περιεχομένου διευκολύνει την πρόσβαση σε ένα κεντρικό κατάστημα δεδομένων ή αποθήκη για να επιτρέπεται η κοινή χρήση δεδομένων και ο χειρισμός δεδομένων σε διαφορετικές εφαρμογές.

Ακολουθούν μερικά παραδείγματα προεπιλεγμένων παρόχων περιεχομένου στο API του συστήματος Android:

Tutorials Android: Προεπιλεγμένοι πάροχοι περιεχομένου στο σύστημα Android



Αυτοί οι πάροχοι περιεχομένου επιτρέπουν στον χρήστη την αφαίρεση από μια υποκείμενη βάση δεδομένων. Γενικά, οι πάροχοι περιεχομένου χρησιμοποιούν το SQLite για την αποθήκευση της υποκείμενης βάσης δεδομένων.

Ας πάρουμε το πάντα χρήσιμο παράδειγμα της καλής παλιάς εφαρμογής Facebook, που μας βοήθησε να απλοποιήσουμε τα πράγματα και σε προηγούμενα σεμινάρια Android!

Όλοι έχετε κάποια στιγμή στη ζωή σας στα κοινωνικά δίκτυα, έχετε ανεβάσει μια φωτογραφία στο χρονοδιάγραμμά σας στο Facebook, σωστά! Πως το κανεις?

Κάνοντας κλικ στο κουμπί Φωτογραφία στον τοίχο, μεταβαίνετε στη συλλογή φωτογραφιών. Από εκεί μπορείτε να επιλέξετε μια φωτογραφία για μεταφόρτωση.

Έχοντας διαβάσει τα προηγούμενα άρθρα του Σειρά Android Tutorials , ξέρετε για τις Δραστηριότητες και τις Προθέσεις, ξέρετε ότι αυτό συμβαίνει:

Το Facebook Wall σας είναι «ΔΡΑΣΤΗΡΙΟΤΗΤΑ». Καθώς κάνετε κλικ στο κουμπί φωτογραφίας, μεταδίδεται ένα 'INTENT', το οποίο μεταδίδει το μήνυμα και ανοίγει το 'CONTENT PROVIDER' (Photo Gallery). Η φωτογραφία μεταφορτώνεται χρησιμοποιώντας μια μεταφόρτωση δικτύου 'SERVICE'.

Παρακολουθήστε αυτό το ζωντανό βίντεο για να μάθετε πώς λειτουργεί ο Παροχέας περιεχομένου μέσα στην εφαρμογή σας στο Facebook.

μετατρέψτε διπλό σε ακέραιο σε java

Γιατί το Σύστημα Android χρειάζεται Παροχείς Περιεχομένου;

Η ανάγκη για πάροχοι περιεχομένου προκύπτει επειδή η βάση δεδομένων που δημιουργήθηκε σε μία εφαρμογή δεν είναι ορατή σε μια δεύτερη εφαρμογή.

Είναι απλό να δημιουργήσετε και να αποθηκεύσετε βάση δεδομένων σε διαφορετικές εφαρμογές χρησιμοποιώντας SQLite, ωστόσο το πρόβλημα είναι αυτό, μια βάση δεδομένων στο Android είναι ιδιωτική για την εφαρμογή που τη δημιουργεί . Δεν υπάρχει κοινός χώρος αποθήκευσης στο Android στον οποίο μπορεί να έχει πρόσβαση κάθε εφαρμογή. Επομένως, για τη χρήση μιας βάσης δεδομένων από διαφορετικές εφαρμογές, το σύστημα Android χρειάζεται μια διεπαφή που επιτρέπει την ανταλλαγή δεδομένων μεταξύ εφαρμογών και διεργασιών. Εδώ έρχεται να παίξει ο πάροχος περιεχομένου.

Χρειάζομαι πραγματικά έναν πάροχο περιεχομένου;

1) Εσείς δεν χρειάζεται να αναπτύξετε τον δικό σας πάροχο εάν θέλετε μια ιδιωτική βάση δεδομένων για μια συγκεκριμένη εφαρμογή (αυτή η βάση δεδομένων δεν θα ήταν προσβάσιμη σε άλλες εφαρμογές από αυτήν που τη δημιούργησε).

2) Ωστόσο χρειάζεστε έναν Προσαρμοσμένο πάροχο για να παρέχετε προσαρμοσμένες προτάσεις αναζήτησης στο δικό σας σύστημα εφαρμογών.

3) Θα χρειαστείτε επίσης έναν πάροχο περιεχομένου για αντιγραφή και επικόλληση σύνθετων δεδομένων από την εφαρμογή σας σε άλλες εφαρμογές.

Ποιες είναι οι λειτουργίες που υποστηρίζονται από έναν πάροχο περιεχομένου;

Οι πάροχοι περιεχομένου υποστηρίζουν τις ακόλουθες βασικές λειτουργίες:

ένας) Ερώτημα: Ερώτηση του Παροχέα περιεχομένου για όλα τα αντικείμενα, με βάση το καθορισμένο URI.

2) Διαγράφω: Διαγράφει τα καθορισμένα αντικείμενα από τη βάση δεδομένων ενός παρόχου περιεχομένου.

3) Εκσυγχρονίζω: Κάνει ενημερώσεις στα αντικείμενα της βάσης δεδομένων.

4) Εισάγετε: Εισάγει νέο αντικείμενο στη βάση δεδομένων.

Βήματα για την εκτέλεση μιας λειτουργίας στον Παροχέα περιεχομένου

Βήμα 1: Πρόσβαση σε έναν πάροχο περιεχομένου

Αντικείμενο πελάτη ContentResolver χρησιμοποιείται για την πρόσβαση σε δεδομένα από τον Παροχέα περιεχομένου. Επικοινωνεί με αντικείμενο παρόχου, το οποίο με τη σειρά του αποδέχεται το αίτημα πρόσβασης στα δεδομένα και επιστρέφει τα επιθυμητά αποτελέσματα. Η διεπαφή ανταλλαγής δεδομένων που παρέχεται από τον πάροχο και το αντικείμενο πελάτη παρόχου επιτρέπει την επικοινωνία μεταξύ διαφορετικών διαδικασιών / εφαρμογών.

Η εφαρμογή που πρέπει να έχει πρόσβαση στη βάση δεδομένων πρέπει να το δηλώσει και να ζητήσει δικαιώματα στο αρχείο δήλωσης. Αυτό θα συζητηθεί λεπτομερώς στα επόμενα σεμινάρια Android.

URI περιεχομένου

Το URI περιεχομένου είναι ένα από τα επιχειρήματα που χρησιμοποιούνται για την αναγνώριση των δεδομένων σε έναν πάροχο. Έχει τέσσερα μέρη:

ένας) Σχέδιο: Το σχήμα για τον πάροχο περιεχομένου έχει μια σταθερή τιμή: 'περιεχόμενο'.

2) Εξουσία: Είναι το συμβολικό όνομα του παρόχου και είναι μοναδικό για κάθε έναν. Έτσι ξεχωρίζουμε τον επιθυμητό πάροχο περιεχομένου από μια λίστα με τόσα πολλά.

3) Μονοπάτι: Μονοπάτι βοηθά στη διάκριση των απαιτούμενων δεδομένων από την πλήρη βάση δεδομένων . Για παράδειγμα, ο πάροχος περιεχομένου καταγραφής κλήσεων κάνει διάκριση μεταξύ αναπάντητων κλήσεων, ληφθέντων κλήσεων κ.λπ. χρησιμοποιώντας διαφορετικές διαδρομές.

4) ΤΑΥΤΟΤΗΤΑ: Δεν είναι υποχρεωτικό στοιχείο και ενδέχεται να μην υπάρχει στο URI, αλλά εάν υπάρχει, θα πρέπει να είναι αριθμητικό. Για παράδειγμα, εάν θέλετε να αποκτήσετε πρόσβαση σε ένα συγκεκριμένο αρχείο μουσικής από τον Παροχέα περιεχομένου πολυμέσων, θα πρέπει επίσης να καθορίσετε ένα αναγνωριστικό .

πώς να κόβετε σε java

Η διαδικασία

Χρησιμοποιώντας την αρχή παροχής, το ContentResolver προσδιορίζει τον σωστό πάροχο περιεχομένου (καθώς η αρχή είναι μοναδική για κάθε πάροχο περιεχομένου). Μετά από αυτό, το στοιχείο διαδρομής του URI χρησιμοποιείται για την επιλογή του σωστού (ζητούμενου) πίνακα δεδομένων. Σε περίπτωση που υπάρχει αναγνωριστικό, ο πάροχος θα γνωρίζει ποια ακριβή δεδομένα ζητούνται.

Τα URI είναι δύο τύπων:

Επιπλέον, τα URI μπορούν επίσης να έχουν περιοριστικές πληροφορίες.

Βήμα 2: Πώς να ανακτήσετε δεδομένα από έναν πάροχο περιεχομένου

Ακόμα κι αν το ContentResolver έχει πρόσβαση στον πίνακα δεδομένων τώρα, δεν μπορεί να ανακτήσει τα απαιτούμενα δεδομένα, εκτός εάν έχει η εφαρμογή 'Άδεια πρόσβασης ανάγνωσης' για τον συγκεκριμένο πάροχο. Αυτή η άδεια ορίζεται στο αρχείο δήλωσης κάθε παροχέα περιεχομένου.

Όλα αυτά μια εφαρμογή (που θέλει να έχει πρόσβαση σε αυτήν τη βάση δεδομένων) πρέπει να κάνετε είναι να ζητήσετε αυτήν την άδεια.

Τώρα όπως συζητήθηκε νωρίτερα σε αυτό το σεμινάριο Android, τέσσερις λειτουργίες μπορούν να πραγματοποιηθούν χρησιμοποιώντας έναν πάροχο περιεχομένου . Θα ξεπεράσουμε το ένα προς ένα.

ΕΡΩΤΗΣΗ

Τώρα, έχετε πρόσβαση στον πάροχο και έχετε άδεια για ανάκτηση δεδομένων από αυτόν. Το επόμενο βήμα είναι να κατασκευάστε το ερώτημα για να ζητήσετε την απαιτούμενη ενέργεια από τον πάροχο .

Ακολουθούν τα ορίσματα που χρησιμοποιούνται κατά την αναζήτηση:

ένας) ΜΙΣΩ : Λειτουργεί ακριβώς όπως εξηγείται παραπάνω.

2) Προβολή: Το ερώτημα πρέπει επιστρέψτε ένα σύνολο στηλών από ολόκληρο τον πίνακα βάσης δεδομένων . Αυτό είναι γνωστό ως προβολή. Εάν περάσετε το null, θα επιστραφούν όλες οι στήλες, οι οποίες είναι αναποτελεσματικές.

3) Ρήτρα επιλογής: ΠΡΟΣ ΤΟ φίλτρο δηλώνοντας ποιες σειρές θα επιστρέψουν , μορφοποιημένο ως ρήτρα SQL WHERE (εξαιρουμένου του ίδιου του WHERE). Εάν περάσετε το null, θα εμφανιστούν όλες οι σειρές για το δεδομένο URI.

Για παράδειγμα, εάν εισαγάγετε ένα αλφάβητο (πείτε 'P') στη στήλη αναζήτησης του βιβλίου διευθύνσεών σας, τότε θα επιστρέψει όλα τα στοιχεία επικοινωνίας ξεκινώντας από 'P'. Ωστόσο, εάν δεν εισαγάγετε τίποτα στη γραμμή αναζήτησης, ανακτάται η πλήρης λίστα επαφών (η ρήτρα επιλογής έχει οριστεί σε «null» σε τέτοιες περιπτώσεις).

4) Επιλογή Επιλογής: Μπορείτε να συμπεριλάβετε τα '? S' στην επιλογή, τα οποία θα αντικατασταθούν από τις τιμές από την επιλογήArgs, με τη σειρά που εμφανίζονται στην επιλογή.

5) Σειρά ταξινόμησης: Ρήτρα SQL ORDER BY (εκτός από το ίδιο το ORDER BY). Εάν περάσετε το null, θα ληφθούν τα αποτελέσματα που ενδέχεται να μην είναι ταξινομημένα.

ΠΑΡΑΔΕΙΓΜΑ ΚΩΔΙΚΟΥ για ερώτημα:

  • Αναζήτηση αριθμών τηλεφώνου στις Επαφές
Δρομέας δρομέα = contentresolver.query (ContactsContract.Contacts.CONTENT_URI, null, null, null, null) int count = cursor.getCount () if (count> 0) {String contactDetails = 'while (cursor.moveToNext ()) { String columnId = ContactsContract.Contacts._ID int cursorIndex = cursor.getColumnIndex (columnId) String id = cursor.getString (cursorIndex) String name = cursor.getString (δρομέας .getColumnIndex (ContactsContract.Contacts.InISerp) (cursor.getString (cursor .getColumnIndex (ContactsContract.Contacts.HAS_PHONE_NUMBER))) if (numCount> 0) {Cursor phoneCursor = contentresolver.query (ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, CommonTP , νέο String [] {id}, null) ενώ (phoneCursor.moveToNext ()) {String phoneNo = phoneCursor.getString (phoneCursor .getColumnIndex (ContactsContract.CommonDataKinds. Phone.NUMBER)) contactDetails + = 'Όνομα:' + όνομα + ', Αριθμός τηλεφώνου:' + phoneNo + '} phoneCursor.close ()}}}

ΕΙΣΑΓΩΓΗ

Ας υποθέσουμε ότι θέλετε να εισαγάγετε νέες επαφές στο βιβλίο διευθύνσεών σας. Αντικείμενο ContentValues χρησιμοποιείται για να κάνει αυτές τις εισαγωγές. Τα πλήκτρα αντικειμένου ContentValue και οι στήλες του Παροχέα περιεχομένου πρέπει να ταιριάζουν για να επιτευχθεί αυτό. Ακολουθεί ένα παράδειγμα για αυτό:

χρησιμοποιώντας την κλάση σαρωτή στην Java

ΠΑΡΑΔΕΙΓΜΑ ΚΩΔΙΚΟΥ για εισαγωγή:

  • Η λειτουργία είναι να εισαγάγετε νέα καταχώριση με το όνομα 'Rajnikant' και τον αριθμό '9988999888'
// Λειτουργία ArrayList ops = new ArrayList () int rawContactInsertIndex = ops.size () ops.add (ContentProviderOperation.newInsert (RawContacts.CONTENT_URI) .withValue (RawContacts.ACCOUNT_TYPE, null) .withValue (RawContact). RawContact, RawContact. ()) ops.add (ContentProviderOperation .newInsert (Data.CONTENT_URI) .withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue (Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE). ) ops.add (ContentProviderOperation.newInsert (Data.CONTENT_URI) .withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue (Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE) .08. Τηλέφωνο. , Phone.TYPE_MOBILE) .build ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)

ΕΝΗΜΕΡΩΣΗ

Για να ενημερώσετε έναν πάροχο περιεχομένου χρησιμοποιούνται τα ακόλουθα ορίσματα:

ένας) ΜΙΣΩ: Το URI του παρόχου περιεχομένου

2) Τιμές περιεχομένου: Αυτό περιέχει τις τιμές που θα αντικαταστήσουν τα υπάρχοντα δεδομένα.

3) Ρήτρα επιλογής: Αυτό μπορεί να σας βοηθήσει να επιλέξετε τις συγκεκριμένες εγγραφές για ενημέρωση

4) Επιλογή Επιλογής: Μπορείτε να συμπεριλάβετε τα '? S' στην επιλογή, τα οποία θα αντικατασταθούν από τις τιμές από την επιλογήArgs, με τη σειρά που εμφανίζονται στην επιλογή.

Για άλλη μια φορά, το Τα κλειδιά του αντικειμένου ContentValues ​​πρέπει να ταιριάζουν με τις στήλες του Content Provider Διαφορετικά, η ενημέρωση δεν θα συμβεί.

ΠΑΡΑΔΕΙΓΜΑ ΚΩΔΙΚΟΥ ΓΙΑ Ενημέρωση:

  • Ενημέρωση του αριθμού τηλεφώνου όπου το όνομα είναι 'Rajnikant'
Συμβολοσειρά όπου = ContactsContract.Data.DISPLAY_NAME + '=? 'String [] params = new String [] {'Rajnikant'} ArrayList ops = new ArrayList () ops.add (ContentProviderOperation.newUpdate (ContactsContract.Data.CONTENT_URI) .withSelection (Where, params) .withValue (ContactsContract.Common. Phone.NUMBER, '9876543210') .build ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)

ΔΙΑΓΡΑΦΗ

Η διαγραφή χρησιμοποιεί τα ίδια ορίσματα με την ενημέρωση, με εξαίρεση το όρισμα ContentValues, το οποίο δεν απαιτείται, καθώς δεν θα υπάρχουν υποκατεστημένες τιμές.

ΠΑΡΑΔΕΙΓΜΑ ΚΩΔΙΚΟΥ ΓΙΑ Διαγραφή:

  • Διαγράψτε την επαφή όπου το όνομα είναι 'Rajnikant'
Συμβολοσειρά όπου = ContactsContract.Data.DISPLAY_NAME + '=? 'String [] params = new String [] {'Rajnikant'} ArrayList ops = new ArrayList () ops.add (ContentProviderOperation.newDelete (ContactsContract.RawContacts.CONTENT_URI) .withSelection (όπου, params) .build ()) getContentResol. ) .applyBatch (ContactsContract.AUTHORITY, ops)

Σε περίπτωση λειτουργίας Εισαγωγής, το URI πρέπει να βασίζεται στον κατάλογο. Σε όλες τις άλλες περιπτώσεις, τα URI μπορούν να βασίζονται είτε σε ID είτε σε κατάλογο.

Ελπίζουμε Εκπαιδευτικό πρόγραμμα Android για αρχάριους: Μέρος 5 δεν ήταν πολύ δύσκολο να καταλάβουμε! Θα συζητήσουμε περισσότερα σχετικά με τους παρόχους περιεχομένου σε μεταγενέστερους οδηγούς Android. Απολαύστε τα βασικά μέχρι τότε!

Έχετε αμφιβολίες σε αυτό το σεμινάριο Android; Ρωτήστε μας.

Καλή μάθηση!

Χρησιμοποιήθηκαν οι παρακάτω πόροι για τη δημιουργία αυτού του Οδηγού Android! Επίσημοι προγραμματιστές Android , Edureka.in

Μπορεί επίσης να σας αρέσουν αυτές οι σχετικές δημοσιεύσεις: