android 相机闪光灯不工作
Camera flash is not working in android
我正在尝试制作一个简单的应用程序,单击按钮将打开相机闪光灯,再单击一次它将关闭,以便我们可以将其用作手电筒。但是闪光灯没有打开。下面是我的 flashfragment
public class FlashFragment extends Fragment {
private boolean isLighOn = false;
private Camera camera;
private Button button;
public FlashFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_flash, container, false);
button = (Button) rootView.findViewById(R.id.buttonFlashlight);
Context context = getActivity();
PackageManager pm = context.getPackageManager();
// if device support camera?
if (!pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
Log.e("err", "Device has no camera!");
}
try{
camera = Camera.open();
final Camera.Parameters p = camera.getParameters();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
if (isLighOn) {
Log.i("info", "torch is turn off!");
p.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
camera.stopPreview();
isLighOn = false;
} else {
Log.i("info", "torch is turn on!");
p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
camera.startPreview();
isLighOn = true;
}
}
});
}catch(Exception e){
e.printStackTrace();
}
// Inflate the layout for this fragment
return rootView;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
}
@Override
public void onDetach() {
super.onDetach();
}
}
几年前,我遇到了很多关于相机和手电筒的问题。
有些设备比其他设备更陌生。
确保检查是否存在闪光灯
hasFlash = context.getPackageManager().hasSystemFeature(
PackageManager.FEATURE_CAMERA_FLASH);
然后我发现,有些相机需要 surfaceTexture 来启用闪光灯(即使它只是一个虚拟的):
SurfaceTexture dummy = new SurfaceTexture(0);
mCamera.setPreviewTexture(dummy);
为了启用我使用了这个方法:
public void enable() {
if (!isReady) {
return;
}
try {
mCamera.reconnect();
mParameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
mCamera.setParameters(mParameters);
mCamera.startPreview();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
我不确定是否需要 reconnect()。但我很确定,startPreview() 是必需的。
最后我有了一些接受
的设备
Parameters.FLASH_MODE_ON
而不是 FLASH_MODE_TORCH。奇怪,因为 Docs 对那个模式说了一些不同的东西,但这是我过去经历过的(也许这个信息甚至已经过时了)。
别忘了释放相机。
希望这有助于最大限度地减少闪光灯的问题。
您刚刚错过了为相机设置参数的行
camera.setParameters(p);
因此,您的 onClickListener 代码应如下所示
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
if (isLighOn) {
Log.i("info", "torch is turn off!");
p.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
camera.setParameters(p);
camera.stopPreview();
isLighOn = false;
} else {
Log.i("info", "torch is turn on!");
p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
camera.setParameters(p);
camera.startPreview();
isLighOn = true;
}
}
});
这应该可以解决您的问题。它总是适用于我的情况。
我正在尝试制作一个简单的应用程序,单击按钮将打开相机闪光灯,再单击一次它将关闭,以便我们可以将其用作手电筒。但是闪光灯没有打开。下面是我的 flashfragment
public class FlashFragment extends Fragment {
private boolean isLighOn = false;
private Camera camera;
private Button button;
public FlashFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_flash, container, false);
button = (Button) rootView.findViewById(R.id.buttonFlashlight);
Context context = getActivity();
PackageManager pm = context.getPackageManager();
// if device support camera?
if (!pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
Log.e("err", "Device has no camera!");
}
try{
camera = Camera.open();
final Camera.Parameters p = camera.getParameters();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
if (isLighOn) {
Log.i("info", "torch is turn off!");
p.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
camera.stopPreview();
isLighOn = false;
} else {
Log.i("info", "torch is turn on!");
p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
camera.startPreview();
isLighOn = true;
}
}
});
}catch(Exception e){
e.printStackTrace();
}
// Inflate the layout for this fragment
return rootView;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
}
@Override
public void onDetach() {
super.onDetach();
}
}
几年前,我遇到了很多关于相机和手电筒的问题。
有些设备比其他设备更陌生。
确保检查是否存在闪光灯
hasFlash = context.getPackageManager().hasSystemFeature(
PackageManager.FEATURE_CAMERA_FLASH);
然后我发现,有些相机需要 surfaceTexture 来启用闪光灯(即使它只是一个虚拟的):
SurfaceTexture dummy = new SurfaceTexture(0);
mCamera.setPreviewTexture(dummy);
为了启用我使用了这个方法:
public void enable() {
if (!isReady) {
return;
}
try {
mCamera.reconnect();
mParameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
mCamera.setParameters(mParameters);
mCamera.startPreview();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
我不确定是否需要 reconnect()。但我很确定,startPreview() 是必需的。
最后我有了一些接受
的设备Parameters.FLASH_MODE_ON
而不是 FLASH_MODE_TORCH。奇怪,因为 Docs 对那个模式说了一些不同的东西,但这是我过去经历过的(也许这个信息甚至已经过时了)。
别忘了释放相机。
希望这有助于最大限度地减少闪光灯的问题。
您刚刚错过了为相机设置参数的行
camera.setParameters(p);
因此,您的 onClickListener 代码应如下所示
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
if (isLighOn) {
Log.i("info", "torch is turn off!");
p.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
camera.setParameters(p);
camera.stopPreview();
isLighOn = false;
} else {
Log.i("info", "torch is turn on!");
p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
camera.setParameters(p);
camera.startPreview();
isLighOn = true;
}
}
});
这应该可以解决您的问题。它总是适用于我的情况。