Impossible de résoudre la méthode setLatestEventInfo

Je travaille sur les notifications et je dois utiliser setLatestEventInfo . Toutefois, Android Studio affiche le message d’erreur suivant:

ne peut pas résoudre la méthode setLatestEventinfo

Voici mon extrait de code:

 private void createNotification(Context context, Ssortingng 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); } 

Ou si c’est une autre façon de le faire, veuillez me suggérer cela.

Bien ci-dessous est un exemple simple de travailler avec Notifications, passez par là, espérons que cela vous aidera!

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

     

Et l’activité qui sera ouverte sur un clic de notification,

 public class SecActivity extends Activity { } 

Selon: https://developer.android.com/sdk/api_diff/23/changes/android.app.Notification.html

Cette méthode a été supprimée dans M (api 23). Donc, si votre version de compilation SDK est définie sur api 23+, vous verrez ce problème.

Vous écrivez, vous devez utiliser setLatestEventInfo . Cela signifie-t-il que vous êtes prêt à faire en sorte que votre application ne soit pas compatible avec les versions Android plus récentes? Je vous suggère fortement d’utiliser la bibliothèque de support v4 qui contient la classe NotificationCompat pour les applications utilisant l’API 4 et plus.

Si vous ne voulez vraiment pas utiliser la bibliothèque de support (même avec l’optimisation Proguard, l’utilisation de NotificationCompat appenda un bon 100 Ko à l’application finale), une autre façon consiste à utiliser la reflection. Si vous déployez votre application sur une version Android qui contient toujours le setLatestEventInfo obsolète, vous devez tout d’abord vérifier si vous vous trouvez dans un tel environnement, puis vous utilisez la reflection pour accéder à la méthode.

De cette façon, Android Studio ou le compilateur ne se plaindra pas, puisque la méthode est accessible à l’exécution et non à la compilation. Par exemple :

 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(); } 

Aller au projet -> propriétés et définir la cible Android 21