ప్రారంభకులకు మా మునుపటి Android ట్యుటోరియల్లలో, మేము Android యొక్క మొదటి మూడు బిల్డింగ్ బ్లాక్లను చర్చించాము: కార్యాచరణ , ఉద్దేశం మరియు సేవలు . ఈ వ్యాసం ఆండ్రాయిడ్ ట్యుటోరియల్స్ ప్రారంభకులకు నాల్గవది మరియు కంటెంట్ ప్రొవైడర్ గురించి చర్చిస్తుంది, ఇది Android సిస్టమ్ యొక్క మరొక చాలా ముఖ్యమైన భాగం.
కంటెంట్ ప్రొవైడర్ మీ Android సిస్టమ్ యొక్క మధ్యవర్తి, వివిధ Android అనువర్తనాల మధ్య డేటా మార్పిడిని సులభతరం చేస్తుంది. ఈ ఆండ్రాయిడ్ ట్యుటోరియల్లో దాని వివరాలను కొంచెం తెలుసుకుందాం.
ప్రారంభ -4 బోనస్ కోసం Android ట్యుటోరియల్: కంటెంట్ ప్రొవైడర్ కోడ్ను ఇక్కడ డౌన్లోడ్ చేయండి . మీరు ట్యుటోరియల్ ద్వారా వెళ్ళిన తర్వాత ఈ కోడ్ కావాలి! :)
[dl url = ”#” class = ”eModal eModal-6 ″ title =” డౌన్లోడ్ కోడ్ ”desc =” ”type =” ”align =” ”for =” download ”]
Android ట్యుటోరియల్స్: కంటెంట్ ప్రొవైడర్
విభిన్న అనువర్తనాల్లో డేటా షేరింగ్ మరియు డేటా మానిప్యులేషన్ను అనుమతించడానికి కంటెంట్ ప్రొవైడర్ సెంట్రల్ డేటా స్టోర్ లేదా గిడ్డంగికి ప్రాప్యతను సులభతరం చేస్తుంది.
Android సిస్టమ్ యొక్క API లో డిఫాల్ట్ కంటెంట్ ప్రొవైడర్ల యొక్క కొన్ని ఉదాహరణలు ఇక్కడ ఉన్నాయి:
ఈ కంటెంట్ ప్రొవైడర్లు అంతర్లీన డేటాబేస్ నుండి వినియోగదారు సంగ్రహణను అనుమతిస్తారు. సాధారణంగా, అంతర్లీన డేటాబేస్ను నిల్వ చేయడానికి కంటెంట్ ప్రొవైడర్లు SQLite ని ఉపయోగిస్తారు.
మునుపటి ఆండ్రాయిడ్ ట్యుటోరియల్లోని విషయాలను సరళీకృతం చేయడానికి మాకు సహాయపడిన మంచి పాత ఫేస్బుక్ అనువర్తనం యొక్క ఎప్పటికప్పుడు సహాయపడే ఉదాహరణను తీసుకుందాం!
మీ సోషల్ నెట్వర్కింగ్ జీవితంలో మీరందరూ ఏదో ఒక సమయంలో, మీ ఫేస్బుక్ టైమ్లైన్కు ఒక చిత్రాన్ని అప్లోడ్ చేసారు, సరియైనది! మీరు దీన్ని ఎలా చేస్తారు?
గోడపై ఉన్న ఫోటో బటన్ను క్లిక్ చేసినప్పుడు, మీరు ఫోటో గ్యాలరీకి చేరుకుంటారు. అక్కడ నుండి మీరు అప్లోడ్ చేయడానికి ఫోటోను ఎంచుకోవచ్చు.
యొక్క మునుపటి కథనాలను చదివిన తరువాత Android ట్యుటోరియల్స్ సిరీస్ , కార్యాచరణలు మరియు ఉద్దేశ్యాల గురించి మీకు తెలుసు, కాబట్టి ఇది జరుగుతుందని మీకు తెలుసు:
మీ ఫేస్బుక్ వాల్ “యాక్టివిటీ”. మీరు ఫోటో బటన్ పై క్లిక్ చేసినప్పుడు, సందేశాన్ని తెలియజేసే “INTENT” పాస్ అవుతుంది మరియు “CONTENT PROVIDER” (ఫోటో గ్యాలరీ) తెరుచుకుంటుంది. నెట్వర్క్ అప్లోడ్ “SERVICE” ఉపయోగించి ఫోటో అప్లోడ్ చేయబడింది.
మీ ఫేస్బుక్ అప్లికేషన్ లోపల కంటెంట్ ప్రొవైడర్ ఎలా పనిచేస్తుందో తెలుసుకోవడానికి ఈ ప్రత్యక్ష వీడియో చూడండి.
జావా శ్రేణిలో అతిపెద్ద సంఖ్యను కనుగొంటుంది
Android సిస్టమ్కు కంటెంట్ ప్రొవైడర్లు ఎందుకు అవసరం?
ఒక అనువర్తనంలో సృష్టించబడిన డేటాబేస్ రెండవ అనువర్తనానికి కనిపించనందున కంటెంట్ ప్రొవైడర్ల అవసరం తలెత్తుతుంది.
SQLite ఉపయోగించి వేర్వేరు అనువర్తనాల్లో డేటాబేస్ను సృష్టించడం మరియు నిల్వ చేయడం చాలా సులభం, అయితే సమస్య ఇది, Android లోని డేటాబేస్ దానిని సృష్టించే అనువర్తనానికి ప్రైవేట్ . ప్రతి అనువర్తనం యాక్సెస్ చేయగల Android లో సాధారణ నిల్వ ప్రాంతం లేదు. అందువల్ల, వేర్వేరు అనువర్తనాలు డేటాబేస్ను ఉపయోగించడానికి, ఆండ్రాయిడ్ సిస్టమ్కు ఇంటర్-అప్లికేషన్ మరియు ఇంటర్-ప్రాసెస్ డేటా మార్పిడిని అనుమతించే ఇంటర్ఫేస్ అవసరం. కంటెంట్ ప్రొవైడర్ ఆడటానికి ఇక్కడే వస్తుంది.
నాకు నిజంగా కంటెంట్ ప్రొవైడర్ అవసరమా?
1) మీరు మీకు ప్రైవేట్ డేటాబేస్ కావాలంటే మీ స్వంత ప్రొవైడర్ను అభివృద్ధి చేయవలసిన అవసరం లేదు ఒక నిర్దిష్ట అనువర్తనం కోసం (ఈ డేటాబేస్ దానిని సృష్టించిన అనువర్తనాలకు కాకుండా ఇతర అనువర్తనాలకు ప్రాప్యత చేయదు).
2) అయితే మీరు అనుకూల శోధన సూచనలను అందించడానికి అనుకూల ప్రొవైడర్ అవసరం మీ స్వంత అప్లికేషన్ సిస్టమ్లో.
3) మీకు కంటెంట్ ప్రొవైడర్ కూడా అవసరం మీ అప్లికేషన్ నుండి ఇతర అనువర్తనాలకు సంక్లిష్ట డేటాను కాపీ చేసి అతికించడానికి.
కంటెంట్ ప్రొవైడర్ మద్దతు ఇచ్చే కార్యకలాపాలు ఏమిటి?
కంటెంట్ ప్రొవైడర్లు ఈ క్రింది ప్రాథమిక కార్యకలాపాలకు మద్దతు ఇస్తారు:
ఒకటి) ప్రశ్నించడం: పేర్కొన్న URI ఆధారంగా అన్ని వస్తువుల కోసం కంటెంట్ ప్రొవైడర్ను ప్రశ్నిస్తుంది.
2) తొలగించు: కంటెంట్ ప్రొవైడర్ యొక్క డేటాబేస్ నుండి పేర్కొన్న వస్తువులను తొలగిస్తుంది.
3) నవీకరణ: డేటాబేస్లోని వస్తువులకు నవీకరణలను చేస్తుంది.
4) చొప్పించు: డేటాబేస్కు కొత్త వస్తువును చొప్పిస్తుంది.
సి సి ++ మరియు జావా మధ్య వ్యత్యాసం
కంటెంట్ ప్రొవైడర్లో ఆపరేషన్ చేయడానికి దశలు
దశ 1: కంటెంట్ ప్రొవైడర్ను యాక్సెస్ చేస్తోంది
ContentResolver క్లయింట్ ఆబ్జెక్ట్ కంటెంట్ ప్రొవైడర్ నుండి డేటాను యాక్సెస్ చేయడానికి ఉపయోగించబడుతుంది. ఇది ప్రొవైడర్ ఆబ్జెక్ట్తో కమ్యూనికేట్ చేస్తుంది, ఇది డేటాను యాక్సెస్ చేయాలనే అభ్యర్థనను అంగీకరిస్తుంది మరియు కావలసిన ఫలితాలను అందిస్తుంది. ప్రొవైడర్ మరియు ప్రొవైడర్ క్లయింట్ ఆబ్జెక్ట్ అందించిన డేటా ఎక్స్ఛేంజ్ ఇంటర్ఫేస్ వివిధ ప్రక్రియలు / అనువర్తనాలలో కమ్యూనికేషన్ను అనుమతిస్తుంది.
డేటాబేస్ను యాక్సెస్ చేయవలసిన అనువర్తనం దీనిని ప్రకటించాలి మరియు దాని మానిఫెస్ట్ ఫైల్లో అనుమతులను అభ్యర్థించాలి. ఇది మా తదుపరి Android ట్యుటోరియల్లో వివరంగా చర్చించబడుతుంది.
కంటెంట్ URI
ప్రొవైడర్లోని డేటాను గుర్తించడానికి ఉపయోగించే వాదనలలో కంటెంట్ URI ఒకటి. దీనికి నాలుగు భాగాలు ఉన్నాయి:
ఒకటి) పథకం: కంటెంట్ ప్రొవైడర్ కోసం పథకం స్థిరమైన విలువను కలిగి ఉంది: “కంటెంట్”.
2) అధికారం: ఇది ప్రొవైడర్ యొక్క సింబాలిక్ పేరు, మరియు ప్రతి ఒక్కరికి ప్రత్యేకమైనది. ఈ విధంగా మేము చాలా మంది జాబితా నుండి కావలసిన కంటెంట్ ప్రొవైడర్ను వేరు చేస్తాము.
3) మార్గం: మార్గం పూర్తి డేటాబేస్ నుండి అవసరమైన డేటాను వేరు చేయడానికి సహాయపడుతుంది . ఉదాహరణకు, కాల్ లాగ్ కంటెంట్ ప్రొవైడర్ మిస్డ్ కాల్స్, స్వీకరించిన కాల్స్ మొదలైన వాటి మధ్య విభిన్న మార్గాలను ఉపయోగిస్తుంది.
4) ID: ఇది తప్పనిసరి భాగం కాదు, మరియు URI లో ఉండకపోవచ్చు కాని ఉంటే, అది సంఖ్యాపరంగా ఉండాలి. ఉదాహరణకి, మీరు మీ మీడియా కంటెంట్ ప్రొవైడర్ నుండి నిర్దిష్ట మ్యూజిక్ ఫైల్ను యాక్సెస్ చేయాలనుకుంటే, మీరు ఒక ఐడిని కూడా పేర్కొంటారు .
ప్రక్రియ
ప్రొవైడర్ అధికారాన్ని ఉపయోగించి, కంటెంట్ రిసోల్వర్ సరైన కంటెంట్ ప్రొవైడర్ను గుర్తిస్తుంది (అధికారం ప్రతి కంటెంట్ ప్రొవైడర్కు ప్రత్యేకమైనది). అది చేసిన తరువాత, సరైన (అభ్యర్థించిన) డేటా పట్టికను ఎంచుకోవడానికి URI యొక్క మార్గం భాగం ఉపయోగించబడుతుంది. ఒకవేళ ఒకవేళ ఉంటే, ఖచ్చితమైన డేటా ఏమి అభ్యర్థించబడుతుందో ప్రొవైడర్కు తెలుస్తుంది.
URI లు రెండు రకాలు:
అదనంగా, URI లు పరిమితం చేసే సమాచారాన్ని కూడా కలిగి ఉంటాయి.
దశ 2: కంటెంట్ ప్రొవైడర్ నుండి డేటాను ఎలా తిరిగి పొందాలి
ContentResolver ఇప్పుడు డేటా పట్టికకు ప్రాప్యతను కలిగి ఉన్నప్పటికీ, అనువర్తనం లేకపోతే అది అవసరమైన డేటాను తిరిగి పొందదు “యాక్సెస్ అనుమతి చదవండి” నిర్దిష్ట ప్రొవైడర్ కోసం. ప్రతి కంటెంట్ ప్రొవైడర్ యొక్క మానిఫెస్ట్ ఫైల్లో ఈ అనుమతి నిర్వచించబడింది.
అన్నీ ఒక అప్లికేషన్ (ఈ డేటాబేస్ను యాక్సెస్ చేయాలనుకుంటుంది) ఈ అనుమతి కోరడం.
ఇప్పుడు ఈ Android ట్యుటోరియల్లో ఇంతకు ముందు చర్చించినట్లు, కంటెంట్ ప్రొవైడర్ ఉపయోగించి నాలుగు ఆపరేషన్లు చేయవచ్చు . మేము ఒక్కొక్కటిగా వెళ్తాము.
ప్రశ్న
ఇప్పుడు, మీరు ప్రొవైడర్ను యాక్సెస్ చేసారు మరియు దాని నుండి డేటాను తిరిగి పొందడానికి అనుమతి కలిగి ఉన్నారు. తదుపరి దశ ప్రొవైడర్ నుండి అవసరమైన చర్యను అభ్యర్థించడానికి ప్రశ్నను నిర్మించండి .
ప్రశ్నించేటప్పుడు ఉపయోగించిన వాదనలు ఇక్కడ ఉన్నాయి:
ఒకటి) ద్వేషం : ఇది పైన వివరించిన విధంగానే పనిచేస్తుంది.
2) ప్రొజెక్షన్: ప్రశ్న ఉండాలి మొత్తం డేటాబేస్ పట్టిక నుండి నిలువు వరుసల సమితిని తిరిగి ఇవ్వండి . దీనిని ప్రొజెక్షన్ అంటారు. శూన్యతను దాటడం అన్ని నిలువు వరుసలను తిరిగి ఇస్తుంది, ఇది అసమర్థమైనది.
3) ఎంపిక నిబంధన: TO ఏ వరుసలను తిరిగి ఇవ్వాలో ప్రకటించే ఫిల్టర్ , SQL WHERE నిబంధనగా ఫార్మాట్ చేయబడింది (WHERE ను మినహాయించి). శూన్యతను దాటడం ఇచ్చిన URI కోసం అన్ని అడ్డు వరుసలను అందిస్తుంది.
ఉదాహరణకు, మీరు మీ చిరునామా పుస్తకం యొక్క శోధన కాలమ్లో వర్ణమాలను (‘పి’ అని చెప్పండి) నమోదు చేస్తే, అది ‘పి’ తో ప్రారంభమయ్యే అన్ని సంప్రదింపు వివరాలను తిరిగి ఇస్తుంది. అయినప్పటికీ, మీరు శోధన పట్టీలో ఏదైనా నమోదు చేయకపోతే, పరిచయాల పూర్తి జాబితా తిరిగి పొందబడుతుంది (అటువంటి సందర్భాలలో ఎంపిక నిబంధన ‘శూన్యంగా’ సెట్ చేయబడింది).
4) ఎంపిక వాదన: మీరు ఎంపికలో “? లు” చేర్చవచ్చు, అవి ఎంపికలో కనిపించే క్రమంలో ఎంపిక ఆర్గ్స్ నుండి విలువలతో భర్తీ చేయబడతాయి.
5) క్రమబద్ధీకరణ ఆర్డర్: నిబంధన ద్వారా SQL ఆర్డర్ (ఆర్డర్ను మినహాయించి). శూన్యంగా ప్రయాణించడం క్రమం లేని ఫలితాలను పొందుతుంది.
ప్రశ్నించడానికి కోడ్ ఉదాహరణ:
- పరిచయాలలో ఫోన్ నంబర్ల కోసం శోధిస్తోంది
కర్సర్ కర్సర్ = contentresolver.query (ContactsContract.Contacts.CONTENT_URI, శూన్య, శూన్య, శూన్య, శూన్యమైన) int count = cursor.getCount () if (count> 0) {string contactDetails = '' అయితే (cursor.moveToNext ()) { స్ట్రింగ్ కాలమ్ఇడ్ = కాంటాక్ట్స్కాంట్రాక్ట్.కాంటక్ట్స్_ఐడి పూర్ణాంక కర్సర్ఇండెక్స్ = కర్సర్.జెట్ కాలమ్ఇండెక్స్ (కాలమ్ఇడ్) స్ట్రింగ్ ఐడి = కర్సర్.జెట్ స్ట్రింగ్ (కర్సర్ఇండెక్స్) స్ట్రింగ్ పేరు = కర్సర్.జెట్ స్ట్రింగ్ (కర్సర్ .జెట్ కాలమ్ఇండెక్స్ (కాంటాక్ట్స్.కాంట్) (cursor.getString (కర్సర్ .getColumnIndex (ContactsContract.Contacts.HAS_PHONE_NUMBER))) ఉంటే (numCount> 0) {Cursor phoneCursor = contentresolver.query (ContactsContract.CommonDataKinds.Phone.CONTENT_ONTENT_ONTENT , క్రొత్త స్ట్రింగ్ [] {id}, శూన్యమైనది) (phoneCursor.moveToNext ()) {స్ట్రింగ్ phoneNo = phoneCursor.getString (phoneCursor .getColumnIndex (ContactsContract.CommonDataKinds. Phone.NUMBER)) contactDetails + + 'name:' + ', ఫోన్ నెం:' + phoneNo + ''} phoneCursor.close ()}}}
చొప్పించడం
మీరు మీ చిరునామా పుస్తకానికి క్రొత్త పరిచయాలను చొప్పించాలనుకుంటున్నారని అనుకుందాం. కంటెంట్ విలువలు వస్తువు ఈ చొప్పనలు చేయడానికి ఉపయోగిస్తారు. దీన్ని సాధించడానికి కంటెంట్వాల్యూ ఆబ్జెక్ట్ కీలు మరియు కంటెంట్ ప్రొవైడర్ నిలువు వరుసలు సరిపోలాలి. దీనికి ఉదాహరణ ఇక్కడ ఉంది:
హడూప్లో స్కూప్ అంటే ఏమిటి
చొప్పించడానికి కోడ్ ఉదాహరణ:
- “రజనీకాంత్” మరియు “9988999888” అనే పేరుతో కొత్త ఎంట్రీని చేర్చడం ఈ ఆపరేషన్.
// ఆపరేషన్ అర్రేలిస్ట్ ops = క్రొత్త అర్రేలిస్ట్ () int rawContactInsertIndex = ops.size () ops.add (ContentProviderOperation.newInsert (RawContacts.CONTENT_URI) .విత్వాల్యూ (రాకాంటాక్ట్స్. ACCOUNT_TYPE, nW. ()) ops.add (ContentProviderOperation .న్యూఇన్సర్ట్ (డేటా ) ops.add (ContentProviderOperation.newInsert (Data.CONTENT_URI) .విత్వాల్యూబ్యాక్ రిఫరెన్స్ (డేటా , ఫోన్. TYPE_MOBILE) .బిల్డ్ ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)
నవీకరిస్తోంది
కంటెంట్ ప్రొవైడర్ను నవీకరించడానికి ఈ క్రింది వాదనలు ఉపయోగించబడతాయి:
ఒకటి) ద్వేషం: కంటెంట్ ప్రొవైడర్ యొక్క URI
2) కంటెంట్ విలువలు: ఇది ఇప్పటికే ఉన్న డేటాను భర్తీ చేసే విలువలను కలిగి ఉంటుంది.
3) ఎంపిక నిబంధన: నవీకరించడానికి నిర్దిష్ట రికార్డులను ఎంచుకోవడానికి ఇది సహాయపడుతుంది
4) ఎంపిక వాదన: మీరు ఎంపికలో “? లు” చేర్చవచ్చు, అవి ఎంపికలో కనిపించే క్రమంలో ఎంపిక ఆర్గ్స్ నుండి విలువలతో భర్తీ చేయబడతాయి.
మరోసారి, ది కంటెంట్ వాల్యూస్ ఆబ్జెక్ట్ యొక్క కీలు కంటెంట్ ప్రొవైడర్లోని నిలువు వరుసలతో సరిపోలాలి లేకపోతే, నవీకరణ జరగదు.
నవీకరణ కోసం కోడ్ ఉదాహరణ:
- పేరు “రజనీకాంత్” ఉన్న ఫోన్ నంబర్ను నవీకరిస్తోంది
స్ట్రింగ్ ఎక్కడ = ContactsContract.Data.DISPLAY_NAME + '=? 'స్ట్రింగ్] ఫోన్.నంబర్, “9876543210”) .బిల్డ్ ()) getContentResolver (). అప్లైబ్యాచ్ (కాంటాక్ట్స్ కాంట్రాక్ట్.ఆథారిటీ, ఆప్స్)
తొలగింపు
కంటెంట్వాల్యూస్ ఆర్గ్యుమెంట్ మినహా తొలగింపు అదే వాదనలను ఉపయోగిస్తుంది, దీనికి ప్రత్యామ్నాయ విలువలు ఉండవు కాబట్టి ఇది అవసరం లేదు.
తొలగించడానికి కోడ్ ఉదాహరణ:
- పేరు “రజనీకాంత్” ఉన్న పరిచయాన్ని తొలగించండి
స్ట్రింగ్ ఎక్కడ = ContactsContract.Data.DISPLAY_NAME + '=? 'స్ట్రింగ్] ) .అప్లైబాచ్ (కాంటాక్ట్స్ కాంట్రాక్ట్.ఆథారిటీ, ఆప్స్)
చొప్పించు ఆపరేషన్ విషయంలో, URI డైరెక్టరీ ఆధారితంగా ఉండాలి. అన్ని ఇతర సందర్భాల్లో, URI లు ID ఆధారిత లేదా డైరెక్టరీ ఆధారితమైనవి కావచ్చు.
మెము ఆశిస్తున్నాము ప్రారంభకులకు Android ట్యుటోరియల్: పార్ట్ 5 అర్థం చేసుకోవడం చాలా కష్టం కాదు! మేము తదుపరి Android ట్యుటోరియల్లో కంటెంట్ ప్రొవైడర్ల గురించి మరింత చర్చిస్తాము. అప్పటి వరకు బేసిక్స్ నేర్చుకోవడం ఆనందించండి!
ఈ Android ట్యుటోరియల్లో మీకు ఏమైనా సందేహాలు ఉన్నాయా? మమ్మల్ని అడగండి.
హ్యాపీ లెర్నింగ్!
ఈ Android ట్యుటోరియల్ సృష్టించడానికి క్రింది వనరులు ఉపయోగించబడ్డాయి! అధికారిక Android డెవలపర్లు , Edureka.in