- Android4.4以后不允许非系统应用发送系统广播,所以更新媒体库的广播Intent.ACTION_MEDIA_MOUNTED 在4.4之后无效
- Android多媒体数据不是从文件系统中取?是从多媒体数据库中取? 这二者有什么区别?
Android系统在启动的时候会启动MediaScannerService扫描系统上的多媒体文件,然后将这些多媒体文件的信息加入到多媒体数据库中,应用程序要取得这些多媒体信息就是从这个多媒体数据库里面去取的,并不是从SD卡中取。也就是说,如果开机后增加或删除了一些多媒体,这个多媒体数据库是不会自动刷新的。
- 更新媒体数据库时,使用
MediaScannerConnection.scanFile(this, new String[] {"文件全路径"}, null,null);
和
intent.setData(Uri.fromFile(new File(“文件路径,包括文件名”)));
context.sendBroadcast(intent);```都只更新所在数据库中文件信息的列,与之相关的相册信息不会更新
4. 调用相机拍摄照片返回照片列表显示界面时不能更行列表,重新选择相册才可以更新。但这两个都是用同一个显示逻辑,为什么?
拍摄照片返回并读取,涉及到以下过程 ---调用相机,设置存储路径,照片文件存储,扫描照片,加载到媒体库。扫描 MediaScannerConnection是异步操作,如果在扫描还没有完成(也就是照片信息没有加载到媒体库中)就读取显示照片,当然不能找到。
【经验教训】当从网络上查找到新的方法解决需求时,最好看一下这个方法各个参数的意义,这样可以根据实际需求应用,如果有时间看看其他重载方法更好。
5. fragment的使用
(1)extends Fragment和 extends FragmentActivity有什么区别
(2)android.app.Fragment,因为我们的程序是面向Android 4.0以上系统的,另一个包下的Fragment主要是用于兼容低版本的Android系统
(3)activity.xml中放置一个FrameLayout,代码中用fragment进行替代
(4)fragment之间中进行消息传递
(5)activity和fragment传递消息
(6)activity调用fragment的UI
(7)fragment调用activity的UI
6.接口定义的一般方法:例:A中进行接口B定义:
Class A{
void 调用方法(B b){
this.b=b;
...
***b.接口方法(传入参数);***
}
interface B{
接口方法
}
}