Ошибка с фонариком приложения Android 4.0.4 Nexus S i9020
У меня проблема с фонариком приложения Android 4.0.4 Nexus S i9020. Я перепробовал десятки предложений, размещенных здесь на stackru, но у меня ничего не получалось. Приложение работало с версией Android 2.3.6, но с 4.0.4 факел перестал работать.
Вот мой impl и вывод logcat.
@Override
protected void onResume()
{
super.onResume();
_Camera = Camera.open();
}
@Override
protected void onPause()
{
if (_Camera != null)
{
_Camera.release();
}
}
//called within runnable and post to a handler
private void processOffClick()
{
if (_Camera != null)
{
Parameters params = _Camera.getParameters();
params.setFlashMode(Parameters.FLASH_MODE_OFF);
_Camera.setParameters(params);
_Camera.stopPreview();
}
}
//called within runnable and post to a handler
private void processOnClick()
{
if (_Camera != null)
{
Parameters params = _Camera.getParameters();
params.setFlashMode(Parameters.FLASH_MODE_TORCH);
_Camera.setParameters(params);
_Camera.startPreview();
}
}
Я также попытался выполнить onclick offclick методы без runnables.
В Logcat ошибка фоллинга возникает после выполнения onclick.
04-07 14:10:02.719: E/CameraHardwareSec(82): preview window is NULL!
04-07 14:10:02.719: I/CameraHardwareSec(82): virtual android::status_t android::CameraHardwareSec::startPreview() : deferring
На рынке есть несколько приложений для камеры, которые работают с моим телефоном. Так что должен быть какой-то способ включить фонарик.
Я также попытался добавить SurfaceView/Holder, но это не сработало. Может я что то не так сделал.
Ура Карим
1 ответ
Вы все делаете хорошо, в версии 4.0+ вам нужен вид поверхности. Объявите один в вашем layout.xml
затем сделайте что-то вроде этого:
реализовать SurfaceHolder.Callback
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//init your layout
this._surfaceView = (SurfaceView) this.findViewById(R.id.surfaceView);
this._surfaceHolder = this._surfaceView.getHolder();
this._surfaceHolder.addCallback(this);
this._surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
@Override
protected void onResume()
{
super.onResume();
_Camera = Camera.open();
this._camera.startPreview();
this._camera.setPreviewDisplay(this._surfaceHolder);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
//this._surfaceHolder = holder;
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
//this._surfaceHolder = null;
}