无法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
- PopupWindow $ BadTokenException:无法添加窗口 – 标记null无效
- Proguard在Parcelable类中导致RuntimeException(Unmarshalling unknown type code)
- android服务startService()和bindService()
- 使用Xamarin Vs开发android应用程序Native android
- Android java.net.UnknownHostException:主机无法parsing
- android:用adb pushrecursion复制
- 当使用选项卡活动时,卡住获取相机图片
- 如何使用android设置图标创build一个android菜单项
- 图片大小(drawable-hdpi / ldpi / mdpi / xhdpi)