在Android中,我很容易得到SDK的版本(
Build.VERSION.SDK
)但我需要使用LabeledIntent只有当平台比1.6更新时(
>Build.VERSION_CODES.DONUT
)
我认为反思是必要的(我读过
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);
}
我是怎么解决的,一些正确答案的注释
@公共软件告诉我怎么做。我们创建一个桥类,以便根据API级别,您可以引用一个使用API级别的类或另一个使用另一个API级别的类。
唯一一个初学者可能忘记的细节是,你必须用最新的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 5级。在
LabeledIntentOld
,我可以实现另一种控制,在我的情况下,我返回意图本身而不做任何其他事情。
对该类的调用如下所示:
LabeledIntentBridge.INSTANCE.BuildLabeledIntent(URLtest,theIntent);