非推奨のメソッドを使用して複数の API サポートを実現する方法は多数ありますが、最も頻繁に言及されるのはリフレクションです。個人的には、クラスローダーを利用して通知の問題を解決しました。通知の作成に必要なさまざまなデータを処理するための基本的なラッパー メソッドを使用して、基本抽象クラスを作成しました。次のようになります。
public abstract class NotificationWrapper {
public NotificationWrapper(Context context) {
}
public abstract void createNotification(int resid, CharSequence ticker);
public abstract void setTitle(CharSequence title);
public abstract void setText(CharSequence text);
public abstract void setIntent(PendingIntent intent);
public abstract void setFlags(int... flags);
public abstract void setDefaults(int defaults);
public abstract Notification getNotification();
}
もちろん、通知をどれだけカスタマイズしているかに応じて、メソッドを追加および削除できます。次に、これを 3 つの個別のクラスに拡張できます。1 つは API <11 用、もう 1 つは API >=11 用、もう 1 つは Jelly Bean 以降用です。各クラスでは、これらのメソッド呼び出しを現在の API バージョンで使用可能な適切なメソッドにリレーするだけです (つまり、11 より前のリレーは Notification メソッドに、11 より後のリレーは Notification.Builder メソッドに、Jelly Bean は 11 より後のものと同じですが、例外は次の点を除きます)。 getNotification() ではなく build() を使用します)。次に、通知を作成するときが来たら、SDK バージョンの条件とポリモーフィズムの美しさを使用して、適切なサブクラスをロードし、そのラッパー メソッドを使用して通知を作成します。
NotificationWrapper wrapper = null;
int ver = VERSION.SDK_INT;
if (ver >= 16) {
wrapper = new NotificationWrapJB(context);
} else if (ver >= 11) {
wrapper = new NotificationWrapHC(context);
} else {
wrapper = new NotificationWrapPreHC(context);
}
wrapper.createNotification(resId, tickerText);
//etc....
繰り返しますが、これはこの問題に対処する多くの方法の 1 つにすぎませんが、より整理されているように感じられるので気に入っています。
さまざまな SDK バージョンで使用するメソッドに慣れていない場合は、NotificationおよびNotification.Builderに関する Android ドキュメントをお読みください。