Android之使用通知栏通知的三种方法(短内容、长内容、图片通知)

一、前言:

       通知在Android中算是很常见的了,你经常会看到来自某个应用的通知出现在通知栏,或者以横幅的形式出现在手机屏幕最上方,甚至让手机震动、响起铃声以及让提示灯闪烁。今天学习了一下通知的使用方法写一篇笔记吧。

二、程序实现效果图:

1、短内容通知(只会显示一行文字,再多的话会用省略号省略),并且以横幅的形式显示在屏幕上


2、长内容形式的通知(可以多行显示通知内容)


3、图片形式的通知


三、实现过程以及代码:

1、首先新建一个项目,我们在布局文件里放三个按键,分别模仿发起三种不同的通知(1.短内容的、2.长内容的、3.以图片形式通知的)代码如下:

<?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:layout_height="match_parent"
    >
    <Button
        android:id="@+id/mBt_short"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Notification1"
        android:textAllCaps="false"
        android:layout_gravity="center_horizontal"
       />
    <Button
        android:id="@+id/mBt_long"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Notification2"
        android:textAllCaps="false"
        android:layout_gravity="center_horizontal"
        />
    <Button
        android:id="@+id/mBt_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Notification3"
        android:textAllCaps="false"
        android:layout_gravity="center_horizontal"
        />
</LinearLayout>

这个布局文件就非常简单了,就三个按钮没其他什么东西,主要都是用来模仿应用发起通知。

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();
    }
}
<?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:layout_height="match_parent"
    >
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="This is notification1 Activity"
        android:textSize="20sp"
        android:gravity="center"
        android:layout_marginTop="10dp"/>
</LinearLayout>

这个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销毁掉,其实销毁不销毁的无所谓的,所以我注释掉了。


源代码下载



  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值