0

I have a simple Flashlight app which has a widget and it works fine for quite some time after an installation but then the widget stops responding, it just doesn't respond to a click and it doesn't throw any errors. I might've done some errors or irrational things in my code since I'm new to widgets but I can't seem to determine them and understand what causes the problem.

Here's my code:

public class MyAppWidget extends AppWidgetProvider {

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {

    Intent receiver = new Intent(context, MyAppWidgetReceiver.class);

    receiver.setAction("COM_FLASHLIGHT");

    receiver.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);

    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, receiver,0);

    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.my_app_widget);

    views.setOnClickPendingIntent(R.id.imageButton, pendingIntent);

    appWidgetManager.updateAppWidget(appWidgetIds, views);
}

}

public class MyAppWidgetReceiver extends BroadcastReceiver {

public static boolean isActive = false;
public static Flash flash = new Flash();

@Override
public void onReceive(Context context, Intent intent) {
    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.my_app_widget);
    if(isActive){
        isActive = false;
        flash.off();
        flash.close();
        views.setImageViewResource(R.id.imageButton, R.drawable.pers_off);
    }else{
        isActive = true;
        flash.open();
        flash.on();
        views.setImageViewResource(R.id.imageButton, R.drawable.pers_on);
    }
    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
    appWidgetManager.updateAppWidget(new ComponentName(context, MyAppWidget.class), views);

}

}

And my Flash class, just in case:

public class Flash {
private Camera camera = null;
private Camera.Parameters cameraParameters;

private String previousFlashMode = null;

public synchronized void open() {
    camera = Camera.open();
    if (camera != null) {
        cameraParameters = camera.getParameters();
        previousFlashMode = cameraParameters.getFlashMode();
    }
    if (previousFlashMode == null) {
        // could be null if no flash, i.e. emulator
        previousFlashMode = Camera.Parameters.FLASH_MODE_OFF;
    }
}

public synchronized void close() {
    if (camera != null) {
        cameraParameters.setFlashMode(previousFlashMode);
        camera.setParameters(cameraParameters);
        camera.release();
        camera = null;
    }
}

public synchronized void on() {
    if (camera != null) {
        cameraParameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
        camera.setParameters(cameraParameters);
        camera.startPreview();
    }
}

public synchronized void off() {
    if (camera != null) {
        camera.stopPreview();
        cameraParameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
        camera.setParameters(cameraParameters);
    }
}

public Camera getCamera(){
    return camera;
}

}

Denis
  • 1
  • 1

0 Answers0