《Android应用开发攻略》——2.9 简单的手电筒应用程序

2.9 简单的手电筒应用程序

Saketkumar Srivastav
2.9.1 问题
你希望在断电或者其他没有光线的条件下,将智能手机作为手电筒使用。
2.9.2 解决方案
开启智能手机或者Android设备上的相机LED闪光灯,并且保持长亮,以充当手电筒。在术语方面有些纠结,英国将手电筒称作“torch”,而北美称为“flashlight”(这反映在代码中使用的Parameter常量中的名称),尽管手电筒通常不会闪烁(flash),但是相机闪光灯会闪烁,因此,用相机的闪光灯作为手电筒非常好!
2.9.3 讨论
以下是应用开发之前的设计步骤:
1 . 访问手机的Camera对象。
2 . 访问Camera对象的参数。
3 . 获得相机支持的闪光灯模式。
4 . 在ON状态下将闪光灯参数设置为FLASH_MODE_TORCH,在OFF状态下设置为FLASH_OFF。
例2-11中的代码实现了应用程序必需的逻辑。
例2-11:将Android设备转化为手电筒

if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)) {
            mTorch = (ToggleButton) findViewById(R.id.toggleButton1);
            mTorch.setOnCheckedChangeListener(new OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView,
                    boolean isChecked) {
                    try{
                        if(cam != null){
                            cam = Camera.open();
                        }
                        camParams = cam.getParameters();
                        List<String> flashModes = camParams.getSupportedFlashModes();
                        if(isChecked){
                            if (flashModes.contains(Parameters.FLASH_MODE_TORCH)) {
                                camParams.setFlashMode(Parameters.FLASH_MODE_TORCH);
                            }else{
                                showDialog(MainActivity.this, FLASH_TORCH_NOT_SUPPORTED);
                            }
                        }else{
                            camParams.setFlashMode(Parameters.FLASH_MODE_OFF);
                        }
                        cam.setParameters(camParams);
                        cam.startPreview();
                    }catch (Exception e) {
                        e.printStackTrace();
                        cam.stopPreview();
                        cam.release();
                   }
              }
          });
      }else{
          showDialog(MainActivity.this, FLASH_NOT_SUPPORTED);
      }

例2-12中实现的基本逻辑如下:
1 . 检查设备中闪光灯是否存在。
2 . 获得Camera对象,并且打开以供访问。
3 . 获得捕捉到的Camera对象的参数。
4 . 用getSupportedFlashModes()检查当前Camera对象所支持的闪光灯模式。
5 . 如果切换状态为ON,将相机闪光灯模式设置为FLASH_MODE_TORCH;否则,设置为FLASH_MODE_OFF。
例2-12:手电筒错误处理

public void showDialog (Context context, int dialogId){
        switch(dialogId){
        case FLASH_NOT_SUPPORTED:
            builder = new AlertDialog.Builder(context);
            builder.setMessage("Sorry, Your phone does not support Torch Mode")
            .setCancelable(false)
            .setNeutralButton("Close", new OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    finish();
                }
            });
            alertDialog = builder.create();
            alertDialog.show();
            break;
        case FLASH_TORCH_NOT_SUPPORTED:
            builder = new AlertDialog.Builder(context);
            builder.setMessage("Sorry, Your camera flash does not support torch feature")
           .setCancelable(false)
           .setNeutralButton("Close", new OnClickListener() {
               @Override
               public void onClick(DialogInterface dialog, int which) {
                   finish();
               }
           });
           alertDialog = builder.create();
           alertDialog.show();
       }
}
时间: 2024-10-30 17:00:42

《Android应用开发攻略》——2.9 简单的手电筒应用程序的相关文章

《Android应用开发攻略》——导读

前言 对于蜂窝技术和移动计算来说,Android是"开放源码的革命",至少是革命的一部分.从已经不存在的Openmoko FreeRunner到QT Embedded.Moblin. LiMo. Debian Mobile,以及Maemo和最近刚刚开放源码的Symbian OS.刚刚消失的HP WebOS,人们对于提供开放源码的蜂窝技术已经做出了许多的尝试.我们也不要忘记闭源系统的忠实拥趸:BlackBerry OS.Apple iPhone和Microsoft Windows Mob

《Android应用开发攻略》——1.15 程序:Android OS下的小费计算器Tipster

1.15 程序:Android OS下的小费计算器Tipster Sunit Katkar1.15.1 问题 当你和朋友前往饭店就餐并且希望计算各自的账单和小费时,可能陷入许多手动计算和分歧之中.你希望使用一个应用程序,简单地将小费比例加到总额上,并且按照就餐人数分配.Tipster就是Android中的一个实现,用它展示一个完整的应用程序.1.15.2 解决方案 这是一个简单的练习,使用Android中的基本GUI元素,然后用一些简单的计算和事件驱动UI代码将它们组合起来.将用到如下GUI组件

