Unable to solve setLatestEventInfo method

I am working on notifications and I need to use setLatestEventInfo . However, Android Studio displays the following error message:

cannot enable setLatestEventinfo method

Here is my code snippet:

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

Or, if this is another way of doing this, kindly offer me this.

+46
android
02 Sep '15 at 6:10
source share
4 answers

Below is a simple example of working with notifications, go through it, hope this helps!

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

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:id="@+id/btnShowNotification" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Show Notification" /> <Button android:id="@+id/btnClearNotification" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Clear Notification" /> </LinearLayout> 

And the activity that will be opened when you click the "Notification" button,

 public class SecActivity extends Activity { } 
+66
02 Sep '15 at 6:43
source share

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

This method has been removed in M ​​(api 23). Therefore, if your version of the compilation SDK is installed on api 23+, you will see this problem.

+29
Sep 28 '15 at 19:48
source share

You write < to use setLatestEventInfo . Does this mean that you are ready to ensure that your application is not compatible with later versions of Android? I highly recommend you use the v4 support library , which contains the NotificationCompat class for an application that uses API 4 or more.

If you really don't want to use the support library (even when optimizing Proguard, using NotificationCompat will add a good 100Ko in the final application), another way is to use reflection. If you are deploying your application in the Android version, which still has an outdated setLatestEventInfo , you must first check if you are in such an environment and then use reflection to access the method.

This way, Android Studio or the compiler will not complain, since the method is available at runtime, and not at compile time. For example:

 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(); } 
+20
Oct. 12 '15 at 16:18
source share

Go to project -> properties and set target parameter 21 for Android.

-3
Nov 19 '15 at 6:14
source share



All Articles