本文共 3286 字,大约阅读时间需要 10 分钟。
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(); ListflashModes = 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(); }}
转载地址:http://dfaea.baihongyu.com/