package com.duguang.baseanimation.ui.notification; import java.io.IOException; import android.app.Notification; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.res.AssetFileDescriptor; import android.media.MediaPlayer; import android.os.Bundle; import android.support.v4.app.NotificationCompat; import android.support.v4.app.NotificationCompat.Builder; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.RemoteViews; import android.widget.Toast; import com.duguang.baseanimation.R; public class CustomActivity extends BaseNotificationActivity implements OnClickListener { /** TAG */ private final static String TAG = "CustomActivity"; /** 按钮:显示自定义通知 */ private Button btn_show_custom; /** 按钮:显示自定义带按钮的通知 */ private Button btn_show_custom_button; /** Notification 的ID */ int notifyId = 101; /** NotificationCompat 构造器 */ NotificationCompat.Builder mBuilder; /** 是否在播放 */ public boolean isPlay = false; /** 通知栏按钮广播 */ public ButtonBroadcastReceiver bReceiver; /** 通知栏按钮点击事件对应的ACTION */ public final static String ACTION_BUTTON = "com.notifications.intent.action.ButtonClick"; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_notification_custom); initViews(); initButtonReceiver(); } private void initViews() { btn_show_custom = (Button) findViewById(R.id.btn_show_custom); btn_show_custom.setOnClickListener(this); btn_show_custom_button = (Button) findViewById(R.id.btn_show_custom_button); btn_show_custom_button.setOnClickListener(this); } public void shwoNotify() { // 先设定RemoteViews RemoteViews view_custom = new RemoteViews(getPackageName(), R.layout.activity_notification_view_custom); // 设置对应IMAGEVIEW的ID的资源图片 view_custom.setImageViewResource(R.id.custom_icon, R.drawable.notification_icon); // view_custom.setInt(R.id.custom_icon,"setBackgroundResource",R.drawable.icon); view_custom.setTextViewText(R.id.tv_custom_title, "今日头条"); view_custom.setTextViewText(R.id.tv_custom_content, "金州勇士官方宣布球队已经解雇了主帅马克-杰克逊,随后宣布了最后的结果。"); // view_custom.setTextViewText(R.id.tv_custom_time, // String.valueOf(System.currentTimeMillis())); // 设置显示 // view_custom.setViewVisibility(R.id.tv_custom_time, View.VISIBLE); // view_custom.setLong(R.id.tv_custom_time,"setTime", // System.currentTimeMillis());//不知道为啥会报错,过会看看日志 // 设置number // NumberFormat num = NumberFormat.getIntegerInstance(); // view_custom.setTextViewText(R.id.tv_custom_num, // num.format(this.number)); mBuilder = new Builder(this); mBuilder.setContent(view_custom) .setContentIntent( getDefalutIntent(Notification.FLAG_AUTO_CANCEL)) .setWhen(System.currentTimeMillis())// 通知产生的时间,会在通知信息里显示 .setTicker("有新资讯").setPriority(Notification.PRIORITY_DEFAULT)// 设置该通知优先级 .setOngoing(false)// 不是正在进行的 true为正在进行 效果和.flag一样 .setSmallIcon(R.drawable.notification_icon); // mNotificationManager.notify(notifyId, mBuilder.build()); Notification notify = mBuilder.build(); notify.contentView = view_custom; // Notification notify = new Notification(); // notify.icon = R.drawable.icon; // notify.contentView = view_custom; // notify.contentIntent = // getDefalutIntent(Notification.FLAG_AUTO_CANCEL); mNotificationManager.notify(notifyId, notify); } /** * 带按钮的通知栏 */ public void showButtonNotify() { NotificationCompat.Builder mBuilder = new Builder(this); RemoteViews mRemoteViews = new RemoteViews(getPackageName(), R.layout.activity_notification_view_custom_button); mRemoteViews.setImageViewResource(R.id.custom_song_icon, R.drawable.notification_sing_icon); // API3.0 以上的时候显示按钮,否则消失 mRemoteViews.setTextViewText(R.id.tv_custom_song_singer, "周杰伦"); mRemoteViews.setTextViewText(R.id.tv_custom_song_name, "七里香"); // 如果版本号低于(3。0),那么不显示按钮 if (BaseTools.getSystemVersion() <= 9) { mRemoteViews.setViewVisibility(R.id.ll_custom_button, View.GONE); } else { mRemoteViews.setViewVisibility(R.id.ll_custom_button, View.VISIBLE); // if (isPlay) { mRemoteViews.setImageViewResource(R.id.btn_custom_play, R.drawable.notification_btn_pause); } else { mRemoteViews.setImageViewResource(R.id.btn_custom_play, R.drawable.notification_btn_play); } } // 点击的事件处理 Intent buttonIntent = new Intent(ACTION_BUTTON); /* 上一首按钮 */ buttonIntent.putExtra(INTENT_BUTTONID_TAG, BUTTON_PREV_ID); // 这里加了广播,所及INTENT的必须用getBroadcast方法 PendingIntent intent_prev = PendingIntent.getBroadcast(this, 1, buttonIntent, PendingIntent.FLAG_UPDATE_CURRENT); mRemoteViews.setOnClickPendingIntent(R.id.btn_custom_prev, intent_prev); /* 播放/暂停 按钮 */ buttonIntent.putExtra(INTENT_BUTTONID_TAG, BUTTON_PALY_ID); PendingIntent intent_paly = PendingIntent.getBroadcast(this, 2, buttonIntent, PendingIntent.FLAG_UPDATE_CURRENT); mRemoteViews.setOnClickPendingIntent(R.id.btn_custom_play, intent_paly); /* 下一首 按钮 */ buttonIntent.putExtra(INTENT_BUTTONID_TAG, BUTTON_NEXT_ID); PendingIntent intent_next = PendingIntent.getBroadcast(this, 3, buttonIntent, PendingIntent.FLAG_UPDATE_CURRENT); mRemoteViews.setOnClickPendingIntent(R.id.btn_custom_next, intent_next); mBuilder.setContent(mRemoteViews) .setContentIntent( getDefalutIntent(Notification.FLAG_ONGOING_EVENT)) .setWhen(System.currentTimeMillis()) // 通知产生的时间,会在通知信息里显示 .setTicker("正在播放").setPriority(Notification.PRIORITY_DEFAULT) // 设置该通知优先级 .setOngoing(true) .setSmallIcon(R.drawable.notification_sing_icon); Notification notify = mBuilder.build(); notify.flags = Notification.FLAG_ONGOING_EVENT; // 会报错,还在找解决思路 // notify.contentView = mRemoteViews; // notify.contentIntent = PendingIntent.getActivity(this, 0, new // Intent(), 0); mNotificationManager.notify(200, notify); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_show_custom: shwoNotify(); break; case R.id.btn_show_custom_button: showButtonNotify(); break; default: break; } } /** 带按钮的通知栏点击广播接收 */ public void initButtonReceiver() { bReceiver = new ButtonBroadcastReceiver(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(ACTION_BUTTON); registerReceiver(bReceiver, intentFilter); } public final static String INTENT_BUTTONID_TAG = "ButtonId"; /** 上一首 按钮点击 ID */ public final static int BUTTON_PREV_ID = 1; /** 播放/暂停 按钮点击 ID */ public final static int BUTTON_PALY_ID = 2; /** 下一首 按钮点击 ID */ public final static int BUTTON_NEXT_ID = 3; /** * 广播监听按钮点击时间 */ public class ButtonBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub String action = intent.getAction(); if (action.equals(ACTION_BUTTON)) { // 通过传递过来的ID判断按钮点击属性或者通过getResultCode()获得相应点击事件 int buttonId = intent.getIntExtra(INTENT_BUTTONID_TAG, 0); switch (buttonId) { case BUTTON_PREV_ID: Log.d(TAG, "上一首"); Toast.makeText(getApplicationContext(), "上一首", Toast.LENGTH_SHORT).show(); break; case BUTTON_PALY_ID: String play_status = ""; isPlay = !isPlay; MediaPlayer play = null; if (isPlay) { play_status = "开始播放"; playBackgroundMusic(); } else { play_status = "已暂停"; stopBackgroundMusic(); } showButtonNotify(); Log.d(TAG, play_status); Toast.makeText(getApplicationContext(), play_status, Toast.LENGTH_SHORT).show(); break; case BUTTON_NEXT_ID: Log.d(TAG, "下一首"); Toast.makeText(getApplicationContext(), "下一首", Toast.LENGTH_SHORT).show(); break; default: break; } } } } @Override protected void onDestroy() { // TODO Auto-generated method stub if (bReceiver != null) { unregisterReceiver(bReceiver); } super.onDestroy(); } private MediaPlayer mplayer; /* * 后台播放背景音 */ private void playBackgroundMusic() { if (mplayer == null) { mplayer = new MediaPlayer(); try { AssetFileDescriptor afd = this.getAssets().openFd("angel.mp3"); // 获取音乐数据源 mplayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); afd.close(); mplayer.setLooping(true); // 设为循环播放 } catch (IOException e) { e.printStackTrace(); } } try { if (mplayer.isPlaying()) { return; } mplayer.prepare(); mplayer.start(); } catch (Exception e) { e.printStackTrace(); } } /* * 停止播放背景音乐 */ private void stopBackgroundMusic() { try { if (null != mplayer) { if (mplayer.isPlaying()) { mplayer.pause(); // mplayer.release(); mplayer = null; } } } catch (Exception e) { e.printStackTrace(); } } }