我制作了一个简单的FlashLight应用程序。它运行得很好,但是有个bug。当我在启动应用程序后第一次按下按钮时,它不会启动手电筒。当我第二次按下按钮时,它就会启动手电筒。
帮我解决这个问题。谢谢!
问题: FlashLight不是从第一次按下按钮开始。
private Camera camera;
private ImageButton flashlightButton;
private TextView Status;
private static final int CAMERA_REQUEST = 123;
boolean hasCameraFlash = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.CAMERA},CAMERA_REQUEST);
Status = findViewById(R.id.Status);
flashlightButton = findViewById(R.id.flashlight_button);
flashlightButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (hasCameraFlash){
if (Status.getText().toString().contains("ON")){
Status.setText("OFF");
flashlightOff();
} else {
Status.setText("ON");
flashlightOn();
}
}else{
Toast.makeText(MainActivity.this, "No Flash Available on your device",Toast.LENGTH_SHORT).show();
}
}
});
}
private void flashlightOn(){
CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
try {
String cameraId = cameraManager.getCameraIdList()[0];
cameraManager.setTorchMode(cameraId,true);
flashlightButton.setImageResource(R.drawable.flashlight_on);
} catch (CameraAccessException e) {
}
}
private void flashlightOff(){
CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
try {
String camerid = cameraManager.getCameraIdList()[0];
cameraManager.setTorchMode(camerid,false);
flashlightButton.setImageResource(R.drawable.flashlight_off);
} catch (CameraAccessException e){
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode){
case CAMERA_REQUEST:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
hasCameraFlash = getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
}else{
Toast.makeText(MainActivity.this, "Permission Denied for the Camera", Toast.LENGTH_SHORT).show();
}
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (camera != null) {
camera.stopPreview();
camera.setPreviewCallback(null);
camera.release();
camera = null;
}
}
}发布于 2018-12-01 09:59:18
使用许可
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-feature
android:name="android.hardware.camera.flash"
android:required="false" />
<uses-feature
android:name="android.hardware.camera"
android:required="false" />代码:
Parameters p = mCamera.getParameters();
Camera mCamera = Camera.open();
p = mCamera.getParameters();
p.setFlashMode(Parameters.FLASH_MODE_ON);
mPreview = new CameraPreview(mContext, mCamera);
mCamera.startPreview();发布于 2018-12-01 13:31:39
你的密码里没有发现错误。可能在XML布局文件中,按钮有一个属性,如下所示:
android:onClick="onClick" //delete if such line exists另一个可能性是按钮有一个属性,如下所示:
android:focusableInTouchMode="true" //delete if such line existshttps://stackoverflow.com/questions/53568801
复制相似问题