安卓相机(手电筒)API太慢

5
我正在制作一个手电筒应用程序,并使用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;
}

}

1
你正在测试哪个设备?其他相机应用程序也会出现延迟吗? - Saket
我正在GALAXY S4上进行测试,我下载了另一个应用程序,手电筒非常快,没有延迟。 - Bryan Guamba
2个回答

2
可能4秒延迟是硬件/操作系统相关的,不在您的控制范围内,这并不意味着不能修复,但我无法找到任何相关信息(某些Android专家可能在这里有更好的想法)。</p><p>灯光不关闭可能是因为需要添加cam.release();,如此答案所述。</p><p>至于频闪灯光,我在此教程中找到了几乎与您要寻找的完全相同的内容。</p>

1
我已经四处寻找,但无法找到与相机启动缓慢有关的任何信息。尽管如此,我希望我的答案能够帮助您解决其他问题。 - NitrogenReaction

0

对我来说,只需删除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);
}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接