В Android я получаю версию SDK легко (Build.VERSION.SDK
), но мне нужно использовать LabeledIntent только если платформа новее, чем 1,6 (>Build.VERSION_CODES.DONUT
)Android: как закодировать в зависимости от версии API?
Я полагаю, что Reflection надо (я прочитал this link но не понятно для класса или для меня).
Это код, но это дает мне исключение, потому что в моем Android 1.6, компилятор проверяет, является ли пакет существует, даже если условие не применяется:
Intent theIntent=....;
if(Integer.parseInt(Build.VERSION.SDK) > Build.VERSION_CODES.DONUT)
{
try{
Intent intentChooser = Intent.createChooser(intent,"Choose between these programs");
Parcelable[] parcelable = new Parcelable[1];
parcelable[0] = new android.content.pm.LabeledIntent(theIntent, "", "Texto plano", 0);
intentChooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, parcelable);
activity.startActivity(intentChooser);
}
catch(Exception e)
{
activity.startActivity(theIntent);
}
} else
{
activity.startActivity(intentMedicamento);
}
как я решил это, некоторые ПРИМЕЧАНИЯ К ПРАВИЛЬНОМУ ОТВЕТУ
@Commonsware показать мне способ сделать это. Мы создаем класс моста, так что в зависимости от уровня API LEVEL вы добавляете один класс, который использует УРОВЕНЬ API или другой класс, который использует другой уровень API LEVEL. Единственная деталь, которую один новичок может забыть, заключается в том, что вам нужно скомпилировать приложение с помощью новейшего SDK, на котором вы собираетесь использовать ссылку.
public abstract class LabeledIntentBridge {
public abstract Intent BuildLabeledIntent(String URL, Intent theintent);
public static final LabeledIntentBridge INSTANCE=buildBridge();
private static LabeledIntentBridge buildBridge() {
int sdk=new Integer(Build.VERSION.SDK).intValue();
if (sdk<5) {
return(new LabeledIntentOld());
}
return(new LabeledIntentNew());
}
}
Так в LabeledIntentNew
, я включил весь код, который относится к LabeledIntent
доступен только в API Level 5. В LabeledIntentOld
, можно реализовать еще один вид контроля, в моем случае, я вернусь сам замысел без ничего не делая Больше.
Вызов этого класса делается так:
LabeledIntentBridge.INSTANCE.BuildLabeledIntent(URLtest,theIntent);
Какую версию рамки вы используете в проекте? – Flo 2010-11-25 13:17:42
@ Flo.- Мой AndroidManifest определяет minSdkVersion = "4". LabeledIntent включен только в SDK с уровня API 5. – netadictos 2010-11-25 13:34:25
Да, но какая версия каркаса на самом деле используется в вашем проекте? minSdkVersion - это просто метаинформация в файле манифеста. Когда вы создали свой проект, вы должны выбрать версию рамки в диалоговом окне создания. – Flo 2010-11-25 13:40:22