现在的位置: 首页 > 综合 > 正文

Gallery3d 学习笔记(1)

2013年10月20日 ⁄ 综合 ⁄ 共 2819字 ⁄ 字号 评论关闭

  最近有空回忆下前一段时间工作中学习的东西,先确定下环境版本 Android 2.3版本。(刚接触Android 一年,有错误请指正)

  负责这个模块后第一步就是静态分析。

  

   首先看 AndroidManifest.xml里面的内容。首先看的是包名

     com.cooliris.media

看过其他模块的人都会发现,其他都是com.android.***的包名,这个包名有点怪,因为这个是一个叫做cooliris的公司写的应用。 然后我们看下源代码里面的目录,有5个目录,分别是 

应用启动

图片缓存 

主要功能 

毕加索 

墙纸

对应5个包,对应的功能暂时先看着,后面再理解。回过头继续看AndroidManifest.xml里面的内容。

接着是权限,注意权限是在Application前面加的。

SET_WALLPAPER                                                                                设置墙纸权限

WRITE_EXTERNAL_STORAGE                                                         读取T卡权限

MANAGE_ACCOUNTS                                                                         获取和管理帐户权限

WRITE_SYNC_SETTINGS READ_SYNC_SETTINGS                   读写同步设置

WAKE_LOCK VIBRATE                                                                        唤醒锁和震动权限

INTERNET                                                                                               互联网访问权限       

USE_CREDENTIALS                                                                            当前用户授权使用证书请求         

ACCESS_FINE_LOCATION ACCESS_COARSE_LOCATION     允许程序访问精确位置     

 在看所有声明的activity:

     com.cooliris.media.Gallery

     com.cooliris.media.CropImage

     com.cooliris.media.MovieView 

     com.cooliris.media.Photographs

     com.cooliris.media.PhotoAppWidgetConfigure

     com.cooliris.media.PhotoAppWidgetBind

  声明的provider:

     com.cooliris.picasa.PicasaContentProvider

  声明的service:

     com.cooliris.picasa.PicasaService

     com.cooliris.cache.CacheService

  声明的receiver:

     com.cooliris.cache.BootReceiver

           BOOT_COMPLETE 

           MEDIA_SCANNER_FINISHED

           MEDIA_MOUNTED

           MEDIA_EJECT

     com.cooliris.media.PhotoAppWidgetProvider             APPWIDGET_UPDATE

     com.cooliris.picasa.PicasaReceiver                    LOGIN_ACCOUNTS_CHANGED_ACTION

  activity数量不多,但并不简单,我们顺着流程看,先看下receiver,这些是应用还没有开启就开始运行的部分。

  首先是com.cooliris.cache.BootReceiver,这个是在四种情况下都会启动的Receiver,开机启动,媒体扫描完毕,媒体挂载上,媒体卸载时。


    @Override
    public void onReceive(final Context context, Intent intent) {
        final String action = intent.getAction();
        Log.i(TAG, "Got intent with action " + action);
        if (Intent.ACTION_MEDIA_SCANNER_FINISHED.equals(action)) {
            ;
        } else if (Intent.ACTION_MEDIA_MOUNTED.equals(action)) {
            ;
        } else if (action.equals(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE)) {
            final Uri fileUri = intent.getData();
            final long bucketId = Utils.getBucketIdFromUri(context.getContentResolver(), fileUri);
            if (!CacheService.isPresentInCache(bucketId)) {
                CacheService.markDirty();
            }
        } else if (action.equals(Intent.ACTION_MEDIA_EJECT)) {
            LocalDataSource.sThumbnailCache.close();
            LocalDataSource.sThumbnailCacheVideo.close();
            PicasaDataSource.sThumbnailCache.close();
            CacheService.sAlbumCache.close();
            CacheService.sMetaAlbumCache.close();
            CacheService.sSkipThumbnailIds.flush();
        }
    }

只有两个地方的处理:  

ACTION_MEDIA_SCANNER_SCAN_FILE

当有人要求我们扫描指定文件或者目录时,我们要做的事情。首先是从Intent中取得要扫描的位置,然后看前面是否已经扫描过了,如果没有扫描过,设置为脏地方,因为Receiver不能做长时间的扫描动作,后面有专门的代码来扫描。

那么在xml中并没有注册这个ACTION_MEDIA_SCANNER_SCAN_FILE,到底是谁发出的这个信息呢?而且这里只有接受到并没有处理,到底是哪里处理的呢?我们下次在讲。

ACTION_MEDIA_EJECT

在媒体卸载时,将本地数据源的图片缩略图缓存关闭,将本地视频缩略图缓存关闭,毕加索数据源的缩略图缓存关闭,缓存服务的三个Cache源也关闭。

  数据源时什么意思呢?可以理解为图片和视频的集合。

  关闭数据源时什么意思呢? 将图片和视频的集合的索引写到一个叫做“DiskCache”的临时文件中。下次用户还是用这个数据源,就可以直接使用索引。

  


抱歉!评论已关闭.