首页 > 代码库 > android 的一些基础实现

android 的一些基础实现

 1、 Notification的构建随着android的更新一直在变,因此一般最新的设计方法都可以去参考谷歌的文档。

    1、Notification的更新一般不是和activivity控件一样更新,而是重新构建一样的notification,然后用notify(ID,notification)来刷新通知,只要ID一样就会更新,如果没有就创建。

    2、如播放器、FMRadio等需要长期后台运行的则外面可以用startForeground(ID,notification),通知栏一般就不会回收。

    3、利用setStyle来设计notification的样式和一些action的显示:如下面谷歌文档里的一段代码:

     setShowActionsInCompactView设计显示的action的数字,参数是int可变数组,显示相应的action事件

Notification notification = new Notification.Builder(context)
    // Show controls on lock screen even when user hides sensitive content.
    .setVisibility(Notification.VISIBILITY_PUBLIC)
    .setSmallIcon(R.drawable.ic_stat_player)
    // Add media control buttons that invoke intents in your media service
    .addAction(R.drawable.ic_prev, "Previous", prevPendingIntent) // #0
    .addAction(R.drawable.ic_pause, "Pause", pausePendingIntent)  // #1
    .addAction(R.drawable.ic_next, "Next", nextPendingIntent)     // #2
    // Apply the media style template
    .setStyle(new Notification.MediaStyle()
      .setShowActionsInCompactView(1 /* #1: pause button */)
      .setMediaSession(mMediaSession.getSessionToken())
    .setContentTitle("Wonderful music")
    .setContentText("My Awesome Band")
    .setLargeIcon(albumArtBitmap)
    .build();

  2 、按返回键不退出应用而是后台运行(覆写back键)

  关键性的一句是moveTaskToBack(false);

@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
        if (keyCode == KeyEvent.KEYCODE_BACK) { 
            moveTaskToBack(false); 
            return true; 
        } 
        return super.onKeyDown(keyCode, event); 
    }

  3 listView的设置条目位置,setsetSelectionFromTop 无效

   1、无效的原因应该是在点击的某个button时候出现了耗资源耗时操作,比如我遇到的是开启一个收音机的服务导致了listview界面自动刷新回到了listview的最上面,为了解决这个问题在item点击事件里面利用setSelectionFromTop强制指定位置时候无效果。listview的刷新是在启动服务后发生的,且启动服务是另外一个线程,因此就算setSelectionFromTop在启动服务代码后也是无效的,因为运行到setSelectionFromTop时候服务仍然没有开启起来,只有开启起来了listview才会进行刷新。因此必须采用一个异步的延时操作:

final int c = arg2;
       final int y = arg1.getTop();
       mStationList.postDelayed(new Runnable() {
           @Override
           public void run() {
               mStationList.requestFocusFromTouch();
               //int y =mStationList.getHeight()/2-mStationList.getHeight()/6;
               mStationList.setSelectionFromTop(c,y);
           }
       } , 150);  

  2、arg1.getTop()是获取当前条目离listview最上端的距离。arg1是listview的一个Item。

 

android 的一些基础实现