Привет, ребята, я пытаюсь изучить Android самостоятельно, но застрял в проблеме. На странице есть четыре кнопки, и если я нажму одну кнопку, другие кнопки не будут работать. Это код для фонарика, Я пытаюсь заставить его мигать в течение требуемого времени. Он мигает должным образом, но если я нажму кнопку, другая кнопка не будет работать. Если кто-нибудь предложит мне предложение по этой проблеме. Вот код:Button не работает
MainActivity.java
Camera camera;
boolean isFlashOn;
boolean hasFlash;
Parameters params;
Button flashOn, flashOff, button1, button2, button3, button4;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
checkFlashlight();
getCamera();
initFlashlightButton();
}
void checkFlashlight() {
hasFlash = getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
if (!hasFlash) {
AlertDialog alert = new AlertDialog.Builder(
MainActivity.this).create();
alert.setTitle("Error");
alert.setMessage("Sorry, your device doesn't support flash light!");
alert.setButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
alert.show();
return;
}
}
private void blink(int time) {
do {
turnOnFlash();
try {
sleep(time);
} catch (InterruptedException e) {
e.printStackTrace();
}
turnOffFlash();
try {
sleep(time);
} catch (InterruptedException e) {
e.printStackTrace();
}
blink(time);
} while (time <= 10);
}
private void initFlashlightButton() {
flashOn = (Button) findViewById(R.id.buttonOn);
flashOff = (Button) findViewById(R.id.buttonOff);
button1 = (Button) findViewById(R.id.button1);
button2 = (Button) findViewById(R.id.button2);
button3 = (Button) findViewById(R.id.button3);
button4 = (Button) findViewById(R.id.button4);
flashOn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
turnOnFlash();
}
});
flashOff.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
turnOffFlash();
}
});
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
turnOnFlash();
blink(1000);
}
});
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
turnOnFlash();
blink(500);
}
});
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
turnOnFlash();
blink(300);
}
});
button4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isFlashOn) {
turnOffFlash();
} else {
turnOnFlash();
}
blink(100);
}
});
}
private void getCamera() {
if (camera == null) {
try {
camera = Camera.open();
params = camera.getParameters();
} catch (RuntimeException e) {
Log.e("Camera Error. Failed to Open. Error: ", e.getMessage());
}
}
}
private void turnOnFlash() {
if (!isFlashOn) {
if (camera == null || params == null) return;
params = camera.getParameters();
params.setFlashMode(Parameters.FLASH_MODE_TORCH);
camera.setParameters(params);
camera.startPreview();
isFlashOn = true;
return;
}
}
// flash OFF
private void turnOffFlash() {
if (isFlashOn) {
if (camera == null || params == null) return;
params = camera.getParameters();
params.setFlashMode(Parameters.FLASH_MODE_OFF);
camera.setParameters(params);
camera.stopPreview();
isFlashOn = false;
return;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
}
@Override
protected void onPause() {
super.onPause();
turnOffFlash();
}
@Override
protected void onRestart() {
super.onRestart();
}
@Override
protected void onResume() {
super.onResume();
if (hasFlash)
turnOnFlash();
}
@Override
protected void onStart() {
super.onStart();
getCamera();
}
@Override
protected void onStop() {
super.onStop();
if (camera != null) {
camera.release();
camera = null;
}
}
activity_main.xml:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="On"
android:id="@+id/buttonOn"
android:layout_marginLeft="62dp"
android:layout_marginStart="62dp"
android:layout_marginTop="100dp"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Off"
android:id="@+id/buttonOff"
android:layout_marginLeft="30dp"
android:layout_marginStart="30dp"
android:layout_alignTop="@+id/buttonOn"
android:layout_toRightOf="@+id/buttonOn"
android:layout_toEndOf="@+id/buttonOn" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2 Seconds"
android:id="@+id/button1"
android:layout_marginTop="164dp"
android:layout_below="@+id/buttonOn"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="4 seconds"
android:id="@+id/button2"
android:layout_alignTop="@+id/button1"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="8 seconds"
android:id="@+id/button3"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginBottom="60dp" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="16 Seconds"
android:id="@+id/button4"
android:layout_alignBottom="@+id/button3"
android:layout_alignLeft="@+id/buttonOff"
android:layout_alignStart="@+id/buttonOff"
android:layout_alignRight="@+id/button2"
android:layout_alignEnd="@+id/button2" />
Сделать отдельный метод, который содержит щелчок слушатель всех ваших кнопок. Не добавляйте код инициализации для просмотра слушателя. – GrIsHu
Вы нажимаете кнопки один за другим, не выключая вспышку? Тогда это не сработает, потому что ваша функция 'turnOnFlash' работает только тогда, когда вспышка выключена. –
@Alexander_Winter: Если я нажму кнопку ON, он включится, если я нажму «OFF», он выключится, но если я нажму другую кнопку, скажу 2 секунды, он будет нормально мигать, но остальные кнопки не будут работать. –