Intereting Posts
Как использовать DefaultDatabaseErrorHandler для обработки повреждения базы данных в Android Javascript не работает в деятельности WebView Есть ли способ проверить, отладка или публикация подписи приложения? Android E / Parcel: класс не найден при разборке (только на Samsung Tab3) Как установить Google Play Services на устройство Genymotion 6.0? Многие «неизвестный эмулятор эмулятора» – xxxx «s избыточно отображаются в студии Android Как читать последние 3 см из папки «Входящие» на Android? Воспроизведение видео на YouTube с помощью ExoPlayer Android: простой GridView, который отображает текст в сетках Nexus 4 Формат предварительного просмотра камеры Соотношение всегда требует 16×9 поверхности? Зачем Сохранить арриалист строк для общих настроек ViewPager с фрагментами внутри PopupWindow (или DialogFragment) – ошибка не найдена для id для фрагмента Передача данных между фрагментами Не найден ресурс, который соответствует указанному имени '@android: style / Theme.Material.Light.DialogWhenLarge.NoActionBar' Как извлечь значение из API

Почему он говорит «устарело» для метода, когда его единственный, который я могу использовать для выбранного уровня API?

В своем манифесте 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, а не к высоким значениям …

Solutions Collecting From Web of "Почему он говорит «устарело» для метода, когда его единственный, который я могу использовать для выбранного уровня API?"

Так почему я получаю устаревшее предупреждение, хотя его единственное, что я могу и должен использовать?

Поскольку целью сборки является уровень API 16 или выше, этот метод устарел.

Можно подумать, что предупреждение / документы должны адаптироваться к minSdkLevel, а не к максимумам

В этом случае было бы некорректно. Устаревание не имеет ничего общего с minSdkVersion , больше, чем в стандартной Java за пределами Android (где существует устаревание, а minSdkVersion – нет).

Более того, вы должны использовать версию Notification.Builder пакета поддержки Android (называемую NotificationCompat.Builder , поскольку родной не существует в API 10-го уровня, который ваш манифест указывает на то, что вы пытаетесь поддерживать. build() должен существовать на NotificationCompat.Builder и работать со всеми вашими уровнями API.

Это пример создания уведомления с использованием класса NotificationCompat , поддерживаемого во всех API-интерфейсах

 public static void createNotificacion(Context ctx) { try { int smallIcon = R.drawable.ic_launcher; Bitmap largeIcon = BitmapFactory.decodeResource(ctx.getResources(),R.drawable.ic_launcher); long when = System.currentTimeMillis(); CharSequence contentTitle = "Jorgesys"; CharSequence contentText = "Hello Stackoverflow!!!"; Intent notificationIntent = new Intent(); /*create new task for each notification with pending intent so we set Intent.FLAG_ACTIVITY_NEW_TASK */ PendingIntent pendingIntent = PendingIntent.getActivity(ctx, 0, notificationIntent, Intent.FLAG_ACTIVITY_NEW_TASK); /*get the system service that manage notification NotificationManager*/ NotificationManager notificationManager =(NotificationManager) ctx.getSystemService(Context.NOTIFICATION_SERVICE); /*build the notification*/ NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(ctx) .setWhen(when) .setContentText(contentText) .setContentTitle(contentTitle) .setSmallIcon(smallIcon) .setAutoCancel(true) .setTicker(contentTitle) .setLargeIcon(largeIcon) .setContentIntent(pendingIntent); /*sending notification to system. Here we use unique id (when)for making different each notification * if we use same id, then first notification replace by the last notification*/ notificationManager.notify((int) when, notificationBuilder.build()); } catch (Exception e) { Log.e("Notification Exception", e.getMessage()); } } 

Если вы хотите сделать это «технически правильным» способом, вы бы сделали что-то вроде

 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 вместо этого в пакете совместимости.

Лучше всего использовать библиотеку совместимости и забыть об этой проблеме:

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

Таким образом, вы можете пользоваться всеми последними функциями уведомлений …

Я считаю, что предупреждение связано с тем, что вы строите новый SDK (из-за того, что ваш targetSDKVersion выше). Таким образом, вы действительно можете использовать новый метод, но вам нужно быть осторожным при его использовании, поскольку устройства, которые ниже целевого уровня API, но выше уровня минимального API, не будут работать с новым API. Вы можете проверить уровень API, прежде чем использовать новые вызовы, но безопасно использовать их.

Например, если вы хотите использовать метод Android 4.1, а ваш minSDK – 2,3, вы можете сделать следующее:

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

В этом случае предупреждение не имеет значения. Вы можете добавить к классу или методу @SuppressWarnings («устаревание»).