gpt4 book ai didi

java - 我的 Android 应用程序在 Activity 生命周期方面无法正常工作

转载 作者:太空宇宙 更新时间:2023-11-04 10:54:11 26 4
gpt4 key购买 nike

我正在制作手电筒应用程序来处理 Activity 生命周期。应用程序运行良好,但当我调用 onStop(); 时出现问题当手电筒打开时,当我从 onStop(); 返回时,应用程序应该打开手电筒,但它没有。我已经尝试了所有方法,但 flashOn();未启用手电筒。我通过调试检查发现,如果从 onStop() 返回后手电筒打开,应用程序不会执行任何操作;

public class MainActivity extends AppCompatActivity {

private ImageButton imagebtn;
ImageView img;

private Camera camera;
private boolean isFlashOn;
private boolean hasFlash = false;
private Camera.Parameters params;

private boolean flag= false;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


imagebtn = (ImageButton) findViewById(R.id.button);
img = findViewById(R.id.torchimage);

isFlashOn = false;
hasFlash = getApplicationContext().getPackageManager()
.hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);

if (!hasFlash) {
// If device doesn't support flash
// Show alert message and close the application
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();//Close application
}
});
alert.show();
}


imagebtn.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
if (isFlashOn) {

flashOff();
} else {

flashOn();
}
}
});
}


protected void checkCamera() {
if (camera == null) {
try {
camera = Camera.open();
params = camera.getParameters();
} catch (RuntimeException e) {
Toast.makeText(getApplicationContext(), "Camera not found", Toast.LENGTH_SHORT).show();
}
}
}


**protected void flashOn() {
if (!isFlashOn) {


{
if (camera == null || params == null) {
return;
}

/*if (flag==true) {
flag=false;
params = camera.getParameters();
params.setFlashMode(Parameters.FLASH_MODE_TORCH);
camera.setParameters(params);
camera.startPreview();
*/}

params = camera.getParameters();
params.setFlashMode(Parameters.FLASH_MODE_TORCH);
camera.setParameters(params);
camera.startPreview();
isFlashOn = true;
toggleImages();
btnSound();
}
}**

protected void flashOff() {
if (isFlashOn)
{
if (camera == null || params == null) {
return;
}

params = camera.getParameters();
params.setFlashMode(Parameters.FLASH_MODE_OFF);
camera.setParameters(params);
camera.stopPreview();

isFlashOn = false;
toggleImages();
btnSound();

}
}

protected void btnSound() {
final MediaPlayer mp = MediaPlayer.create(this, R.raw.button_sound);
mp.start();
}

public void toggleImages() {
if (isFlashOn) {
imagebtn.setImageResource(R.drawable.button_on);
img.setImageResource(R.drawable.torch_on);
} else {
imagebtn.setImageResource(R.drawable.button_off);
img.setImageResource(R.drawable.torch_off);
}
}

@Override


protected void onDestroy() {
// Toast.makeText(this,"OnDestroy",Toast.LENGTH_SHORT).show();
super.onDestroy();
}

@Override
protected void onPause() {
super.onPause();
if (isFlashOn)
flashOn();
else
flashOff();

}

@Override
protected void onRestart(){ super.onRestart();

if (isFlashOn==true)
flashOn();
else
flashOff();

}

@Override
protected void onResume() {
super.onResume();
if (isFlashOn == true)
flashOn();
else
flashOff();
}

@Override
protected void onStart() {
super.onStart();
// Toast.makeText(this,"OnStart",Toast.LENGTH_SHORT).show();

// if (hasFlash)
checkCamera();


}


@Override
protected void onStop() {
// Toast.makeText(this, "OnStop", Toast.LENGTH_SHORT).show();
super.onStop();
if (camera != null) {
camera.release();
camera = null;
flag= true;

}

}

最佳答案

请再看一下Android生命周期https://developer.android.com/guide/components/activities/activity-lifecycle.html

它继续进行 onStop -> onRestart -> onStart -> onResume

到处都是垃圾,使得本来应该很容易看到的东西变得相当困难。

所以...闪光灯已打开,即 isFlashOn = true;

从 if 中删除 boolean == true 。只是如果 (boolean) 有效并且更好。

onStop...相机= null;标志=真;

但是 isFlashOn 仍然是 true

返回 Activity ...

onRestart... if (isFlashOn==true) flashOn(); <--- 是的,所以要使用 flashOn()

flashOn() { if (!isFlashOn) { <------------- 否, boolean 值仍然为 true,因此不会运行...无论如何,相机为 null。

onStart...checkCamera() { if (camera == null) { <------ 是的,好的

onResume... if (isFlashOn == true) <----- 同样的问题,所以相机永远不会启动。

在 onStop 中设置 isFlashOn = false

还可以从恢复或重新启动中删除代码...它只是重复并经历相同的事情两次。

希望这能教您如何更好地进行调试。从中学习。

关于java - 我的 Android 应用程序在 Activity 生命周期方面无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47465839/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com