《Android应用开发攻略》——第2章 设计成功的应用程序 2.1 导言:设计成功的Android应用程序

第2章 设计成功的应用程序 2.1 导言:设计成功的Android应用程序 Colin Wilcox 讨论 本章介绍编写富于想象力而且实用的Android应用的设计指导思想.有几个攻略描述了成功设计的具体特征.本节将列出其他一些方面. 这一章的目的之一是解释相对于其他在移动设备上交付丰富内容的方法,原生Java Android应用程序开发的好处. 原生手机应用程序的要求 不管在何种平台上部署,成功交付任何手机应用程序都有许多关键的要求: 应用程序应该易于在设备上安装.删除和更新. 应该以引人入胜

《Android应用开发攻略》——1.12 保持Android SDK更新

1.12 保持Android SDK更新 Daniel Fowler1.12.1 问题 SDK必须保持更新,使应用开发人员能够使用不断发展的Android平台上的最新API.1.12.2 解决方案 使用Android SDK Manager程序更新已安装的SDK包和安装新SDK包,包括用于设备特殊功能的第三方程序包.1.12.3 讨论 Android操作系统不断发展,因此,Android SDK也随之发展.Android持续发展的驱动力是: Google的研究和开发 手机制造商开发新的改进型手机

《Android应用开发攻略》——1.3 从命令行创建 “Hello, World”应用程序

1.3 从命令行创建 "Hello, World"应用程序 Ian Darwin1.3.1 问题 你想在不使用Eclipse ADT插件的情况下创建新的Android项目.1.3.2 解决方案 使用Android开发工具包(Android Development Kit,ADK)中的android工具,利用creat project参数和一些附加参数配置你的项目.1.3.3 讨论 除了平台名称之外,android还是一个用于创建.更新和管理项目的命令行工具的名称.可以进入android

《Android应用开发攻略》——1.4 在Eclipse中创建“Hello, World”应用程序

1.4 在Eclipse中创建"Hello, World"应用程序 Ian Darwin1.4.1 问题 你打算用Eclipse开发Android应用程序.1.4.2 解决方案 安装Eclipse.Android SDK和ADT plug-in.创建项目并开始编写应用程序.从Eclipse中构建项目并在模拟器下测试.1.4.3 讨论 安装如下软件之后,就可以开始开发了: Eclipse IDE Android SDK ADT plug-in 安装上述三个软件的详细讲解请参见攻略1.5.

《Android应用开发攻略》——3.13 发送文本消息以及AVD之间的通话

3.13 发送文本消息以及AVD之间的通话 Johan Pelgrim3.13.1 问题 你开发了一个应用程序,需要拨打或者接听电话,或者收发文本消息,你希望对该程序进行测试.3.13.2 解决方案 启动两个Android虚拟设备(AVD),使用端口号发送文本消息及拨打电话.3.13.3 讨论 当你创建一个接听来电或者文本消息的应用程序(类似于攻略12.2中开发的应用)时,你当然可以使用Eclipse中的DDMS视图模拟通话或者发送文本消息,不过也可以启动另一个AVD! 如果你注意AVD窗口标题

《Android应用开发攻略》——2.4 在用户旋转设备时保存数据

2.4 在用户旋转设备时保存数据 Ian Darwin2.4.1 问题 当用户旋转设备时,Android通常销毁并重新创建当前活动.你希望在这一周期中保留某些数据,但是在此期间活动中的所有字段都将丢失.2.4.2 解决方案 对此有多种解决方案.如果所有数据都由简单类型组成(包括String),或者是Serializable类型,就可以在传入的Bundle的onSaveInstanceState()中保存数据. 另一种解决方案是在活动中返回一个任意的对象,实现onRetainNonConfigur

《Android应用开发攻略》——3.8 用BugSense自动从用户那里得到缺陷报告

3.8 用BugSense自动从用户那里得到缺陷报告 Ian Darwin3.8.1 问题 每当你的应用程序崩溃的时候,用户并不一定都会通知你,即便通知,也往往忽略了重要的细节.你希望有一个服务能够捕捉所有异常,并且提供详细的报告.3.8.2 解决方案 注册BugSense(免费或者Premium版本),在应用程序中添加一个JAR文件和一个调用.然后坐等通知,或者查看Web仪表板上的错误列表和详情页面.3.8.3 讨论 BugSense服务没有什么魔法,它所提供的也不是你自己做不到的事情.但是已