Android:APIのバージョンに応じてコードを作成する方法は?アンドロイドで
(>Build.VERSION_CODES.DONUT
)私は(Build.VERSION.SDK
)簡単にSDKのバージョンを取得しますが、プラットフォームが1.6よりも新しい場合、私は唯一のLabeledIntentを使用する必要があり、私は反射が必要であるとし(私はthis linkを読みましたが、それはありますクラスや私にとっては明確ではない)。
これはコードですが、パッケージには、条件が適用されていない場合でも存在する場合は1.6私のアンドロイドで、コンパイラが確認するので、それは私に例外を与える:私はITを解決しHOW
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レベルに応じて、API LEVELを使用する1つのクラスまたは別の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
に、私は、私は私の場合、私は何もしないことなく、意図自体を返す、コントロールの別の種類を実装することができます
LabeledIntentOld
ではAPIレベル5でのみ利用可能
LabeledIntent
を参照するすべてのコードが含まれてもっと。
このクラスの呼び出しは次のように行われます。
LabeledIntentBridge.INSTANCE.BuildLabeledIntent(URLtest,theIntent);
プロジェクトではどのフレームワークバージョンを使用していますか? – Flo
@ Flo.-私のAndroidManifestはminSdkVersion = "4"を定義しています。 LabeledIntentはAPI LEVEL 5のSDKにのみ含まれています。 – netadictos
はい、あなたのプロジェクトで実際にどのフレームワークのバージョンが使用されていますか? minSdkVersionはマニフェストファイルのメタ情報です。プロジェクトを作成したら、作成ダイアログでフレームワークのバージョンを選択しておく必要があります。 – Flo