2012-09-23 9 views
5

आप एक अलग API स्तर के लिए प्रत्येक संस्करण के साथ एक विधि कैसे बना सकते हैं। मुझे लगता है कि यह ऐसा कुछ है, लेकिन मुझे यकीन नहीं है किविभिन्न एपीआई स्तरों के लिए विभिन्न जावा विधियां

@apilevel("11") 
private void getR() 
{ 
... 
} 

@apilevel("4") 
private void getR() 
{ 
... 
} 

ऐसा करने का सही तरीका क्या है? अग्रिम धन्यवाद

उत्तर

4

आप उपयोग कर सकते हैं:

Integer.valueOf(android.os.Build.VERSION.SDK); 

संदर्भ के लिए तुम यहाँ जाँच करने के लिए पसंद कर सकते हैं: http://developer.android.com/guide/topics/manifest/uses-sdk-element.html

+1

कि अब पदावनत कर रहा है, मैं का इस्तेमाल किया है android.os इसके बजाय .build.VERSION.SDK_INT, लेकिन बहुत बहुत धन्यवाद –

7
यहाँ

आप: http://developer.android.com/reference/android/os/Build.VERSION.html#SDK

और स्तरों के लिए खुद को यहां के लिए सूची है इस विषय पर बहुत अच्छा टेक्स्ट पाएं:

http://android-developers.blogspot.com/2010/07/how-to-have-your-cupcake-and-eat-it-too.html

आप मूल रूप से नीचे की तरह कोड का उपयोग करना चाहिए: तो जब तक वे संकलन के दौरान उपलब्ध हैं

ICE_CREAM_SANDWICH तरह
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { 
    Log.i(LOG_TAG, "At least ICS version"); 
} 
else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
    Log.i(LOG_TAG, "At least HoneyComb version"); 
} 
else { 
    Log.i(LOG_TAG, "legacy"); 
} 

स्थिरांक मान स्थिर जावा वर्गों में डाल रहे हैं, वे पिछले Android SDK-एस पर भी उपलब्ध होगा उपयोगकर्ता फोन पर। जो आप नहीं करना चाहते हैं वह उन तरीकों को कॉल करना है जो पिछले एसडीके-एस पर उपलब्ध नहीं हैं, यह वीएफवाई अपवादों के साथ खत्म हो जाएगा।

लेकिन यह उस तरह कोड लिखने के लिए कठिन हो सकता है, thats अपने सबसे अच्छे रूप क्यों प्रत्येक एंड्रॉयड संस्करण के लिए अलग कार्यान्वयन बनाने और इसे आधार इंटरफ़ेस का उपयोग करने के बारे में सोचा:

interface ImplBase { 
void myFunc(); 
}; 

class ICSImp implements ImplBase { 
public void myFunc(){} 
} 

class HoneyCombImp implements ImplBase { 
public void myFunc(){} 
} 

class LegaceImp implements ImplBase { 
public void myFunc(){} 
}