通知在Android中算是很常见的了,你经常会看到来自某个应用的通知出现在通知栏,或者以横幅的形式出现在手机屏幕最上方,甚至让手机震动、响起铃声以及让提示灯闪烁。今天学习了一下通知的使用方法写一篇笔记吧。
1、短内容通知(只会显示一行文字,再多的话会用省略号省略),并且以横幅的形式显示在屏幕上
2、长内容形式的通知(可以多行显示通知内容)
3、图片形式的通知
1、首先新建一个项目,我们在布局文件里放三个按键,分别模仿发起三种不同的通知(1.短内容的、2.长内容的、3.以图片形式通知的)代码如下:
这个布局文件就非常简单了,就三个按钮没其他什么东西,主要都是用来模仿应用发起通知。
2、当我们点击某一条通知的时候他应该跳到一个Activity吧,所以在新建一个Activity名叫NotificationActivity,当我们点击一条通知的时候让它跳到这个Activity。当然每个不同的通知点击以后跳转到的Activity一般是不一样的,我这里为了简便,就让它们都跳到这个Activity。它的代码赫尔布局如下:
public class NotificationActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate ( savedInstanceState );
setContentView ( R.layout.activity_notifacation );
//点击该条通知后还可以用如下方法取消该条通知
NotificationManager manager = (NotificationManager)
getSystemService ( NOTIFICATION_SERVICE );
manager.cancel ( 1 );//参数是要取消该条通知的ID
// 下面代码是跳转过来后销毁前一个Activity
//mainActivity是在MainActivity里面定义的
// MainActivity.mainActivity.finish();
}
}
这个Activity没什么好说的,主要是让它跳转到这个Activity就OK了。
3、下面就是最主要也是最重要的MianActivity的代码了:
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private Button mBt_short;
private Button mBt_long;
private Button mBt_image;
public static MainActivity mainActivity;//定义全局变量
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate ( savedInstanceState );
setContentView ( R.layout.activity_main );
mBt_short = findViewById ( R.id.mBt_short );
mBt_long = findViewById ( R.id.mBt_long );
mBt_image = findViewById ( R.id.mBt_image );
mBt_short.setOnClickListener ( this );
mBt_long.setOnClickListener ( this );
mBt_image.setOnClickListener ( this );
mainActivity = this;//将当前Activity赋值给它,可以在其他Activity调用
}
@Override
public void onClick(View view) {
switch (view.getId ()){
case R.id.mBt_short:
//给通知添加点击跳转的Activity
Intent intent = new Intent(MainActivity.this,NotificationActivity.class);
PendingIntent pi = PendingIntent.getActivity ( this,0,intent,0 );
//获得NotificationManager实例
NotificationManager manager = (NotificationManager)
getSystemService ( NOTIFICATION_SERVICE );
//创建notification对象
Notification notification = new NotificationCompat.Builder(this)
//设置notification对象
//priority是设置通知重要程度的,像下面这样设置,
// 该通知会在屏幕最上面以横幅的形式出现
.setPriority ( NotificationCompat.PRIORITY_MAX )
.setContentTitle ( "一个短的通知" )
.setContentText ( "只会显示一行," +
"太长就是省略号" )
.setAutoCancel ( true )//点击该条通知后消失在通知栏
.setWhen ( System.currentTimeMillis () )
.setSmallIcon ( R.mipmap.ic_launcher )
.setLargeIcon ( BitmapFactory.decodeResource
( getResources (),R.mipmap.ic_launcher ) )
.setContentIntent ( pi )//将之前创建的pi传进去
.setVibrate ( new long[]{0,1000,1000,1000,} )//设置震动
.setLights ( Color.GREEN,1000,1000 )//设置提示灯
//下面是设置成通知的默认效果(震动、铃声、提示灯)
//.setDefaults ( NotificationCompat.DEFAULT_ALL )
.build ();//所有的设置方法在.build方法前调用
manager.notify ( 1,notification );//其中1是这条通知的ID
break;
case R.id.mBt_long:
Intent intent2 = new Intent(MainActivity.this,NotificationActivity.class);
PendingIntent pi2 = PendingIntent.getActivity ( this,0,intent2,0 );
NotificationManager manager2 = (NotificationManager)
getSystemService ( NOTIFICATION_SERVICE );
Notification notification2 = new NotificationCompat.Builder ( this )
.setContentTitle ( "一个长的通知" )
//当通知内容太长一行显示不了,可以使用setStyle
.setStyle ( new NotificationCompat.BigTextStyle().bigText(
"这是一个非常长的通知消息,长到普通的通知消息放不" +
"下,只能使用特殊的通知形式,像现在这样。" ) )
.setWhen ( System.currentTimeMillis () )
.setSmallIcon ( R.mipmap.ic_launcher )
.setLargeIcon ( BitmapFactory.decodeResource
( getResources (),R.mipmap.ic_launcher ) )
.setAutoCancel ( true )
.setContentIntent ( pi2 )
.build ();
manager2.notify (2,notification2 );
break;
case R.id.mBt_image:
Intent intent3 = new Intent(MainActivity.this,NotificationActivity.class);
PendingIntent pi3 = PendingIntent.getActivity ( this,0,intent3,0 );
NotificationManager manager3 = (NotificationManager)
getSystemService ( NOTIFICATION_SERVICE );
Notification notification3 = new NotificationCompat.Builder ( this )
.setContentTitle ( "一个图片的通知" )
//当通知内容的图片形式时,也使用setStyle
.setStyle ( new NotificationCompat.BigPictureStyle ( ).
bigPicture ( BitmapFactory.decodeResource
( getResources (),R.drawable.big_image ) ))
.setWhen ( System.currentTimeMillis () )
.setSmallIcon ( R.mipmap.ic_launcher )
.setLargeIcon ( BitmapFactory.decodeResource
( getResources (),R.mipmap.ic_launcher ) )
.setAutoCancel ( true )
.setContentIntent ( pi3 )
.build ();
manager3.notify (3,notification3);
break;
default:
break;
}
}
}
这个有点长,但是并不复杂。主要是在onClick(View view)方法里面给三个按钮分别设定了不同形式的通知,所以显得有点长。创建通知的代码我都写了注释的,所以这里就不做过多的详细解释了。另外定义了一个全局变量mainActivity并且将this赋值给它,主要是为了在NotificationActivity里面使用它将MainActivity销毁掉,其实销毁不销毁的无所谓的,所以我注释掉了。
源代码下载