AndroidDev # 1। एक फ़ाइल प्रबंधक बनाएँ





Android एक आशाजनक और गतिशील रूप से विकसित ऑपरेटिंग सिस्टम है। और कई प्रोग्रामर सीखना चाहते हैं कि ओएस एंड्रॉइड के लिए एप्लिकेशन कैसे प्रोग्राम करें, लेकिन इंटरनेट पर संरचित सामग्री की एक त्वरित खोज और विशेष रूप से, रनेट, उन्हें एक स्तूप में डालता है। वास्तव में, इस बहुत लोकप्रिय ऑपरेटिंग सिस्टम के लिए विकासशील अनुप्रयोगों पर शैक्षिक लेख (विशेषकर रूसी में) खोजने की समस्या अभी भी है।

खैर, ठीक है, हम धीरे-धीरे हैबर की मदद से इस स्थिति में सुधार करेंगे।

मैं आपको तुरंत चेतावनी देता हूं कि सामग्री उन लोगों के लिए है जिनके पास Android एप्लिकेशन विकसित करने का अनुभव नहीं है, लेकिन वास्तव में, वास्तव में यह अनुभव प्राप्त करना चाहते हैं।







तैयार हो रही है



पहली चीज जो हमें करने की ज़रूरत है वह है आईडीई को स्थापित और कॉन्फ़िगर करना। हम ग्रहण का उपयोग करेंगे, हालांकि यह ध्यान रखना महत्वपूर्ण है कि किसी भी विकास पर्यावरण का उपयोग करना संभव है।

एंड्रॉइड वेबसाइट पर प्रलेखन में ग्रहण आईडीई को स्थापित करने और कॉन्फ़िगर करने के लिए विस्तृत निर्देश प्रदान किए गए हैं। संक्षेप में:



इस सब के बाद, हमारे पास एंड्रॉइड ओएस के लिए एप्लिकेशन विकसित करने के लिए काम करने का माहौल है। लेकिन हमें कहीं ना कहीं अपने आवेदनों की जांच करने की आवश्यकता है? और यहाँ हम विकल्प के साथ सामना कर रहे हैं - या तो एमुलेटर में इन क्रियाओं को करने के लिए, या एक वास्तविक डिवाइस पर।

वर्चुअल डिवाइस टैब में न्यू ... बटन पर क्लिक करके एमुलेटर को पहले से परिचित एंड्रॉइड एसडीके और एवीडी मैनेजर विंडो में जोड़ा जा सकता है। नाम फ़ील्ड भरें, एपीआई के संस्करण को इंगित करें और हमारे वर्चुअल डिवाइस को जोड़ें।





यदि आप एक वास्तविक डिवाइस पर अपने अनुप्रयोगों का परीक्षण करना चाहते हैं, तो यहां देखें। यह ध्यान रखना महत्वपूर्ण है कि अंत में, आपको अभी भी एक वास्तविक डिवाइस पर अपने एप्लिकेशन का परीक्षण करना होगा, क्योंकि एप्लिकेशन को जारी करना थोड़ा अजीब है, उदाहरण के लिए, एंड्रॉइड मार्केट में, क्योंकि यह फोन / टैबलेट के मौजूदा नमूनों पर परीक्षण नहीं किया जाना चाहिए।



एक प्रोजेक्ट बनाएं



नया प्रोजेक्ट बनाने का समय आ गया है। ऐसा करने के लिए, फ़ाइल> नया> प्रोजेक्ट पर क्लिक करें , दिखाई देने वाली विंडो में एंड्रॉइड> एंड्रॉइड प्रोजेक्ट का चयन करें और अगला क्लिक करें। निम्न विंडो दिखाई देती है, जिसे हम इस तरह से भरते हैं:



अब थोड़ा स्पष्टीकरण।

परियोजना का नाम - ग्रहण पर्यावरण में परियोजना का नाम।

