我目前制作了一个简单的手电筒应用程序,但它不适用于某些带有相机LED的设备,但在其他设备上它工作正常。谁能告诉我我做错了什么?
这是我的主要活动:
public class MainActivity extends Activity {
private Camera camera;
private Camera.Parameters parameters;
private ImageButton flashLightButton;
boolean isFlashLightOn = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AdView mAdView = (AdView) findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
flashLightButton = (ImageButton)findViewById(R.id.flashlight_button);
flashLightButton.setOnClickListener(new FlashOnOffListener());
if (isFlashSupported()) {
camera = Camera.open();
parameters = camera.getParameters();
} else {
showNoFlashAlert();
}
}
private class FlashOnOffListener implements View.OnClickListener{
@Override
public void onClick(View v) {
if(isFlashLightOn){
flashLightButton.setImageResource(R.drawable.flashlight_off);
parameters.setFlashMode(Parameters.FLASH_MODE_OFF);
camera.setParameters(parameters);
camera.stopPreview();
isFlashLightOn = false;
}else{
flashLightButton.setImageResource(R.drawable.flashlight_on);
parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
camera.setParameters(parameters);
camera.startPreview();
isFlashLightOn = true;
}
}
}
private void showNoFlashAlert() {
new AlertDialog.Builder(this)
.setMessage("Your device hardware does not support flashlight!")
.setIcon(android.R.drawable.ic_dialog_alert).setTitle("Error")
.setPositiveButton("Ok", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
finish();
}
}).show();
}
private boolean isFlashSupported() {
PackageManager pm = getPackageManager();
return pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
}
@Override
protected void onDestroy() {
if(camera != null){
camera.stopPreview();
camera.release();
camera = null;
}
super.onDestroy();
}
}
答案 0 :(得分:1)
你遇到的问题与某些制造商如何将他们的相机LED置于手电筒模式有不同的方式以及一些旧设备如何运行日期版本的android用于启用LED有关。三星和HTC通常都有问题,因此最简单的解决方法是使用switch-case语句为不同类型的设备打开/关闭手电筒。之前已经多次询问过这个问题,所以一个好的方法就是在这里搜索为不同制造商和Android版本打开手电筒的不同方法。然后编写一些获取设备属性的逻辑,使用switch-case或if-else测试它们,并为每个供应商做你应该做的事情。至少,这是确保完全兼容的最佳方式。