Android 源码Music模块中当正在播放的音乐在下拉菜单中是有显示的。通过什么显示的--notification
关于音乐的显示过程:
1、在notification显示音乐图标

代码如下:
   RemoteViews views = new RemoteViews(getPackageName(),R.layout.statusbar);     views.setImageViewResource(R.id.icon,R.drawable.stat_notify_musicplayerdown);           if (getAudioId() < 0) {               // streaming               views.setTextViewText(R.id.trackname, getPath());               views.setTextViewText(R.id.artistalbum, null);           } else {               String artist = getArtistName();               views.setTextViewText(R.id.trackname, getTrackName());               if (artist == null || artist.equals(MediaStore.UNKNOWN_STRING)){                   artist = getString(R.string.unknown_artist_name);               }               String album = getAlbumName();               if (album == null || album.equals(MediaStore.UNKNOWN_STRING)){                   album = getString(R.string.unknown_album_name);               }                             views.setTextViewText(R.id.artistalbum,                       getString(R.string.notification_artist_album, artist, album)                       );           }                     Notification status = new Notification();           status.contentView = views;           status.flags |= Notification.FLAG_ONGOING_EVENT;           status.icon = R.drawable.stat_notify_musicplayerup;           status.contentIntent = PendingIntent.getActivity(this, 0,                   new Intent("com.android.music.PLAYBACK_VIEWER")                   .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK), 0);           startForeground(PLAYBACKSERVICE_STATUS, status);

1)如果让notification显示自定义的view,则应该使用RemoteView,然后将remoteview赋值给notification的contentView

2)状态栏的图标(最顶层)可以通过设置icon来实现,如果没有设置contentView,则状态栏和通知栏的图标是一样的,由系统来设置背景色。如果设置了contentView,则通知栏会显示自定义的view。

3)

n.flags = Notification.FLAG_AUTO_CANCEL;

设置 n.flags 为 Notification.FLAG_AUTO_CANCEL ,该标志表示当用户点击 Clear之后,能够清除该通知。

4)addFlags(Intent.FLAG_ACTIVITY_NEW_TASK

请注意,如果要以该Intent启动一个Activity,一定要设置 Intent.FLAG_ACTIVITY_NEW_TASK标记。

Intent.FLAG_ACTIVITY_CLEAR_TOP:如果在当前Task中,有要启动的Activity,那么把该Acitivity之前的所有Activity都关掉,并把此Activity置前以避免创建Activity的实例

Intent.FLAG_ACTIVITY_NEW_TASK:系统会检查当前所有已创建的Task中是否有该要启动的Activity的Task,若有,则在该Task上创建Activity,若没有则新建具有该Activity属性的Task,并在该新建的Task上创建Activity。

5)

//PendingIntent
PendingIntent contentIntent = PendingIntent.getActivity(
arg0.getContext(),
R.string.app_name,
i,
PendingIntent.FLAG_UPDATE_CURRENT);

PendingIntent 为Intent的包装,这里是启动Intent的描述,PendingIntent.getActivity返回的PendingIntent表示,此PendingIntent实例中的Intent是用于启动 Activity的Intent。PendingIntent.getActivity的参数依次为:Context,发送者的请求码(可以填0),用于系统发送的Intent,标志位。

其中 PendingIntent.FLAG_UPDATE_CURRENT 表示如果该描述的PendingIntent已存在,则改变已存在的PendingIntent的Extra数据为新的PendingIntent的Extra数据。

这里再简要说一下 Intent 与 PendingIntent 的区别:

Intent:意图,即告诉系统我要干什么,然后系统根据这个Intent做对应的事。如startActivity相当于发送消息,而Intent是消息的内容。

PendingIntent :包装Intent,Intent 是我们直接使用 startActivity , startService或 sendBroadcast 启动某项工作的意图。而某些时候,我们并不能直接调用startActivity ,startServide 或 sendBroadcast,而是当程序或系统达到某一条件才发送Intent。如这里的Notification,当用户点击Notification之后,由系统发出一条Activity 的 Intent 。因此如果我们不用某种方法来告诉系统的话,系统是不知道是使用 startActivity,startService 还是 sendBroadcast 来启动Intent的(当然还有其他的“描述”),因此这里便需要PendingIntent。
下面举一个简单的例子:
@Override      public void onCreate() {          super.onCreate();          Notification notification = new Notification(R.drawable.ic_launcher,                  "有通知到来", System.currentTimeMillis());          Intent notificationIntent = new Intent(this, MainActivity.class); //要启动的Activity        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,                  notificationIntent, 0);          notification.setLatestEventInfo(this, "这是通知的标题", "这是通知的内容",                  pendingIntent);          startForeground(1, notification);          Log.d(TAG, "onCreate() executed");      } 


看完代码一切都明白了..... :SystemUi有关的Notification" title="Android:SystemUi有关的Notification" width="1" height="1">

6)

如何使自己的Notification像Android QQ一样能出现在 “正在运行的”栏目下面

其实很简单,只需设置Notification.flags =Notification.FLAG_ONGOING_EVENT;便可以了。

更多相关文章

  1. Nginx系列教程(六)| 手把手教你搭建 LNMP 架构并部署天空网络电影
  2. Android(安卓)Notification.Builder通知案例分享
  3. Android(安卓)内存相关 onTrimMemory,onLowMemory
  4. WebView设置之WebViewClient
  5. 【转】Android(安卓)解析如何获取SDCard 内存
  6. MTK 6573平台 android 2.3系统上添加维文的详细步骤
  7. Android改变状态栏颜色真麻烦
  8. android savedInstanceState相关知识点
  9. Android(安卓)调用相册 拍照 实现系统控件缩放 切割图片

随机推荐

  1. es软件安装
  2. 最新个税计算、个税倒推和税后倒推公式
  3. 最新Excel个税计算公式来了,说说你每月该
  4. 一网打尽:算术平均、修剪平均和条件平均值
  5. Excel按区间查询,大咖有句悄悄话
  6. Linux必会技能
  7. 【3.8-3.14】上周精彩回顾
  8. 上传自己的镜像被拒绝denied: requested
  9. 应对“角色爆炸”,PBAC 真香!
  10. 2、AP上线的那些事儿(1)capwap建立过程、设