एप्लिकेशन का नाम - एप्लिकेशन का नाम , जिसे अंतिम एंड्रॉइड डिवाइस पर उपयोगकर्ता देखेंगे।

पैकेज का नाम - पैकेज का नाम । यहां सब कुछ किसी भी जावा परियोजना के समान है। यह जानना महत्वपूर्ण है कि लक्ष्य डिवाइस पर उपलब्ध सभी पैकेजों में यह नाम अद्वितीय होना चाहिए। इसलिए, शास्त्रीय तर्क रिवर्स में लिखे गए वेब डोमेन के अनुरूप नाम देने के लिए काफी प्रभावी है (यहाँ - ru.alwake), और फिर प्रोजेक्ट का नाम। यह कदम कुछ हद तक नाम की विशिष्टता को सुनिश्चित करेगा।

गतिविधि बनाएँ - वर्ग का नाम, जो भविष्य में कक्षा गतिविधि का एक उपवर्ग होगा।

न्यूनतम एसडीके संस्करण - एसडीके का न्यूनतम संस्करण। यदि आप इस विंडो में बिल्ड लक्ष्य सूची को देखते हैं, तो आप यह निष्कर्ष निकाल सकते हैं कि हमारा आवेदन केवल Android> = 2.1 (Android 2.1 एसडीके संस्करण 7 के अनुरूप) वाले उपकरणों के लिए चलता है। इस मामले में, यह बहुत महत्वपूर्ण नहीं है, लेकिन ऐसा ही हो।



अब आप सुरक्षित रूप से समाप्त पर क्लिक कर सकते हैं और अपने प्रोजेक्ट को पैकेज एक्स्प्लोर पैनल में देख सकते हैं। परियोजना बनाई गई है और एंड्रॉइड एप्लिकेशन के डिवाइस पर कुछ सैद्धांतिक आधार से परिचित होना अच्छा होगा, जिसे यहां प्रस्तुत किया गया है



हमारे प्रोजेक्ट के बारे में



शुरू करने के लिए, हम यह तय करते हैं कि हम अपने फाइल मैनेजर से क्या चाहते हैं। आदर्श रूप से, ASTRO और eStrongs के लिए एक पूर्ण प्रतिस्थापन। ठीक है, इस बीच, हमें निर्देशिकाओं के माध्यम से बुनियादी नेविगेशन प्रदान करने की आवश्यकता है, और "बुनियादी" से हम समझते हैं कि हमें उन फ़ोल्डरों में जाने की आवश्यकता नहीं है जिनकी केवल रूट तक पहुंच है। इसके अलावा, ऊपर के क्षेत्र में हम निर्देशिका संरचना में अपना वर्तमान स्थान प्रदर्शित करेंगे।



ठीक है, पहले, चलो परियोजना की संरचना के बारे में बात करते हैं:







/ Res / drawable- * dpi - इन तीन फ़ोल्डरों में हमारे पास विभिन्न स्क्रीन एक्सटेंशन के लिए डिज़ाइन किए गए संसाधन हैं। फिलहाल, केवल icon.png फ़ाइल है, जो कि हमारे एप्लिकेशन का आइकन है।

/ Res / लेआउट - इस फ़ोल्डर में xml-files हैं जो रूपों और विभिन्न फॉर्म तत्वों की उपस्थिति का वर्णन करते हैं। प्रोजेक्ट बनाने के बाद, वहाँ पहले से ही main.xml फ़ाइल है, वहाँ भी आपको row.xml फ़ाइल बनाने की आवश्यकता है जो प्रत्येक व्यक्तिगत पंक्ति की उपस्थिति का वर्णन करेगी (यानी, हमारे फ़ाइल ट्री की सूची आइटम)।

/ Res / मान - यहां हमारे पास कोई भी स्थिरांक है जिसे हम अपनी परियोजना में उपयोग कर सकते हैं।



