当前位置:  编程技术>移动开发
本页文章导读:
    ▪在SurfaceView下画图的片段        在SurfaceView上画图的片段         mPaint = new Paint();             mPaint.setColor(Color.RED);// 画笔为绿色              mPaint.setStrokeWidth(2); // 设置画笔粗细 byte[] buffer = new byte[300]; t.........
    ▪ froyo系统原生bug及匡正:改变系统语言时Launcher2的AllApps内shortcut不刷新[转载]        froyo系统原生bug及修正:改变系统语言时Launcher2的AllApps内shortcut不刷新[转载] 原文把froyo的Launcher2移植到eclair后,产生了一些小问题,都一一解决掉了.这是市场反馈回来的一个问题之一,摸清内.........
    ▪ 智能手机下的第一桶金:移动学习       智能手机上的第一桶金:移动学习 重大技术创新正在影响和将要影响我们生活、工作的点点滴滴,同时涌现的巨大财富也会造就一批新的主人。 互联网的造富运动刚刚落下,移动互联网的.........

[1]在SurfaceView下画图的片段
    来源: 互联网  发布时间: 2014-02-18
在SurfaceView上画图的片段
        mPaint = new Paint();    
        mPaint.setColor(Color.RED);// 画笔为绿色     
        mPaint.setStrokeWidth(2); // 设置画笔粗细

byte[] buffer = new byte[300];
try {
File f = new File("/sdcard/xiangshuibaihe.mp3");
        FileInputStream input;
input = new FileInputStream(f);
        BufferedInputStream inBuff=new BufferedInputStream(input);
        while(inBuff.read(buffer) != -1 && showYN==1)
        {
        //sleep(1000);
            Canvas canvas = mysv.getHolder().lockCanvas(  
                    new Rect(0, 0, 0 + buffer.length, mysv.getHeight()));// 关键:获取画布  
            canvas.drawColor(Color.BLACK);// 清除背景
            for(int i=0; i<buffer.length; i++)
            {
            int y = buffer[i];
            int x = i;
            canvas.drawLine(x, 0, x, y, mPaint);  
            }
mysv.getHolder().unlockCanvasAndPost(canvas);// 解锁画布,提交画好的图像
        }

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} */

    
[2] froyo系统原生bug及匡正:改变系统语言时Launcher2的AllApps内shortcut不刷新[转载]
    来源: 互联网  发布时间: 2014-02-18
froyo系统原生bug及修正:改变系统语言时Launcher2的AllApps内shortcut不刷新[转载]
原文

把froyo的Launcher2移植到eclair后,产生了一些小问题,都一一解决掉了.这是市场反馈回来的一个问题之一,摸清内部机制颇废了一番周折.也算见识了android系统内部的另一个面向切面编程案例,很有必要记录一下,有时间好好研究研究,可以借此做些特殊的系统功能.

严格意义上说,这并不是跨版本移植产生的问题,而是系统原生的一个bug,用samsung的galaxy tab平板模拟器测试同样是此现象:当在Launcher里面启动Settings,改变语言设置后,再回到Launcher,AllApps2D里面的shortcuts文字部分并不随之更新,还是保持原样.其它部分却已更新.

