当前位置:  编程技术>移动开发
本页文章导读:
    ▪小弟我的收藏代码        我的收藏代码 我的收藏代码 ......
    ▪ 怎么隐藏Launcher中live wallpapers入口        如何隐藏Launcher中live wallpapers入口 公司某产品性能有限,需要屏蔽live wallpapers防止内存使用量过大影响客户体验,于是按照经验在Launcher2目录寻找设置壁纸对话框对应的代码,前一个"Add to Home scre.........
    ▪ killBackgroundProcess使用 杀死线程有关问题       killBackgroundProcess使用 杀死线程问题 ActivityManager activityManager = (ActivityManager)this.getSystemService(ACTIVITY_SERVICE); activityManager.killBackgroundProcess(myProcessId); 即使加上权限也没用 后来发现 只有在2.2 上.........

[1]小弟我的收藏代码
    来源: 互联网  发布时间: 2014-02-18
我的收藏代码
我的收藏代码

    
[2] 怎么隐藏Launcher中live wallpapers入口
    来源: 互联网  发布时间: 2014-02-18
如何隐藏Launcher中live wallpapers入口

公司某产品性能有限,需要屏蔽live wallpapers防止内存使用量过大影响客户体验,于是按照经验在Launcher2目录寻找设置壁纸对话框对应的代码,前一个"Add to Home screen"Dialog对象创建位置轻松找到,在Launcher.java中有如下代码:

 

        if (mWorkspace.allowLongPress()) {
            if (cellInfo.cell == null) {
                if (cellInfo.valid) {
                    // User long pressed on empty space
                    mWorkspace.setAllowLongPress(false);
                    mWorkspace.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS,
                            HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING);
                    showAddDialog(cellInfo);
                }
            } else {
                if (!(cellInfo.cell instanceof Folder)) {
                    // User long pressed on an item
                    mWorkspace.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS,
                            HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING);
                    mWorkspace.startDrag(cellInfo);
                }
            }
        }

 

继续寻找showAddDialog(cellInfo):

 

 

    private void showAddDialog(CellLayout.CellInfo cellInfo) {
        mAddItemCellInfo = cellInfo;
        mWaitingForResult = true;
        showDialog(DIALOG_CREATE_SHORTCUT);
    }

 

代码携带参数跳入Launcher.java的父类Activity.java的showDialog()方法,在Activity.java源码中查找,发现接下来将会跳入Launcher.java的onCreateDialog(int id)方法,代码如下:

 

 

    @Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
            case DIALOG_CREATE_SHORTCUT:
                return new CreateShortcut().createDialog();
            case DIALOG_RENAME_FOLDER:
                return new RenameFolder().createDialog();
        }

        return super.onCreateDialog(id);
    }

 

显然,这里return 的是case  DIALOG_CREATE_SHORTCUT,再进入私有类CreateShortcut

 

 

        Dialog createDialog() {
            mWaitingForResult = true;

            mAdapter = new AddAdapter(Launcher.this);

            final AlertDialog.Builder builder = new AlertDialog.Builder(Launcher.this);
            builder.setTitle(getString(R.string.menu_item_add_item));
            builder.setAdapter(mAdapter, this);

            builder.setInverseBackgroundForced(true);

            AlertDialog dialog = builder.create();
            dialog.setOnCancelListener(this);
            dialog.setOnDismissListener(this);
            dialog.setOnShowListener(this);

            return dialog;
        }

 

至此,看到了第一个"Add to Home screen"Dialog的初始化位置,进入AddAdapter的构造器,里面有如下代码:

 

 

        mItems.add(new ListItem(res, R.string.group_shortcuts,
                R.drawable.ic_launcher_shortcut, ITEM_SHORTCUT));

        mItems.add(new ListItem(res, R.string.group_widgets,
                R.drawable.ic_launcher_appwidget, ITEM_APPWIDGET));
        
        mItems.add(new ListItem(res, R.string.group_live_folders,
                R.drawable.ic_launcher_folder, ITEM_LIVE_FOLDER));
        
        mItems.add(new ListItem(res, R.string.group_wallpapers,
                R.drawable.ic_launcher_wallpaper, ITEM_WALLPAPER));

 

如果要对"Add to Home screen"对话框下手,此处正当其位.

然而,我的目标却不是它,继续往下走,郁闷的事情发生了,在"Add to Home screen"Dialog的ItemClick事件处理中,只有如下代码:

 

 

                case AddAdapter.ITEM_WALLPAPER: {
                    startWallpaper();
                    break;

 

再看startWallpaper()方法

 

 

    private void startWallpaper() {
        closeAllApps(true);
        final Intent pickWallpaper = new Intent(Intent.ACTION_SET_WALLPAPER);
        Intent chooser = Intent.createChooser(pickWallpaper,
                getText(R.string.chooser_wallpaper));
        // NOTE: Adds a configure option to the chooser if the wallpaper supports it
        //       Removed in Eclair MR1
//        WallpaperManager wm = (WallpaperManager)
//                getSystemService(Context.WALLPAPER_SERVICE);
//        WallpaperInfo wi = wm.getWallpaperInfo();
//        if (wi != null && wi.getSettingsActivity() != null) {
//            LabeledIntent li = new LabeledIntent(getPackageName(),
//                    R.string.configure_wallpaper, 0);
//            li.setClassName(wi.getPackageName(), wi.getSettingsActivity());
//            chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { li });
//        }
        startActivityForResult(chooser, REQUEST_PICK_WALLPAPER);
    }

 

由于对Intent的粗浅了解,很自然的,我直奔Launcher中注册有ACTION_SET_WALLPAPER的Activity--WallpaperChooser.java,悲剧的是,迎接我的,却是选择壁纸的初始化界面...

另一个dialog的初始化代码神秘的消失了...

 

我跳到Launcher的资源文件目录,想从strings.xml和drawable中找到第二个对话框引用的资源文件,然后所有资源名,找到加载资源的代码,但是,一个都没找到.....反倒在package目录的Wallpaper中找到.

百思不得其解折腾了一小时后,郁闷的上洗手间的时候我终于想到了它的原理:

原来,这第二个dialog并不属于Launcher应用,而是系统接收到这个叫chooser的intent后,查找所有能匹配的Activity得到结果,第二个dialog中的图片文字,在launcher的资源文件中也是没有的,这也是我在Launcher的strings.xml找不到线索的原因.幽默的是,我上洗手间之前,决定删除live Wallpaper对应的apk源码做尝试,而实际上,这就是切合原理的解决之道,而不会引起异常,当然,还有另一种方法,修改live wallpaper应用的intent注册内容也可以做到.

下午复查了下所有wallpaper app,果然都有

<action android:name="android.intent.action.SET_WALLPAPER" />


    
[3] killBackgroundProcess使用 杀死线程有关问题
    来源: 互联网  发布时间: 2014-02-18
killBackgroundProcess使用 杀死线程问题

ActivityManager activityManager = (ActivityManager)this.getSystemService(ACTIVITY_SERVICE);
activityManager.killBackgroundProcess(myProcessId);

即使加上权限也没用 后来发现 只有在2.2 上才可以 API level 8

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3