यह ध्यान देने योग्य है कि इन XML फ़ाइलों को विज़ुअल मोड और टेक्स्ट मोड दोनों में (सीधे xml कोड को बदलकर) संपादित किया जा सकता है। हम दूसरे तरीके से काम करेंगे। कोड को संपादित करने के लिए, पैकेज एक्सप्लोरर पैनल में xml फ़ाइल पर राइट-क्लिक करें और > टेक्स्ट एडिटर के साथ ओपन का चयन करें। यह ऐसा है, भविष्य के लिए;)



फ़ाइल FileManager.java - यह फ़ाइल, वास्तव में, आवेदन के मुख्य और एकमात्र रूप के लिए हमारी मुख्य कक्षा है। इस परियोजना में हमारे सभी कोड यहां पोस्ट किए जाएंगे।

AndroidManifest.xml फ़ाइल हमारे प्रोजेक्ट के मूल गुणों के साथ एक फ़ाइल है, विशेष रूप से, प्रोजेक्ट बनाते समय सेट करें (जैसे, उदाहरण के लिए, नाम)। तदनुसार, नाम बदलने के लिए, नाम, हमें इस फ़ाइल को चुनने की आवश्यकता है।



बाकी फाइलें हमारे लिए बहुत कम रुचि की हैं।



कोड लिखना शुरू करें



सामान्य तौर पर, उपरोक्त सभी बुनियादी जानकारी है जो हर एंड्रॉइड प्रोग्रामर को पता होनी चाहिए। और अब हमारे कोड से सीधे निपटने का समय है।



Main.xml फ़ाइल:

<? xml version ="1.0" encoding ="utf-8" ? >

< TableLayout xmlns:android ="http://schemas.android.com/apk/res/android"

android:orientation ="vertical"

android:layout_width ="fill_parent"

android:layout_height ="fill_parent" >



< TableRow >

< TextView android:id ="@+id/titleManager"

android:layout_width ="fill_parent"

android:layout_height ="fill_parent"

android:padding ="5dip"

/>

</ TableRow >

< TableRow >

< ListView android:id ="@id/android:list"

android:layout_width ="fill_parent"

android:layout_height ="fill_parent"

android:layout_weight ="2"

android:drawSelectorOnTop ="false" />

</ TableRow >

</ TableLayout >



* This source code was highlighted with Source Code Highlighter .






यहां हम अपने मुख्य लेआउट फॉर्म के लिए मार्कअप सेट करते हैं। यहां TableLayout का मतलब है कि हमारे तत्वों को टेबल के रूप में व्यवस्थित किया गया है। इसके बाद, TextView तत्व (टेक्स्ट फील्ड) को टेबल के ऊपरी सेल में रखा गया है, और निचले सेल में ListView (सूची) को। दोनों तत्वों में एक आईडी है, जिसके उपयोग से हम तत्वों की सामग्री को बदल सकते हैं। उदाहरण के लिए, हमारे TextView टेक्स्ट बॉक्स के लिए R.id.titleManager का उपयोग करना।



फ़ाइल row.xml:

<? xml version ="1.0" encoding ="utf-8" ? >

< TextView

xmlns:android ="http://schemas.android.com/apk/res/android"

android:layout_width ="fill_parent"

android:layout_height ="40sp"

android:padding ="5dip"

android:gravity ="center_vertical"

/>




* This source code was highlighted with Source Code Highlighter .






यहां हम अपने ListView के प्रत्येक तत्व के लिए मार्कअप सेट करते हैं, अर्थात सीधे प्रत्येक व्यक्तिगत फ़ोल्डर या प्रत्येक फ़ाइल के लिए। इस कोड में, हम प्रत्येक तत्व की चौड़ाई, ऊँचाई, पैडिंग और सेंटर_वर्टिक अलाइनमेंट - यानी वर्टिकल सेंटरिंग सेट करते हैं।



