8

私の Android マニフェストには、次のように書かれています。

<uses-sdk
    android:minSdkVersion="10"
    android:targetSdkVersion="16" />

しかし、このコードを書くと、最後の getNotification で、メソッドが「非推奨」であるという警告が表示されます。

Notification myNotification = new Notification.Builder(appContext)
.setContentTitle("SIC")
.setContentText(tickerText)
.setWhen(when)
.setDefaults(Notification.DEFAULT_SOUND)
.setAutoCancel(true)
.setContentIntent(contentIntent)
.getNotification(); // <-- warning here

さて、問題は、私が開発している最小の API レベル 10 では、使用する必要があるのは getNotification だけです。「build()」と呼ばれる新しいメソッドは、API レベル 16 用です。

では、使用できる唯一の警告であるにもかかわらず、なぜ非推奨の警告が表示されるのでしょうか? 警告/ドキュメントは、最高のものではなく、minSdkLevel に適応する必要があると考えるかもしれません...

4

5 に答える 5

4

では、使用できる唯一の警告であるにもかかわらず、非推奨の警告が表示されるのはなぜですか?

ビルドターゲットがAPIレベル16以上であるため、このメソッドは非推奨になりました。

警告/ドキュメントは、highetsではなく、minSdkLevelに適合させる必要があると考える人もいるかもしれません。

その場合、1つは正しくありません。非推奨はminSdkVersion、Android以外の標準のJava(非推奨が存在する場合と存在しない場合)の場合とは関係ありminSdkVersionません。

さらに、Androidサポートパッケージのバージョンを使用する必要がありますNotification.BuilderNotificationCompat.BuilderネイティブバージョンはAPIレベル10に存在しないため、マニフェストはサポートしようとしていることを示します。build()必要なすべてのAPIレベルに存在しNotificationCompat.Builder、動作する必要があります。

于 2012-12-10T19:39:48.837 に答える
3

あなたがそれを「技術的に正しい」方法でやりたいのなら、あなたは次のようなことをするでしょう

Notification bldr = new Notification.Builder(appContext)
    .setContentTitle("SIC")
    .setContentText(tickerText)
    .setWhen(when)
    .setDefaults(Notification.DEFAULT_SOUND)
    .setAutoCancel(true)
    .setContentIntent(contentIntent);

Notification notif;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
    notif = bldr.getNotification() 
} else {
    notif = bldr.build();
}

次に、メソッドに。で注釈を付けTargetApi(16)ます。これは、一般的にこれらのタイプの問題に取り組む方法です。

あなたの場合、NotificationCompat.Builder互換性パッケージで代わりに使用する必要があります。

于 2012-12-10T19:44:35.880 に答える
1

最善の方法は、互換性ライブラリを使用して、この問題を忘れることです。

http://developer.android.com/guide/topics/ui/notifiers/notifications.html

このように、あなたは通知のすべての最新機能を楽しむことができます...

于 2012-12-10T19:41:04.720 に答える
1

この警告は、新しい SDK を使用してビルドしているという事実に関連していると思います (targetSDKVersion が高いため)。したがって、実際には新しい方法を使用できますが、ターゲット API レベルより下で最小 API レベルより上のデバイスは新しい API では機能しないため、使用する際には注意が必要です。安全に使用するために、新しい呼び出しを使用する前に API レベルを確認できます。

たとえば、minSDK が 2.3 のときに Android 4.1 メソッドを使用する場合は、次のようにします。

if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN) {
    // API Specific code here
}

この場合、警告は重要ではありません。クラスまたはメソッドに @SuppressWarnings("deprecation") を追加できます。

于 2012-12-10T19:34:43.910 に答える