首页 > 代码库 > 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 的一些基础实现