फ़ाइल FileManager.java:





  1. package ru.alwake.filemanager;
  2. आयात java.io. फ़ाइल;
  3. आयात java.util। ArrayList ;
  4. आयात java.util। सूची;
  5. आयात android.app.AlertDialog;
  6. आयात android.app.ListActivity;
  7. आयात android.content.DialogInterface;
  8. आयात android.content.ntent;
  9. आयात android.content.DialogInterface.OnClickListener;
  10. android.net आयात करें। uri;
  11. आयात android.os.Bundle;
  12. आयात android.view.View;
  13. आयात android.widget.ArrayAdapter;
  14. आयात android.widget.ListView;
  15. आयात android.widget.TextView;
  16. सार्वजनिक वर्ग FileManager का विस्तार
  17. निजी सूची < string > directoryEntries = new ArrayList < string > ();
  18. निजी फ़ाइल currentDirectory = नई फ़ाइल ( "/" );
  19. // जब आवेदन शुरू हुआ
  20. @Override
  21. सार्वजनिक शून्य onCreate (बंडल icicle) {
  22. super.onCreate (icicle);
  23. // मुख्य लेआउट सेट करें
  24. setContentView (R.layout.main);
  25. // रूट निर्देशिका में ब्राउज़ करें
  26. BrowseTo ( नई फ़ाइल ( "/" ));
  27. }
  28. // मूल निर्देशिका में ब्राउज़ करें
  29. निजी शून्य upOneLevel () {
  30. अगर ( यह .currentDirectory.getParent ()! = null ) {
  31. यह .browseTo ( यह .currentDirectory.getParentFile ());
  32. }
  33. }
  34. // फ़ाइल या निर्देशिका के लिए ब्राउज़ करें
  35. निजी शून्य ब्राउज़ करें (अंतिम फ़ाइल aDirectory) {
  36. // अगर हम डायरेक्टरी को ब्राउज़ करना चाहते हैं
  37. अगर (एकडायरेक्टरी.डायरेक्टरी ()) {
  38. // इस निर्देशिका से फाइलों के साथ सूची भरें
  39. this .currentDirectory = aDirectory;
  40. fill (aDirectory.listFiles) ();
  41. // सेट शीर्षक प्रबंधक पाठ
  42. TextView titleManager = (TextView) findViewById (R.id.titleManager);
  43. titleManager.setText (aDirectory.getAbsolutePath ());
  44. } {
  45. // अगर हम फ़ाइल खोलना चाहते हैं, तो यह संवाद दिखाएं:
  46. // श्रोता जब YES बटन पर क्लिक करते हैं
  47. OnClickListener okButtonListener = नया OnClickListener () {
  48. सार्वजनिक शून्य पर क्लिक करें (DialogInterface arg0, int arg1) {
  49. // फ़ाइल को नेविगेट करने का इरादा
  50. Intent i = new Intent (android.content.Intent.ACTION_VIEW, Uri .parse ( "file: //" + aDirectory.getAbsolutePath ()));
  51. // इस गतिविधि को शुरू करें
  52. startActivity (i);
  53. }
  54. };
  55. // श्रोता जब कोई बटन क्लिक नहीं करता है
  56. OnClickListener रद्द करें ButtonListener = नया OnClickListener () {
  57. सार्वजनिक शून्य पर क्लिक करें (DialogInterface arg0, int arg1) {
  58. // कुछ मत करो
  59. // या आप चाहते हैं कि कुछ जोड़ें
  60. }
  61. };
  62. // संवाद बनाएँ
  63. नई AlertDialog.Builder ( यह )
  64. .setTitle ( "पुष्टि" ) // शीर्षक
  65. .setMessage ( "क्या आप फ़ाइल खोलना चाहते हैं" + aDirectory.getName () + "..?"
  66. .setPositiveButton ( "हाँ" , okButtonListener) // सकारात्मक बटन
  67. .setNegativeButton ( "नहीं" , CancelButtonListener) // नकारात्मक बटन
  68. .show (); // शो डायलॉग
  69. }
  70. }
  71. // सूची भरें
  72. निजी शून्य भरण ( फाइल [] फाइलें) {
  73. // स्पष्ट सूची
  74. इसे .directoryEntries.clear ();
  75. अगर ( यह। currentDirectory.getParent ()! = null )
  76. यह .directoryEntries.add ( ".." );
  77. // प्रत्येक फ़ाइल को सूची में जोड़ें
  78. के लिए ( फ़ाइल फ़ाइल: फ़ाइलें) {
  79. यह .directoryEntries.add (file.getAbsolutePath ());
  80. }
  81. // सब कुछ दिखाने के लिए ऐरे एडैप्टर बनाएं
  82. ArrayAdapter < String > DirectoryList = new ArrayAdapter < String > ( यह , R.layout .row, यह .directoryEntries);
  83. यह .setListAdapter (DirectoryList);
  84. }
  85. // जब आप आइटम पर क्लिक करते हैं
  86. @Override
  87. संरक्षित शून्य onListItemClick (ListView l, दृश्य v, int स्थिति, लंबी आईडी) {
  88. // चयनित फ़ाइल नाम प्राप्त करें
  89. int चयन = स्थिति;
  90. स्ट्रिंग का चयन किया गया। String = यह .directoryEntries get (SelectionRowID);
  91. // अगर हम ".." का चयन करते हैं तो ऊपरी तौर पर जाएं
  92. अगर (चयनितफिलस्ट्रीमिंग असेंबल ( ".." )) {
  93. यह .upOneLevel ();
  94. } {
  95. // ब्राउज़ की गई फ़ाइल या निर्देशिका ब्राउज़ करें () का उपयोग करके ब्राउज़ करें
  96. फ़ाइल क्लिक की गई फ़ाइल = null ;
  97. clickedFile = नई फ़ाइल (चयनित फ़ाइल );
  98. अगर (clickedFile! = null )
  99. यह .browseTo (clickedFile);
  100. }
  101. }
  102. }
