当前位置:  编程技术>移动开发
本页文章导读:
    ▪获取手机外部存储卡的剩下空间        获取手机外部存储卡的剩余空间 private void showSize()   {     /* 将TextView及ProgressBar设定为空值及0 */    myTextView.setText(""); myProgressBar.setProgress(0);    /* 判断记忆卡是否插入 */    if (Environment.........
    ▪ wakelock的应用        wakelock的使用 PowerManager.WakerLock是我分析Standup Timer源代码时发现的一个小知识点,Standup Timer 用WakeLock保证程序运行时保持手机屏幕的恒亮(程序虽小但也做得相当的细心,考虑的很周到)。.........
    ▪ mobile 开发之将来展望       mobile 开发之未来展望 6月份接手一个新的项目,该项目之前是有其他同事尝试做了一些前期的探索,雏形也有小成。之前是由web做了一个服务器段,然后由各mobile平台通过浏览器访问,当.........

[1]获取手机外部存储卡的剩下空间
    来源: 互联网  发布时间: 2014-02-18
获取手机外部存储卡的剩余空间

private void showSize()
  {
    /* 将TextView及ProgressBar设定为空值及0 */
    myTextView.setText(""); myProgressBar.setProgress(0);
    /* 判断记忆卡是否插入 */
    if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
    {
      /* 取得SD CARD档案路径一般是/sdcard */
      File path = Environment.getExternalStorageDirectory();
      /* StatFs看文件系统空间使用状况 */
      StatFs statFs = new StatFs(path.getPath());
      /* Block的size */
      long blockSize = statFs.getBlockSize();
      /* 总Block数量 */
      long totalBlocks = statFs.getBlockCount();
      /* 已使用的Block数量 */
      long availableBlocks = statFs.getAvailableBlocks();
      String[] total = fileSize(totalBlocks * blockSize);
      String[] available = fileSize(availableBlocks * blockSize);
      /* getMax取得在main.xml里ProgressBar设定的最大值 */
      int ss = Integer.parseInt(available[0]) * myProgressBar.getMax() / Integer.parseInt(total[0]);
      myProgressBar.setProgress(ss);
      String text = "总共" + total[0] + total[1] + "\n"; text += "可用" + available[0] + available[1];
      myTextView.setText(text); }
    else if (Environment.getExternalStorageState().equals( Environment.MEDIA_REMOVED))
    {
      String text = "SD CARD已移除"; myTextView.setText(text);
      }
    }
  /* 回传为字符串数组[0]为大小[1]为单位KB或MB */
  private String[] fileSize(long size)
  {
    String str = "";
    if (size >= 1024)
    {
      str = "KB";
      size /= 1024;
      if (size >= 1024)
      {
        str = "MB";
        size /= 1024;
        }
      }
    DecimalFormat formatter = new DecimalFormat();
    /* 每3个数字用,分隔如:1,000 */
    formatter.setGroupingSize(3);
    String result[] = new String[2];
    result[0] = formatter.format(size);
    result[1] = str; return result;
    }


    
[2] wakelock的应用
    来源: 互联网  发布时间: 2014-02-18
wakelock的使用

PowerManager.WakerLock是我分析Standup Timer源代码时发现的一个小知识点,Standup Timer 用WakeLock保证程序运行时保持手机屏幕的恒亮(程序虽小但也做得相当的细心,考虑的很周到)。PowerManager 和PowerManager.WakerLock7用于对Android设备的电源进行管理。
  PowerManager:This class gives you control of the power state of the device.
  PowerManager.WakeLock: lets you say that you need to have the device on.
  Android中通过各种Lock锁对电源进行控制,需要注意的是加锁和解锁必须成对出现。先上一段Standup Timer里的代码然后进行说明。
代码

private void acquireWakeLock() {
if (wakeLock == null) {
Logger.d("Acquiring wake lock");
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK,this.getClass().getCanonicalName());
wakeLock.acquire();
}

}


private void releaseWakeLock() {
if (wakeLock != null && wakeLock.isHeld()) {
wakeLock.release();
wakeLock = null;
}

}

 

acquireWakeLock()方法中获取了 SCREEN_DIM_WAKE_LOCK锁,该锁使 CPU 保持运转,屏幕保持亮度(可以变灰)。这个函数在Activity的 onResume中被调用。releaseWakeLock()方法则是释放该锁。它在Activity的 onPause中被调用。利用Activiy的生命周期,巧妙的让 acquire()和release()成对出现。

@Override
protected void onResume()
{
super.onResume();
//获取锁,保持屏幕亮度
acquireWakeLock();
startTimer();
}
代码

 

PowerManager和WakeLock的操作步骤
  •   PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);通过 Context.getSystemService().方法获取PowerManager实例。
  •   然后通过PowerManager的newWakeLock((int flags, String tag)来生成WakeLock实例。int Flags指示要获取哪种WakeLock,不同的Lock对cpu 、屏幕、键盘灯有不同影响。
  •   获取WakeLock实例后通过acquire()获取相应的锁,然后进行其他业务逻辑的操作,最后使用release()释放(释放是必须的)。
  • 关于int flags
      各种锁的类型对CPU 、屏幕、键盘的影响:

    PARTIAL_WAKE_LOCK:保持CPU 运转,屏幕和键盘灯有可能是关闭的。

    SCREEN_DIM_WAKE_LOCK:保持CPU 运转,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯

    SCREEN_BRIGHT_WAKE_LOCK:保持CPU 运转,允许保持屏幕高亮显示,允许关闭键盘灯

    FULL_WAKE_LOCK:保持CPU 运转,保持屏幕高亮显示,键盘灯也保持亮度

    ACQUIRE_CAUSES_WAKEUP:Normal wake locks don't actually turn on the illumination. Instead, they cause the illumination to remain on once it turns on (e.g. from user activity). This flag will force the screen and/or keyboard to turn on immediately, when the WakeLock is acquired. A typical use would be for notifications which are important for the user to see immediately.

    ON_AFTER_RELEASE:f this flag is set, the user activity timer will be reset when the WakeLock is released, causing the illumination to remain on a bit longer. This can be used to reduce flicker if you are cycling between wake lock conditions.

    权限获取
    要进行电源的操作需要在AndroidManifest.xml中声明该应用有设置电源管理的权限。
    
    
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    你可能还需要
    <uses-permission android:name="android.permission.DEVICE_POWER" />
    另外WakeLock的设置是 Activiy 级别的,不是针对整个Application应用的。

    *如果你获得一个不完整的wakelock,则CPU会继续运行,不必顾及任何计时器甚至用户按下power键后。对于所有的其他的wakelock,CPU在运行,但用户可以直接用power键使设备休眠。

    *If you hold a partial wakelock, the CPU will continue to run, irrespective of any timers and even after the user presses the power button. In all other wakelocks, the CPU will run, but the user can still put the device to sleep using the power button.

     

    另外,你能加两个以上的标志,这些仅能影响屏幕的行为。这些标志当组合中有一个PARTIAL_WAKE_LOCK时将没有效果。

    In addition, you can add two more flags, which affect behavior of the screen only. These flags have no effect when combined with a PARTIAL_WAKE_LOCK.

    Flag Value

    Description

    ACQUIRE_CAUSES_WAKEUP

     

    正常的wake lock不会实际转到照明。反而,他们使照明保持自他打开时(例如,来自用户activity)。这个标志会强制屏幕和/或键盘立即打开,当这个wakelock已获取时。一个典型用法是将哪些重要的通知立即让用户看到。

    Normal wake locks don't actually turn on the illumination. Instead, they cause the illumination to remain on once it turns on (e.g. from user activity). This flag will force the screen and/or keyboard to turn on immediately, when the WakeLock is acquired. A typical use would be for notifications which are important for the user to see immediately.

    ON_AFTER_RELEASE

     

    如果这个标志被设置,用户activity计时器当WakeLock被释放时会重新设定,因为照明保持一点长。这个可以用于降低闪烁如果你是在wake lock状态下循环。

    If this flag is set, the user activity timer will be reset when the WakeLock is released, causing the illumination to remain on a bit longer. This can be used to reduce flicker if you are cycling between wake lock conditions.

    Summary

    Nested Classes

    class

    PowerManager.WakeLock

    类让你说你需要有这个设备。

    Class lets you say that you need to have the device on. 

     

    Constants

    int

    ACQUIRE_CAUSES_WAKEUP

    正常的wake lock不会实际的唤醒设备,他们自他准备好则保持着。

    Normally wake locks don't actually wake the device, they just cause it to remain on once it's already on.

     

    int

    FULL_WAKE_LOCK

    Wake lock 以确保屏幕和键盘全部点亮。

    Wake lock that ensures that the screen and keyboard are on at full brightness.

     

    int

    ON_AFTER_RELEASE

    当这个wake lock已释放时,拨开了用户界面的计时器所以屏幕停留稍微长。

    When this wake lock is released, poke the user activity timer so the screen stays on for a little longer.

     

    int

    PARTIAL_WAKE_LOCK

    Wake lock以确保CPU运行。

    Wake lock that ensures that the CPU is running.

     

    int

    SCREEN_BRIGHT_WAKE_LOCK

    Wake lock以确保屏幕全亮;键盘背光允许关闭。

    Wake lock that ensures that the screen is on at full brightness; the keyboard backlight will be allowed to go off.

     

    int

    SCREEN_DIM_WAKE_LOCK

    Wake lock以确保屏幕打开(但可以是暗淡的);键盘背光将允许关闭。

    Wake lock that ensures that the screen is on (but may be dimmed); the keyboard backlight will be allowed to go off.

     

    Public Methods

    void

    goToSleep(long time)

    强制设备进入休眠。

    Force the device to go to sleep.

     

    boolean

    IsScreenOn()

    返回屏幕是否当前亮着。

    Returns whether the screen is currently on.

     

    PowerManager.WakeLock

    newWakeLock(int flags, String tag)

    得到一个Wake lock在这个标志参数的级别。

    Get a wake lock at the level of the flags parameter.

     

    void

    reboot(String reason)

    重启设备

    Reboot the device.

     

    void

    userActivity(long when, boolean noChangeLights)

    用户界面发生。

    User activity happened.


        
    [3] mobile 开发之将来展望
        来源: 互联网  发布时间: 2014-02-18
    mobile 开发之未来展望
    6月份接手一个新的项目,该项目之前是有其他同事尝试做了一些前期的探索,雏形也有小成。
    之前是由web做了一个服务器段,然后由各mobile平台通过浏览器访问,当然web端都是基于mobile的UI做的展示,雏形已成。由于用户体验以及人员的调整该项目由我接手继续的研发工作。

    我个人比较善于native的开发,同时领导也希望我能够开发出native的版本,由于各种安全机制我们是不能在外网建设web服务器的。唯一外部可访问的是我们刚刚购买的salesforce云计算的平台。所以我要做的是要求native app数据访问sfdc。很顺利我已经完成了native 的原型版本。于此同时也展开的了一些思考。

    html5 for mobile
    不太懂技术的大老板总是会问,你现在做出来的版本可以支持其他平台嘛?以及自适应分辨率的问题。同时部门也有项目组在进行html5相关的尝试,传统企业往往不愿做新的尝试总是喜欢按部就班的做手头上的工作。但是这次不一样了,老大愿意投入较少的资源去尝试新兴的技术。

    最近一段时间一直传言app store 审核周期长达3个月,并且有app无故下架的事件层出不穷。同样的事情也在我朋友的公司中出现了,并非空穴来风。
    一些较有实力的互联网公司为了不依赖于app store,自行开发了网页版的程序,移动端只要通过浏览器访问就可以。于此同时近期Facebook CEO 扎克伯格在TC Disrupt大会上公开表示,押注HTML5是个巨大的错误,还提出了要以长远的眼光看待html5.也就是说他较早的投入于html5研发力量,忽略了用户体验等其他细节。
    我同意html5目前是不可能替代的native的开发的,也相信html5在未来的不断发展中会有较大的发展,mobile 开发的未来的趋势就是html5.

    2012-9-17

        
    最新技术文章:
    ▪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双击返回键退出程序的实现方法 iis7站长之家
    ▪Android提高之MediaPlayer播放网络音频的实现方法...
    ▪Android提高之MediaPlayer播放网络视频的实现方法...
    ▪Android提高之手游转电视游戏的模拟操控
     


    站内导航:


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

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

    浙ICP备11055608号-3