Widget pour activer/désactiver la caméra lampe de poche sous android

Je suis en train d'élaborer un widget pour activer/désactiver la caméra led de téléphone.

J'ai fait un widget qui peut fonctionner comme le bouton à bascule (on/off).

Comportement est comme suit : Parfois, le voyant reste allumé quand je activer le widget.
Mais elle n'est pas allumer/éteindre la caméra led mais il change l'icône.

Je ne suis pas en mesure de comprendre quel est le problème réel.

La même chose fonctionne bien en Activité (lampe de poche à la Demande).

Quelqu'un peut-il svp m'expliquer comment puis-je résoudre mon problème ?

Où je vais mal ?

Vous pouvez regarder le code ci-dessous que j'ai fait jusqu'à présent

onUpdate méthode

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

         //super.onUpdate(context, appWidgetManager, appWidgetIds);

        remoteViews = new RemoteViews( context.getPackageName(), R.layout.widgetlayout);
        watchWidget = new ComponentName( context, FlashLightWidget.class );

        Intent intentClick = new Intent(context,FlashLightWidget.class);
        intentClick.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, ""+appWidgetIds[0]);

        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, appWidgetIds[0],intentClick, 0);
        remoteViews.setOnClickPendingIntent(R.id.myToggleWidget, pendingIntent);
        appWidgetManager.updateAppWidget( watchWidget, remoteViews );
        ctx=context;      
    }

onReceive méthode est comme suit :

@Override

    public void onReceive(Context context, Intent intent) {
        //TODO Auto-generated method stub

        remoteViews = new RemoteViews( context.getPackageName(), R.layout.widgetlayout);
        if (intent.getAction()==null) {
            Bundle extras = intent.getExtras();
            if(extras!=null) {
                 if(status)
                    {
                        status=false;
                        remoteViews.setImageViewResource(R.id.myToggleWidget, R.drawable.shutdown1);
                        processOnClick();
                        Toast.makeText(context,"Status==false-onclick",Toast.LENGTH_SHORT).show();
                    }
                    else
                    {
                        status = true;
                        remoteViews.setImageViewResource(R.id.myToggleWidget, R.drawable.shutdown2);
                        processOffClick();
                        Toast.makeText(context,"Status==true--Ofclick",Toast.LENGTH_SHORT).show();
                    }
                }

                watchWidget = new ComponentName( context, FlashLightWidget.class );

                (AppWidgetManager.getInstance(context)).updateAppWidget( watchWidget, remoteViews );
           }
        }
  }

processOffClick méthode

private void processOffClick() {

        if (mCamera != null) {
            mCamera.stopPreview();
            mCamera.setPreviewCallback(null);
            mCamera.release();      
            mCamera = null;
        }
    }

processOnClick méthode

private void processOnClick() {

    if(mCamera==null)
    {
        try {
            mCamera = Camera.open();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    if (mCamera != null) {

        Parameters params = mCamera.getParameters();
        List<String> flashModes = params.getSupportedFlashModes();

        if (flashModes == null) {
            return;
        } else {

                params.setFlashMode(Parameters.FLASH_MODE_OFF);
                mCamera.setParameters(params);
                mCamera.startPreview();

            String flashMode = params.getFlashMode();

            if (!Parameters.FLASH_MODE_TORCH.equals(flashMode)) {

                if (flashModes.contains(Parameters.FLASH_MODE_TORCH)) {
                    params.setFlashMode(Parameters.FLASH_MODE_TORCH);
                    mCamera.setParameters(params);

                } 

            }
        }
    } else if (mCamera == null) {
        //Toast.makeText(ctx, "Camera not found", Toast.LENGTH_LONG).show();
        return;
    }
}
  • Veuillez vous reporter à cet article pour une solution valide: stackoverflow.com/questions/3878294/...
  • Cela ne m'aide copain.. j'ai désigné plusieurs fois avant.. Ce que je demande est totalement différent.
  • Si je lis ce que vous faites correctement... vous semblez être d'essayer de contrôler la led à partir de l'app widget fournisseur, Est-ce correct? Si donc vous avez besoin pour tirer ce code et de le mettre dans sa propre classe et appeler cette classe à partir de votre app widget fournisseur
  • Oui, vous avez raison. Je suis en train de contrôle de la led à partir de l'app widget fournisseur. Mais je pense que je suis la mise en œuvre de mauvaises choses dans AppWidgetProvider. Manipulation sur les événements dans onReceive méthode n'est pas bonne je pense !
  • Qui est correct. Le AppWidgetProvider est très limité dans ce qu'il peut faire. Vous accédez à la disposition des widgets via RemoteViews developer.android.com/reference/android/widget/RemoteViews.html donc ma recommandation de créer une catégorie distincte pour gérer tous les AppWidget de l'INTERFACE utilisateur des mises à jour... voici un exemple simple que j'ai posté aujourd'hui: stackoverflow.com/questions/7560265/...
  • Downvoted pour ?