察看Settings源码可以知道,设置语言,改变的只是执行了如下代码:
Java代码
try { 
    IActivityManager am = ActivityManagerNative.getDefault(); 
    Configuration config = am.getConfiguration(); 
 
    Loc loc = mLocales[position]; 
    config.locale = loc.locale; 
 
    // indicate this isn't some passing default - the user wants this remembered 
    config.userSetLocale = true; 
 
    am.updateConfiguration(config); 
    // Trigger the dirty bit for the Settings Provider. 
    BackupManager.dataChanged("com.android.providers.settings"); 
} catch (RemoteException e) { 
    // Intentionally left blank 

finish(); 


在configuration改变后,系统会让每一个切换到前台的Activity destroy,然后重新加载至原位置,非常奇妙的刷新操作,有时间要看看他如何保存当前状态的代码,比如,当前切换到前台的Activity是launcher,则会一直加载到allapps2d打开,而不是oncreate完成后的初始位置.对于状态机学习来说,Launcher无疑是很好的教科书.

然而,configuration的控制范围只是所有的Activity,Activity实现了一个接口ComponentCallbacks,里面有:


Java代码
/**
* Called by the system when the device configuration changes while your
* activity is running.  Note that this will <em>only</em> be called if
* you have selected configurations you would like to handle with the
* {@link android.R.attr#configChanges} attribute in your manifest.  If
* any configuration change occurs that is not selected to be reported
* by that attribute, then instead of reporting it the system will stop
* and restart the activity (to have it launched with the new
* configuration).

* <p>At the time that this function has been called, your Resources
* object will have been updated to return resource values matching the
* new configuration.

* @param newConfig The new device configuration.
*/ 
public void onConfigurationChanged(Configuration newConfig) { 
    mCalled = true; 
 
    if (mWindow != null) { 
        // Pass the configuration changed event to the window 
        mWindow.onConfigurationChanged(newConfig); 
    } 



而对于Launcher来说,allapps里面的内容是通过LauncherModel.java里面的线程类去异步加载的,重启Launcher这个Activity,并不会让LauncherModel里面的缓存的allapps内容刷新,Launcher是直接拿了LauncherModel里面缓存的query数据而不是通知loader线程重新获取,问题就出在这里了.

解决的方法并不复杂,Launcher在调onCreate()的时候,会调用checkForLocaleChange()方法检查是否语言设置是否被修改,我们定义一个boolean类变量,把语言设置是否改变存到里面,然后为LauncherModel重构一个startLoader方法,在onCreat()代码的相应位置调用此重构方法,把状态值传进去.在内部类Loader的loadAndBindAllApps()方法里,增加判断条件让语言改变时走loadAllAppsByBatch()路线即可.

我们来看看可以从中学到些什么?
1\定义和使用configuration的类变量,可以很好的传递任何全局数据,可以和硬件方便的通信.
2\利用configuration控制framework各模块ui.一个简单例子,在launcher中,利用语言设置变化,显示或隐藏不同语言环境的应用,比如面向国内市场的机器,youtube反正用不上,就可以隐藏掉.加上youku.平板电脑没有phone功能的,把phone的shortcut给拿掉.
3\另一个想法,能否利用configuration绕过系统权限实现截屏等需要root权限的功能?

    
[3] 智能手机下的第一桶金:移动学习
    来源: 互联网  发布时间: 2014-02-18
智能手机上的第一桶金:移动学习
重大技术创新正在影响和将要影响我们生活、工作的点点滴滴,同时涌现的巨大财富也会造就一批新的主人。

互联网的造富运动刚刚落下,移动互联网的机会马上就要开始。机不可失,失不再来。在产业的躁动中,你的机会在哪里?

移动时代已经拉开序幕

我说的移动互联网,主要是指以手机为上网终端的相关产业。手机上网,从WAP时代就开始酝酿,一直是光见打雷不见下雨。直到苹果公司推出IPhone以及Appstore,才算让人看到希望。

于是乎,各个有追求的国内外相关公司都推出了自己的Appstore。不怕搭错车,就怕跟不上。国外的有谷歌、诺基亚、三星,国内的有中国移动、联通、联想。其中最卖力的是联想,还虔诚的复制了乐phone和乐pad。

在言必称“移动互联网”的今天,却没有几个人能把移动互联网说的清楚。大家判断的依据主要有这两么两点:第一是手机用户在绝对数量和增长速度远远超过PC的时候,一个新的商业时代到来了。最近微软宣布背弃WinTel联盟,下一代Windows操作系统将运行在“一切设备”上,包括采用了英特尔竞争对手ARM芯片的平板电脑。

业界普遍认为这是PC时代谢幕的尾声。微软曾经在Intel的压力下放弃对ARM的win7支持。芯片产业的人都知道ARM是嵌入式芯片的领头羊,ARM的低功耗不是Intel这样的对手一天两天能够赶上的。

移动时代已经悄然到来,可是很多人还没有准备好。

看,谁已经在悄然布局

在致员工的元旦贺词里,华为公司披露了手机类终端的战绩。

其中2010年华为终端全球发货量为1.2亿台。2010年华为终端全球销售收入突破45亿美元,再创历史高峰。在家庭融合终端方面,华为多年来就是全球第一。2010年,华为融合终端量订货同比增长超过50%;在融合终端市场持续保持全球份额第一。其中,机顶盒实现了300%快速增长,平板电脑产品也大量进入欧美高端市场。

这些终端的业绩,只是华为云计算全业务布局“云、管、端”的一端。在华为眼里,云计算简单说就是业务的IT云,超宽带的IP网络和终端的智能化。

业务的IT化,就是以七号信令为代表的语音业务为主体被以Web为代表的数据业务替代。数据业务代替语音业务,同时也带来了网络通道的IP化、网络的宽带化、超宽带。

终端分为和人打交道的终能终端和不与人打交道的物理终端。

更多的国外IT巨头更多发力在云端。比如IBM的智慧地球、微软的“云计算”、Google的企业在线应用等等。写到这里,大家应该明白为何华为提出IBM、Google是自己的竞争对手了。

如果我们只关注与人打交道的智能手机,那么云计算就有另外一个我们熟悉的名字:移动互联网。

第一桶金:移动学习

云计算,就像信息高速公路,强调的更多是基础设施。移动互联网就像公路上跑的汽车,更关注具体应用。

Appstore,顾名思义,就是这些具体应用的终端大集市。大家都看好集市,认为是个制高点,一窝蜂去建集市了。可是集市平台不会太多,做买卖的应该才是主流。

从应用的角度来看,我认为移动学习可能将是移动互联网爆发的切入点。“互联网应用的第三次浪潮是E-Learning。”对网络学习狂热的思科总裁约翰•钱伯斯曾如此断言。

移动学习的如下特点,决定了其在移动互联网领域的爆发潜力。

第一是碎片化。快速的生活和工作节奏,导致用户学习行为主要以零散时间为主。
第二是个性化。每个人的知识背景、兴趣点、学习重点都不尽相同,从而造成每个人的学习路径也不一样。这种个性化的要求是学习者的自然需求。
第三是移动化。据说90%的人不喜欢学习,所以用户对学习服务的体验是很苛刻的。学习产品除了要照顾用户学习内容的需求,同时还是照顾用户学习的用户体验。根据不同终端对学习体验进行优化,是移动学习的一个关键要求。

一切的背后最重要的原因是,现代的商业激烈竞争要求我们不断的学习充电,不然等待我们的只有被淘汰的命运。

而移动学习,是我们完成充电的最好帮手。Appstore上除了游戏,最多的就是学习类应用。这或许就是暗示我们创业者向那个方向努力的一个强烈信号。
来源:新浪博客

    
最新技术文章:
▪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