`
xpf1104
  • 浏览: 1437 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

LauncherShowAllApps

 
阅读更多
  最近在学习Launcher
对加载APPS这一块总结了一下,有2块:Load,Bind。
这里偏重于load,如何取出了APPS的title、icon、packagename
可以用于APPS的展现的修改


Launcher.java
LauncherApplication app = ((LauncherApplication)getApplication());
        mModel = app.setLauncher(this);   //初始化mModel.initialize(launcher);
        mIconCache = app.getIconCache();

if (!mRestoring) {
            mModel.startLoader(this, true);
        }                                   //进入了LanucherModel,开始加载


LanucherModel.java
oldThread.stopLocked(); //等待旧进程
mLoaderThread = new LoaderThread(context, oldThread, isLaunching);
                    mLoaderThread.start();

private void loadAndBindAllApps() {

if (!loaded) {
                    loadAllAppsByBatch();

再次调用的话 loaded = mAllAppsLoaded;
                    mAllAppsLoaded = true;
就会直接进入 else {
                    onlyBindAllApps();

mAllAppsList.add(new ApplicationInfo(apps.get(i), mIconCache));
//将取得的值放入AllAppsList
如何取值后面再说

    callbacks.bindAllApplications(added);
                                    } else {
                                        callbacks.bindAppsAdded(added);
                                    }       //绑定应用


下面,来说如何传值
mAllAppsList.add(new ApplicationInfo(apps.get(i), mIconCache));
看ApplicationInfo     public ApplicationInfo(ResolveInfo info, IconCache iconCache) {
iconCache.getTitleAndIcon(this, info);

进入getTitleAndIcon
CacheEntry entry = cacheLocked(application.componentName, info);

mCache.put(componentName, entry);
entry.title = info.loadLabel(mPackageManager).toString();   //取得标题
entry.icon = Utilities.createIconBitmap(
                    info.activityInfo.loadIcon(mPackageManager), mContext);  //取得图片

application.title = entry.title;
            application.titleBitmap = entry.titleBitmap;
            application.iconBitmap = entry.icon;

回到AllAppList
里面对应用进行了操作 add remove update

要想对应用的显示进行操作,必须有唯一标识 一般选择应用的包名
如何取得包名 看removePackage
final ComponentName component = info.intent.getComponent();
            if (packageName.equals(component.getPackageName())) {

同理:如果你想在应用的GRID中显示你需要的应用
就在add方法中加入判断对data.add(info);
        added.add(info); 进行操作

应用程序的GRID AllApps2D
从 final ApplicationInfo info = getItem(position);
   
所有值都存在于
public ApplicationInfo(ApplicationInfo info) {
        super(info);
        componentName = info.componentName;
        title = info.title.toString();
        intent = new Intent(info.intent);
    }

要是想知道为什么能取得值,请进framework里查看取值类的源码


写的很简单,有错误或遗漏什么请大家点出,讨论一下。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics