Невозможно решить метод setLatestEventInfo

Я работаю над уведомлениями, и мне нужно использовать setLatestEventInfo . Однако в Android Studio отображается следующее сообщение об ошибке:

не может разрешить метод setLatestEventinfo

Вот мой fragment кода:

 private void createNotification(Context context, String registrationID) { NotificationManager notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); Notification notification = new Notification(R.drawable.icon,"Registration Successfull",System.currentTimeMillis()); notification.flags |= Notification.FLAG_AUTO_CANCEL; Intent intent = new Intent(context,RegistrationResultActivity.class); intent.putExtra("registration_ID",registrationID); PendingIntent pendingIntent = PendingIntent.getActivity(context,0,intent,0); notification.setLatestEventInfo(context,"Registration","Successfully Registered",pendingIntent); } 

Или, если это еще один способ сделать это, любезно предложите мне это.

Ниже приведен простой пример работы с уведомлениями, пройдите через него, надеюсь, что это поможет!

MainActivity.java

 public class MainActivity extends ActionBarActivity { Button btnShow, btnClear; NotificationManager manager; Notification myNotication; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initialise(); manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); btnShow.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { //API level 11 Intent intent = new Intent("com.rj.notitfications.SECACTIVITY"); PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 1, intent, 0); Notification.Builder builder = new Notification.Builder(MainActivity.this); builder.setAutoCancel(false); builder.setTicker("this is ticker text"); builder.setContentTitle("WhatsApp Notification"); builder.setContentText("You have a new message"); builder.setSmallIcon(R.drawable.ic_launcher); builder.setContentIntent(pendingIntent); builder.setOngoing(true); builder.setSubText("This is subtext..."); //API level 16 builder.setNumber(100); builder.build(); myNotication = builder.getNotification(); manager.notify(11, myNotication); /* //API level 8 Notification myNotification8 = new Notification(R.drawable.ic_launcher, "this is ticker text 8", System.currentTimeMillis()); Intent intent2 = new Intent(MainActivity.this, SecActivity.class); PendingIntent pendingIntent2 = PendingIntent.getActivity(getApplicationContext(), 2, intent2, 0); myNotification8.setLatestEventInfo(getApplicationContext(), "API level 8", "this is api 8 msg", pendingIntent2); manager.notify(11, myNotification8); */ } }); btnClear.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { manager.cancel(11); } }); } private void initialise() { btnShow = (Button) findViewById(R.id.btnShowNotification); btnClear = (Button) findViewById(R.id.btnClearNotification); } } 

activity_main.xml

     

И активность, которая будет открыта при нажатии кнопки «Уведомление»,

 public class SecActivity extends Activity { } 

Согласно: https://developer.android.com/sdk/api_diff/23/changes/android.app.Notification.html

Этот метод был удален в M (api 23). Поэтому, если ваша версия SDK для компиляции установлена ​​на api 23+, вы увидите эту проблему.

Вы пишете, вам нужно использовать setLatestEventInfo . Означает ли это, что вы готовы к тому, чтобы ваше приложение не совместимо с более поздними версиями Android? Я настоятельно рекомендую вам использовать библиотеку поддержки v4, которая содержит class NotificationCompat для приложения с использованием API 4 и более.

Если вы действительно не хотите использовать библиотеку поддержки (даже при оптимизации Proguard, использование NotificationCompat добавит хороший 100Ko в конечном приложении), другой способ – использовать reflection. Если вы развертываете свое приложение в версии для Android, которая по-прежнему имеет устаревший setLatestEventInfo , прежде всего, вы должны проверить, находитесь ли вы в такой среде, а затем используете reflection для доступа к методу.

Таким образом, Android Studio или компилятор не будут жаловаться, поскольку метод доступен во время выполнения, а не во время компиляции. Например :

 Notification notification = null; if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { notification = new Notification(); notification.icon = R.mipmap.ic_launcher; try { Method deprecatedMethod = notification.getClass().getMethod("setLatestEventInfo", Context.class, CharSequence.class, CharSequence.class, PendingIntent.class); deprecatedMethod.invoke(notification, context, contentTitle, null, pendingIntent); } catch (NoSuchMethodException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { Log.w(TAG, "Method not found", e); } } else { // Use new API Notification.Builder builder = new Notification.Builder(context) .setContentIntent(pendingIntent) .setSmallIcon(R.mipmap.ic_launcher) .setContentTitle(contentTitle); notification = builder.build(); } 

Перейдите в проект -> свойства и установите целевой Android-цель 21

  • Обработчик против AsyncTask
  • Запуск Skype из программы Programmatically & Pass Number - Android
  • Android: Регистрация ключей API Карт Google: ключ сертификации MD5
  • Как отменить диалог, например «Активность», когда он коснулся за пределами windows?
  • Ошибка: исправить конфликт версии (плагин google-services)
  • Android AlarmManager после перезагрузки
  • Как сохранить данные в приложении Android
  • Почему я получаю сообщение «Failed to bounce to type», когда я включаю JSON из Firebase в объекты Java?
  • Как остановить обслуживание самостоятельно?
  • Как определить, когда пользователь подключает гарнитуру на устройстве Android? (Напротив ACTION_AUDIO_BECOMING_NOISY)
  • Активность Android как диалог
  • Давайте будем гением компьютера.