Android 相机(手电筒)API 太慢

Posted

技术标签:

【中文标题】Android 相机(手电筒)API 太慢【英文标题】:Android Camera (Flashlight) API too slow 【发布时间】:2015-10-23 20:23:29 【问题描述】:

我制作了一个 Flashlight 应用,我使用 Fragments。 当我按下按钮时,灯笼灯延迟了4秒多,我不知道发生了什么。 另外,当我再次按下开关按钮时,手电筒没有关闭 有什么想法吗?

我还想用另一个按钮制作一个频闪灯。

我在互联网上搜索,但我没有找到其他选项来制作此功能,只有这个。

这是我的代码

import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Switch;

public class HerramientasFragment extends Fragment 

  private Camera cam;
  private Switch linterna;

  public HerramientasFragment() 
      // Required empty public constructor
  

  @Override
  public void onCreate(Bundle savedInstanceState) 
      cam = Camera.open();
      super.onCreate(savedInstanceState);
  

  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) 
    // Inflate the layout for this fragment
      View masterView =  inflater.inflate(R.layout.fragment_herramientas, container, false);
      linterna = (Switch) masterView.findViewById(R.id.switch_linterna);
      linterna.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 
            Switch liternaSwitch = (Switch) v;

            Parameters p;

            if (liternaSwitch.isChecked()) 
                p = cam.getParameters();
                p.setFlashMode(Parameters.FLASH_MODE_TORCH);
                cam.setParameters(p);
                cam.startPreview();
             else 
                p = cam.getParameters();
                p.setFlashMode(Parameters.FLASH_MODE_OFF);
                cam.setParameters(p);
                cam.stopPreview();
            

        
    );

    return masterView;



【问题讨论】:

你在什么设备上测试?其他相机应用也会出现延迟吗? 我在GALAXY S4中测试,我下载了另一个应用,手电非常快不延迟 【参考方案1】:

这 4 秒的延迟可能与硬件/操作系统有关,并且您无法控制。这并不是说它无法修复,但我找不到任何相关的东西(一些 Android 专家可能在这里有更好的主意)。

灯不熄灭可能是因为你需要添加cam.release();,如this answer中提到的。

关于频闪灯,我找到了this tutorial。它似乎几乎正是您正在寻找的。​​p>

【讨论】:

我已经四处寻找了很多,但我一直无法找到与相机启动缓慢有关的任何内容。我希望我的回答对您的其他问题有所帮助。【参考方案2】:

只需删除行 cam.startPreview() 对我有用。

public void flashLightOn()
     p = cam.getParameters();
     p.setFlashMode(Parameters.FLASH_MODE_TORCH);
     cam.setParameters(p);


public void flashLightOff()
     p = cam.getParameters();
     p.setFlashMode(Parameters.FLASH_MODE_OFF);
     cam.setParameters(p);


【讨论】:

以上是关于Android 相机(手电筒)API 太慢的主要内容,如果未能解决你的问题,请参考以下文章

如何在相机预览开启时(以编程方式)保持手电筒开启

如何在不破坏相机应用程序的情况下在Android手机上打开手电筒[重复]

使用相机时如何打开/关闭手电筒?

使用相机闪光灯作为手电筒的应用程序使用 Eclipse 不工作

如何使用qt打开相机闪光灯或手电筒?

无法连接到手电筒小部件中的相机服务