Android 闪光灯无法打开/摄像机错误
您好,我在查看手电筒应用程序的源代码,我做了一些修改,因为当我最小化应用程序时,手电筒会关闭,所以我只使用onDestroy()方法关闭应用程序状态,但当我关闭和打开应用程序时,有时应用程序甚至不工作,它会显示“打开”但不会打开手电筒 这就是我所做的Android 闪光灯无法打开/摄像机错误,android,flashlight,Android,Flashlight,您好,我在查看手电筒应用程序的源代码,我做了一些修改,因为当我最小化应用程序时,手电筒会关闭,所以我只使用onDestroy()方法关闭应用程序状态,但当我关闭和打开应用程序时,有时应用程序甚至不工作,它会显示“打开”但不会打开手电筒 这就是我所做的 public class MainActivity extends AppCompatActivity { Button button; private Camera camera; private boolean isFlashOn; priv
public class MainActivity extends AppCompatActivity {
Button button;
private Camera camera;
private boolean isFlashOn;
private boolean hasFlash;
Parameters params;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ImageButton imgbutton = (ImageButton)findViewById(R.id.imageButton);
hasFlash = getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
getCamera();
//button.setOnClickListener(new View.OnClickListener() {
imgbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isFlashOn) {
turnOffFlash();
Toast.makeText(MainActivity.this, "Flash OFF!", Toast.LENGTH_SHORT).show();
imgbutton.setImageResource(R.drawable.light_off);
} else {
turnOnFlash();
Toast.makeText(MainActivity.this, "Flash ON!", Toast.LENGTH_SHORT).show();
imgbutton.setImageResource(R.drawable.light_on);
}
}
});
}
private void getCamera() {
if (camera == null) {
try {
camera = Camera.open();
params = camera.getParameters();
}catch (Exception e) {
}
}
}
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;
}
}
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;
}
}
protected void onDestroy(){
if(camera!=null){
camera.stopPreview();
camera.setPreviewCallback(null);
camera.release();
camera = null;
}
} }
使用onPause()
和onResume()
@Override
protected void onPause() {
super.onPause();
//Your code
}
@Override
protected void onResume() {
super.onResume();
//Your code
}
您忘记覆盖:
onStop()
onResume()
要获取hasFlash
我建议您将其放入onCreate()
中,以了解设备是否有闪存可用
hasFlash = getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
onPause()
顺便说一句,你有代码重复 谢谢你的反馈..当我关闭应用程序时,我的应用程序会崩溃。有没有办法修复我使用的关闭Flash()销毁后无法解决此问题共享您的错误并将此ans标记为已批准(如果有帮助)。系统说不抱歉,应用程序已关闭,此处记录感谢我解决了我的问题,并向上投票支持您的帮助,因为我是新的stackoverflow,它现在公开显示向上投票当我最小化需要制作的应用程序时,应用程序将关闭灯即使是最小化,当我关闭应用程序(它调用destroy()方法)时,系统也会说“不幸的是,手电筒应用程序已停止”,然后在onPause中删除关机flash()方法。。。在你的问题中加入logcat错误,看看什么是crashingi从onPause()中删除了turnOffFlash(),但这不起作用,然后我删除了onStop()中的方法,然后它就起作用了..现在prblm is应用程序已停止msg出现在应用程序完全关闭时Tanks我解决了我的问题。。我没有在onDestory()方法中调用super.onDestory(),该方法现在导致了prbolem,但它没有显示任何error@JasbinKarki是的,你当然得打电话给super.onDestroy()
@Override
protected void onResume() {
super.onResume();
if(hasFlash)
turnOnFlash();
}
hasFlash = getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
@Override
protected void onPause() {
super.onPause();
turnOffFlash();
}