2015-01-19 14 views
6

मैं एक पुस्तकालय बनाने की कोशिश कर रहा हूं। मेरे पास एक एंड्रॉइड लाइब्रेरी प्रोजेक्ट है और res निर्देशिका के तहत कुछ संसाधन हैं जिन्हें मैं लाइब्रेरी प्रोजेक्ट के कोड में एक्सेस करना चाहता हूं। एंड्रॉयड डॉक्स का कहना है:एंड्रॉइड लाइब्रेरी प्रोजेक्ट से संसाधनों तक पहुंचना?

पुस्तकालय मॉड्यूल में

स्रोत कोड अपने आर वर्ग

के माध्यम से अपने स्वयं के संसाधनों का उपयोग कर सकते लेकिन मैं ऐसा करने के तरीके को समझ नहीं सकता। चूंकि यह एक लाइब्रेरी है और अन्य अनुप्रयोगों से उपयोग करने का इरादा है, खुद को चलाने के लिए नहीं, मेरे पास Activity नहीं है, इसलिए getResources() का उपयोग करने के लिए मुझे Context नहीं मिल सकता है। संदर्भ के बिना मैं इन संसाधनों को स्पष्ट रूप से कैसे एक्सेस कर सकता हूं?

+0

लाइब्रेरी से आपका मतलब लाइब्रेरी प्रोजेक्ट या जेएआर/एएआर फ़ाइल है? आप पुस्तकालय परियोजनाओं या एएआर फाइलों से संसाधनों तक पहुंच सकते हैं, न कि जेएआर फाइलें। – shkschneider

+0

पुस्तकालय परियोजना, एक जेएआर फ़ाइल नहीं। – sqshemet

+0

निष्पक्ष होने के लिए, मुझे आपका एप्लिकेशन सेटअप नहीं मिलता है। आपके पास "कोई गतिविधि नहीं है" और न ही "संदर्भ" है? क्या आप एक एंड्रॉइड एप्लिकेशन सर बना रहे हैं? – shkschneider

उत्तर

0

किसी गतिविधि के बिना, आर वर्ग का उपयोग करना संभव नहीं लगता है। यदि आपके पास अपनी लाइब्रेरी में एक टेस्ट एप्लिकेशन है, तो परीक्षण एप्लिकेशन आर तक पहुंच पाएगा, लेकिन lib से नहीं।

फिर भी, आप नाम से संसाधनों तक पहुंच सकते हैं। उदाहरण के लिए, मैं अपने पुस्तकालय के अंदर इस तरह एक वर्ग है,

public class MyContext extends ContextWrapper { 
    public MyContext(Context base) { 
    super(base); 
    } 

    public int getResourceId(String resourceName) { 
    try{ 
     // I only access resources inside the "raw" folder 
     int resId = getResources().getIdentifier(resourceName, "raw", getPackageName()); 
     return resId; 
    } catch(Exception e){ 
     Log.e("MyContext","getResourceId: " + resourceName); 
     e.printStackTrace(); 
    } 
    return 0; 
    } 
} 

और पुस्तकालय में एक वस्तु का निर्माता (ContextWrappers बारे में अधिक जानकारी के लिए https://stackoverflow.com/a/24972256/1765629 देखें) इस संदर्भ आवरण लेता है,

public class MyLibClass { 
    public MyLibClass(MyContext context) { 
    int resId = context.getResourceId("a_file_inside_my_lib_res"); 
    } 
} 

फिर, lib का उपयोग करता है app से, मैं, संदर्भ पास करना

public class MyActivity extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    MyLibClass a = new MyLibClass(new MyContext(this)); 
    } 
} 

MyContext, MyLibClass, और a_file_inside_my_lib_res, वे सभी लाइब्रेरी प्रोजेक्ट के अंदर रहते हैं।

मुझे उम्मीद है कि यह मदद करता है।

संबंधित मुद्दे

 संबंधित मुद्दे