Notification:
例子的NotificationCompat使用的是v4包下的,稍微有点老,若是你们使用的话,建议使用v7包下的,通知也没什么好介绍的,直接看代码
MainActivity:android
package com.fitsoft; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.NotificationCompat; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity { private int notificationId = 100; private static int times = 0; Button button; Context context; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); context = this; //设置上下文对象 button = findViewById(R.id.btn); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { times++; if(times%2 == 1){ button.setText("销毁通知"); createNotification(); //建立通知 }else { button.setText("建立通知"); destroyNotification(); //取消通知 } } }); } /** * 建立通知 */ private void createNotification() { //建立builder NotificationCompat.Builder builder = new NotificationCompat.Builder(context, "my_notifications"); //设置属性 builder.setSmallIcon(R.mipmap.ic_launcher_round); //设置图标 builder.setContentTitle("这是通知的标题"); //设置标题 builder.setContentText("这是通知的具体内容"); //设置内容 builder.setNumber(1); //设置通知次数 builder.setAutoCancel(true); //设置是否自动取消 //构建启动意图 PendingIntent pendingIntent = PendingIntent.getActivity(context, 1, new Intent(this, SecondActivity.class), PendingIntent.FLAG_UPDATE_CURRENT); //设置启动意图 builder.setContentIntent(pendingIntent); Notification notification = builder.build(); //获取系统服务 NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); //系统建立通知 notificationManager.notify(notificationId, notification); } /** * 取消通知 */ private void destroyNotification() { NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); //取消通知 notificationManager.cancel(notificationId); } }
布局文件使用的是上一次的只有一个按钮的状态选择器的布局,具体请查看上一篇。
这里的方法都很好理解,只是其中有一个构建启动意图的时候的PendingIntent.getActivity()方法,咱们具体看一下:app
/** * Retrieve a PendingIntent that will start a new activity, like calling * {@link Context#startActivity(Intent) Context.startActivity(Intent)}. * Note that the activity will be started outside of the context of an * existing activity, so you must use the {@link Intent#FLAG_ACTIVITY_NEW_TASK * Intent.FLAG_ACTIVITY_NEW_TASK} launch flag in the Intent. * * <p class="note">For security reasons, the {@link android.content.Intent} * you supply here should almost always be an <em>explicit intent</em>, * that is specify an explicit component to be delivered to through * {@link Intent#setClass(android.content.Context, Class) Intent.setClass}</p> * * @param context The Context in which this PendingIntent should start * the activity. * @param requestCode Private request code for the sender * @param intent Intent of the activity to be launched. * @param flags May be {@link #FLAG_ONE_SHOT}, {@link #FLAG_NO_CREATE}, * {@link #FLAG_CANCEL_CURRENT}, {@link #FLAG_UPDATE_CURRENT}, * or any of the flags as supported by * {@link Intent#fillIn Intent.fillIn()} to control which unspecified parts * of the intent that can be supplied when the actual send happens. * * @return Returns an existing or new PendingIntent matching the given * parameters. May return null only if {@link #FLAG_NO_CREATE} has been * supplied. */ public static PendingIntent getActivity(Context context, int requestCode, Intent intent, @Flags int flags) { return getActivity(context, requestCode, intent, flags, null); }
这里的第四个参数flags值得注意,咱们点击这个@Flags注解进行查看:ide
/** @hide */ @IntDef(flag = true, value = { FLAG_ONE_SHOT, FLAG_NO_CREATE, FLAG_CANCEL_CURRENT, FLAG_UPDATE_CURRENT, FLAG_IMMUTABLE, Intent.FILL_IN_ACTION, Intent.FILL_IN_DATA, Intent.FILL_IN_CATEGORIES, Intent.FILL_IN_COMPONENT, Intent.FILL_IN_PACKAGE, Intent.FILL_IN_SOURCE_BOUNDS, Intent.FILL_IN_SELECTOR, Intent.FILL_IN_CLIP_DATA }) @Retention(RetentionPolicy.SOURCE) public @interface Flags {}
这是一个源码级的注解,有五个经常使用的值以及一些Intent的经常使用值,这五个值的含义大体以下:布局
这里咱们使用第4个,由于它比较经常使用。
效果图:ui