无法parsing方法setLatestEventInfo

我正在处理通知,我不得不使用setLatestEventInfo 。 但是,Android Studio显示以下错误消息:

无法parsingsetLatestEventinfo方法

这是我的代码片段:

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

或者如果他们是另一种方式这样做,请好好build议我。

下面是一个使用通知的简单例子,通过它,希望它有帮助!

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> 

而点击通知后将打开的活动,

 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版本不兼容? 我强烈build议您使用包含NotificationCompat类的支持库v4 ,使用API​​ 4及以上版本的应用程序。

如果你真的不想使用支持库(即使Proguard优化,使用NotificationCompat将在最终的应用程序添加一个好的100Ko),另一种方法是使用reflection。 如果您在仍然具有不推荐使用的setLatestEventInfo的Android版本上部署您的应用程序,首先应该检查您是否处于这样的环境中,然后使用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-target 21