代码块:
public class MainActivity extends AppCompatActivity {
NotificationManager manager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//声明通知管理类
manager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
}
public void click(View view){
switch (view.getId()){
case R.id.btn_1:
//创建通知对象
NotificationCompat.Builder builder=new NotificationCompat.Builder(this);
builder.setSmallIcon(R.mipmap.ic_launcher)//设置小图标,如果设置了大小图标,各归各位,如果没设大图标,小图标就变到大图标的位置
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.emoji_046))//设置大图标
.setContentTitle("下课通知")//设置标题
.setContentInfo("下课了,都出去玩吧");//内容显示靠右
manager.notify(1,builder.build());//发送通知
break;
case R.id.btn_2:
//可以通知此意图,从通知栏跳到当前页
//参数:1.当前对象,2.请求码,3.跳转意图,4,PendingIntent的标记
PendingIntent intent=PendingIntent.getActivity(this,1111,new Intent(this,MainActivity.class),PendingIntent.FLAG_ONE_SHOT);
NotificationCompat.Builder builder2=new NotificationCompat.Builder(this);
builder2.setSmallIcon(R.mipmap.ic_launcher)//设置小图标,如果设置了大小图标,各归各位,如果没设大图标,小图标就变到大图标的位置
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.emoji_046))//设置大图标
.setContentTitle("下课通知")//设置标题
.setContentText("我们都下课了,好饿呀")//内容显示靠左
.setDefaults(Notification.DEFAULT_ALL)//设置通知时候的提示方式
.setContentIntent(intent)//设置延迟意图
.setAutoCancel(true);//设置点击自动取消
manager.notify(2,builder2.build());
break;
case R.id.btn_3://大图通知
Notification.Builder builder3=new Notification.Builder(this);
builder3.setSmallIcon(R.mipmap.ic_launcher)//设置小图标,如果设置了大小图标,各归各位,如果没设大图标,小图标就变到大图标的位置
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.emoji_046))//设置大图标
.setContentTitle("下课通知")//设置标题
.setContentText("我们都下课了,好饿呀")//内容显示靠左
.setDefaults(Notification.DEFAULT_ALL);//设置通知时候的提示方式
Notification.BigPictureStyle style=new Notification.BigPictureStyle();
style.setBigContentTitle("我是美女")//设置大图的标题
.bigPicture(BitmapFactory.decodeResource(getResources(),R.mipmap.mv1))//设置大图的图片
.setSummaryText("上一句是假的")//设置大图的内容
.setBuilder(builder3);//把设置好的大图再填充给通知
final NotificationManager manager1=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
manager1.notify(3,builder3.build());
break;
case R.id.btn_4:
final Notification.Builder builder4=new Notification.Builder(this);
builder4.setSmallIcon(R.mipmap.ic_launcher)//设置小图标,如果设置了大小图标,各归各位,如果没设大图标,小图标就变到大图标的位置
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.emoji_046))//设置大图标
.setContentTitle("下课通知")//设置标题
.setContentText("我们都下课了,好饿呀")//内容显示靠左
.setDefaults(Notification.DEFAULT_ALL);//设置通知时候的提示方式
new Thread(new Runnable() {
@Override
public void run() {
for (int i=0;i<=100;i+=10){
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
//参数:1,最大值,2.设置当前进度,3.设置是否模糊进度,true:模糊进度,flase:有进度在跑
builder4.setProgress(100,i,true);
manager.notify(4,builder4.build());
}
builder4.setContentText("下载已完成");
manager.notify(4,builder4.build());
manager.cancel(4);//关闭指定id的通知
}
}).start();
break;
case R.id.btn_6://自定义的通知
Notification.Builder builder5=new Notification.Builder(this);
builder5.setSmallIcon(R.mipmap.ic_launcher);
//实例化,能够进行化进程间的通信的加载布局文件的对象
RemoteViews views=new RemoteViews(getPackageName(),R.layout.self);
views.setImageViewResource(R.id.iv,R.mipmap.emoji_046);//设置图片
views.setTextViewText(R.id.tv,"我就是更改后的值");
//builder5.setCustomContentView(views);//新的把自定义的布局文件对象填充给通知的方法,要求sdk24以上
builder5.setContent(views);//把自定义的布局文件对象填充给通知
manager.notify(5,builder5.build());
break;
}
}
}
主布局activity_main:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="发送普通通知"
android:onClick="click"
android:id="@+id/btn_1" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="发送常规通知"
android:onClick="click"
android:id="@+id/btn_2" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="发送大视图通知"
android:onClick="click"
android:id="@+id/btn_3" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="发送进度通知"
android:onClick="click"
android:id="@+id/btn_4" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="取消所有通知"
android:onClick="click"
android:id="@+id/btn_5" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="自定义通知"
android:onClick="click"
android:id="@+id/btn_6" />
</LinearLayout>
self:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:gravity="center_horizontal"
android:layout_height="match_parent">
<ImageView
android:id="@+id/iv"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@mipmap/ic_launcher"
/>
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我是初始值"/>
</LinearLayout>
会涉及到的通知权限:
<!-- 闪光灯权限 -->
<uses-permission android:name="android.permission.FLASHLIGHT"/>
<!-- 振动器权限 -->
<uses-permission android:name="android.permission.VIBRATE"/>