前段时间做了个九宫格文件管理器(GridView实现,1920*1080分辨率,定制Android,目前只在MTK和MSTAR平台上测试及完善过),由于此工程为公司项目中的子项目,代码就不公开了(不过,实现不难,以下只提供主要代码处理和实现考虑情况)
/storage为根路径
静默安装应用(过程中会有类ProgressBar滚动直到完成操作或操作失败。静默安装过程放在线程中以防止UI卡顿或者因为权限等原因造成ANR使进程被Kill(原生安卓只有在极端情况下才会kill进程,相关源码:ActivityManagerService.java中管理Activity的代码))
静默卸载应用(同上)
以上仅供参考学习!其实文件管理器实现起来很简单,只不过过多的细节需要进行考虑而已①。还是得一边做一边在脑海中与原生的文件管理器模拟对比,逐渐完善。
①细节包括:
1. 文件管理器中安装应用后,返回到文件管理器时焦点位置是否要记录还原,如果不还原文件过多时可能要翻好多下才能找到安装的apk文件。
2.在正在使用的存储介质拔出时,提示并只能退出。提示控件对话框(以下叫dialog)截获onKeyDown事件致使点一次返回响应两次返回操作的问题:先dialog消失,接着Activity响应back事件,也就是事件冲突和截获,可以了解一下onKeyDown返回值代表的意思。而真实的路径已经不存在,所以即使按返回,dialog要消失且程序要有“待机”界面或不友好点直接退出。
3.文件或文件夹可能会有权限问题要处理,在清单文件AndroidManifest.xml中配置android:sharedUserId=”android.uid.system”让应用程序成为系统应用,但最好的做法还是区分文件和文件夹进行相同的提示,但给予不同的操作。
其实,一分析,有很多的…还是要以用户的角度去做东西。
好了,直接上代码,在这里只放上写的Demo的Adaper部分供大家学习:
BaseAdapter.java
public class GridAdapter extends BaseAdapter {
private LayoutInflater inflater;
private Bitmap directory, file_notinstall, file_hasinstall,backBitmap;
private ArrayList<String> names = null;
private ArrayList<String> paths = null;
private ArrayL