Notification通知

首先看看默认的样式效果:



系统默认的通知(通知的样式是默认的)

步骤一:创建通知并指定通知中的一些属性

	//1.创建通知
        Notification notification=new NotificationCompat
                .Builder(this)
                .setSmallIcon(R.drawable.icon_notification)
                .setTicker("正在播放:海阔天空")
                .setContentTitle("海阔天空")
                .setContentText("beyound")
                .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.icon))
                .setWhen(System.currentTimeMillis())  //系统时间
                .setOngoing(true)  //左右滑动可以取消
                .setContentIntent(geContentIntent())  //默认通知
                .build();


	//点击通知后,跳转到某个activity,(还可以发送广播,开启服务)
	private PendingIntent geContentIntent() {
    //非即时意图,未决定的意图不是马上执行,满足某个条件后执行,

    //requestCode请求码
   /* FLAG_UPDATE_CURRENT表示如果多次调用getActivity方法时,如果请求码一样,返回的还是同一个pendingIntent,不会再次重新创建一个pendingIntent只会刷新意图中的一些数据,
    * 简单的来说就是请求码一样,pendingIntent只会刷新意图中的一些数据,而不会重新创建对象
    */
    Intent intent=new Intent(this,AudioPlayActivity.class);
    int requestCode=0;
    PendingIntent pendIntent=PendingIntent.getActivity(this,requestCode,intent,PendingIntent.FLAG_UPDATE_CURRENT);
    return  pendIntent;
}

步骤二:显示通知
 private NotificationManager notificationManager;
    private  int notificationId=R.drawable.icon;
    notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//2.显示通知
notificationManager.notify(notificationId,notification);

步骤三:取消通知
/** 取消通知 */
    private void cancelNotification() {
        notificationManager.cancel(notificationId);
    }

自定义的通知的通知(通知的样式可以是自定义的)
老样子先看看效果图

自定义通知步骤:
步骤一:既然是自定义的通知,样式肯定与系统的有区别喽,所以先准备一个样式也就是一个布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/root"
    android:layout_width="match_parent"
    android:layout_height="64dp"
    android:background="#7b7575"
    android:gravity="center_vertical"
    android:orientation="horizontal">

    <!--注意如果LinearLayout的layout_height是wrap_content,对于某些机型有可能会出现问题-->
    <ImageView
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:background="@drawable/icon" />

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:layout_weight="1"
        android:orientation="vertical">

        <TextView
            android:id="@+id/tv_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="标题"
            android:textSize="16sp" />

        <TextView
            android:id="@+id/tv_content"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp"
            android:text="内容"
            android:textSize="14sp" />

    </LinearLayout>

    <Button
        android:id="@+id/btn_prev"
        android:layout_width="35dp"
        android:layout_height="35dp"
        android:background="@drawable/icon_notification_prev" />

    <Button
        android:id="@+id/btn_next"
        android:layout_width="35dp"
        android:layout_height="35dp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:background="@drawable/icon_notification_next" />

</LinearLayout>

步骤二:创建通知并指定通知中的一些属性
  //1.创建通知
        Notification notification=new NotificationCompat
                .Builder(this)
                .setSmallIcon(R.drawable.icon_notification)
                .setTicker("正在播放:海阔天空")
                .setOngoing(true)  //左右滑动可以取消
                .setContent(getRemoteView())//自定义通知
                .build();

//通知栏的根布局
private  static  final  int NOTIFICATION_ROOT=1;
//通知栏的上一首按钮
private  static  final  int NOTIFICATION_PREV=2;
//通知栏的下一首按钮
private  static  final  int NOTIFICATION_NEXT=3;


private PendingIntent getPendingIntent(int what) {
    int requestCode=what;
    Intent intent=new Intent(this,AudioPlayActivity.class);
    intent.putExtra("what",what);//仅仅是用来作区分是点击的哪个按钮
    PendingIntent pendIntent=PendingIntent.getActivity(this,requestCode,intent,PendingIntent.FLAG_UPDATE_CURRENT);

    return  pendIntent;
}


        /**
         * 定义通知的布局
         * 自定义通知与默认通知之间的区别就在此处
         * @return
         */
        private RemoteViews getRemoteView() {
            RemoteViews remoteViews=new RemoteViews(getPackageName(),R.layout.activity_custom_notification);
            remoteViews.setTextViewText(R.id.tv_title,"海阔天空");//有直接设置属性的方法,不用等findById然后再设置属性
            remoteViews.setTextViewText(R.id.tv_content,"beyound");

            //设置控件的点击事件
            remoteViews.setOnClickPendingIntent(R.id.root,getPendingIntent(NOTIFICATION_ROOT));
            remoteViews.setOnClickPendingIntent(R.id.btn_prev,getPendingIntent(NOTIFICATION_PREV));
            remoteViews.setOnClickPendingIntent(R.id.btn_next,getPendingIntent(NOTIFICATION_NEXT));
            return  remoteViews;
        }


步骤二:显示通知
private NotificationManager notificationManager;
    private  int notificationId=R.drawable.icon;
    notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//2.显示通知
notificationManager.notify(notificationId,notification);

步骤三:跳转到另一个页面进行处理操作
public class AudioPlayActivity  extends Activity {

    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_audio_play);

        textView = (TextView) findViewById(R.id.tv_content);
        int what = getIntent().getIntExtra("what", -1);
        textView.setText("what : " + what);
    }

    /**
     * 点击返回按钮出现的页面会重复打开
     * 解决办法:在清单文件中指定启动模式(process的属性是singleTop)
     * 但是有一个缺陷就是点击上一首,下一首按钮时界面不会发生变化
     * @param intent
     */

    /**
     * 解决上面描述的问题,重写onNewIntent方法当activity已经存在,不会重新创建,会调用此方法传入Intent
     * @param intent
     */
    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);

        int what = intent.getIntExtra("what", -1);
        textView.setText("what : " + what);
    }
}



步骤四:取消通知
/** 取消通知 */
    private void cancelNotification() {
        notificationManager.cancel(notificationId);
    }

清单文件:
 <activity
            android:launchMode="singleTop"
            android:name=".AudioPlayActivity"/>

Demo下载地址:http://download.csdn.net/detail/k2514091675/9819149

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值