* इस सोर्स कोड को सोर्स कोड हाइलाइटर के साथ हाइलाइट किया गया था।




शुरुआत में, पैकेज का नाम इंगित किया गया है।

हमारे द्वारा आवश्यक पुस्तकालयों को आयात करने के लिए लाइनें 2-18 जिम्मेदार हैं। यह ध्यान रखना महत्वपूर्ण है कि जैसे ही कुछ अज्ञात का सामना करते हैं, ग्रहण पुस्तकालयों को स्वचालित रूप से आयात किया जा सकता है।

इस कोड में, हमारे पास केवल 5 काफी स्पष्ट कार्य हैं जिन्हें समझना आसान है। और यह एप्लिकेशन का कंकाल है, जो फ़ाइल संरचना के माध्यम से बुनियादी नेविगेशन प्रदान करता है। हालाँकि, इस एप्लिकेशन में एक समस्या है - जब हम एक निर्देशिका में प्रवेश करने की कोशिश करते हैं जिसे केवल सुपरयुसर को ही एक्सेस करने की अनुमति होती है, तो हमें एक त्रुटि मिलती है और एप्लिकेशन समाप्त हो जाता है।

तदनुसार, अगली बार हम इस त्रुटि से छुटकारा पाने के बारे में सोचेंगे, साथ ही साथ फ़ाइल प्रकार के अनुरूप आइकन कैसे प्रदर्शित करें। इसके अलावा, हम अपने फाइल मैनेजर में कॉपी-पेस्ट फ़ंक्शन को लागू करने के बारे में सोचेंगे।



अंत में, यह एक बड़ा और सक्षम अनुप्रयोग प्राप्त करने वाला है जो एंड्रॉइड के लिए प्रोग्रामिंग के पहलुओं के बारे में बुनियादी जानकारी दे।



विचार और फ़ाइल प्रबंधक कार्यान्वयन का कुछ हिस्सा anddev.org से लिया गया है

मैं यह भी बताना चाहूंगा कि AndroidDev का अगला भाग जनवरी के बीसवें भाग में दिखाई देगा।



All Articles