0

私は懐中電灯アプリを開発していますが、アプリは期待どおりに動作していますが、「ホーム」または「戻る」キーが押されたときではありません。ユーザーが「ホーム」キーを押しても、トーチがオンになっている間に他の作業を実行できるように、アプリでトーチ ライトをオンにしておく必要があります。バックキーで、フラッシュをオフにしても問題ありません。これが私のコードです。それを手伝ってください、みんなに感謝します。

public class LightsOn extends Activity implements OnKeyListener
{
    ImageView button;
    Boolean flashon=true;
    private boolean hasFlash;
    Parameters myparas;
    private Camera mycamera;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_light);

        hasFlash = getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);

        button=(ImageView)findViewById(R.id.power);
        button.setBackgroundResource(R.drawable.offswitch);
        button.setOnClickListener(new View.OnClickListener() 
        {
            @Override
            public void onClick(View v) 
            {
                // TODO Auto-generated method stub
                if(flashon)
                {
                    Toast.makeText(LightsOn.this, "Flashlight off..!!", Toast.LENGTH_SHORT).show();
                    button.setBackgroundResource(R.drawable.onswitch);
                    if (mycamera == null || myparas == null) 
                    {
                        return;
                    }
                    else
                    {
                        myparas = mycamera.getParameters();
                        myparas.setFlashMode(Parameters.FLASH_MODE_OFF);
                        mycamera.setParameters(myparas);
                        mycamera.stopPreview();
                        flashon=false;
                    }
                }
                else
                {
                    Toast.makeText(LightsOn.this, "Flashlight on..!!", Toast.LENGTH_SHORT).show();
                    button.setBackgroundResource(R.drawable.offswitch);
                    if (mycamera == null || myparas == null) 
                    {
                        return;
                    }
                    else
                    {
                        myparas = mycamera.getParameters();
                        myparas.setFlashMode(Parameters.FLASH_MODE_TORCH);
                        mycamera.setParameters(myparas);
                        mycamera.startPreview();
                        flashon=true;
                    }
                }
            }
        });
    }

    private void getCamera() 
    {
        if (mycamera == null) 
        {
            try 
            {
                mycamera = Camera.open();
                myparas = mycamera.getParameters();
            } 
            catch (RuntimeException e)
            {
                Log.e("Camera Error. Failed to Open. Error: ", e.getMessage());
            }
        }

        if (!hasFlash)
        {
            AlertDialog.Builder dialog = new AlertDialog.Builder(this);
            dialog.setTitle("Sorry your device doesnt support flash.");
            dialog.setMessage("Press 'OKAY' to exit..");
            dialog.setPositiveButton("Okay.. :( :(", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) 
                {
                    finish();
                    moveTaskToBack(true);
                }
            });
            dialog.setNegativeButton("More Apps by ****", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) 
                {
                    Toast.makeText(LightsOn.this, "Account Coming Soon..", Toast.LENGTH_SHORT).show();
                    finish();
                    moveTaskToBack(true);
                }
            });
            dialog.setNeutralButton("See website for more", new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) 
                {
                    Toast.makeText(LightsOn.this, "Website to be Launched Soon..", Toast.LENGTH_SHORT).show();
                    finish();
                    moveTaskToBack(true);
                }
            });
        dialog.show();
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }

    @Override
    protected void onPause() {
        super.onPause();

        // on pause turn off the flash
        myparas = mycamera.getParameters();
        myparas.setFlashMode(Parameters.FLASH_MODE_OFF);
        mycamera.setParameters(myparas);
        mycamera.stopPreview();
        flashon=false;
    }

    @Override
    protected void onRestart() {
        super.onRestart();
    }

    @Override
    protected void onResume() {
        super.onResume();    

        if(hasFlash)
        myparas = mycamera.getParameters();
        myparas.setFlashMode(Parameters.FLASH_MODE_TORCH);
        mycamera.setParameters(myparas);
        mycamera.startPreview();
        flashon=true;
    }

    @Override
    protected void onStop() {
        super.onStop();
        // on stop release the camera
        if (mycamera != null)
        {
            mycamera.release();
            mycamera = null;
        }
    }

    @Override
    protected void onStart() {
        super.onStart();
        // on starting the app get the camera params
        getCamera();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu m)
    {
        MenuInflater inf=getMenuInflater(); 
        inf.inflate(R.menu.menu,m);
        return true;
    }
}
4

4 に答える 4

1

わかりました。答えは、単純に onPause() メソッドを重ねてから、onBackPressed() メソッドでフラッシュをオフにすることです。

@Override
protected void onPause() {
super.onPause();
}

これは onBackPressed()

@Override
protected void onBackPressed() { 
super.onBackPressed();

myparas = mycamera.getParameters();
myparas.setFlashMode(Parameters.FLASH_MODE_OFF);
mycamera.setParameters(myparas);
mycamera.stopPreview();
flashon=false;
}

今では、上記の回答も同じことを示唆していることがわかります..だから、今では十分に証明された回答だと思います。@akshatはそれに行くべきです..

于 2013-06-18T07:23:01.607 に答える
0

ここで私はコードセットを変更しました!

それは私のために働いた!ありがとう

  @Override
protected void onDestroy() {
    super.onDestroy();
}

@Override
protected void onPause() {
    super.onPause();

    // on pause turn off the flash
  //  turnOffFlash();
}

@Override
protected void onRestart() {
    super.onRestart();
}

@Override
protected void onResume() {
    super.onResume();

    // on resume turn on the flash
    if(hasFlash)
        turnOnFlash();
}

@Override
protected void onStart() {
    super.onStart();

    // on starting the app get the camera params
    getCamera();
}

@Override
public void onBackPressed() {
    // TODO Auto-generated method stub
    super.onBackPressed();

    params = camera.getParameters();
    params.setFlashMode(Parameters.FLASH_MODE_OFF);
    camera.setParameters(params);
    camera.stopPreview();
    isFlashOn = false;

    if (camera != null) {
        camera.release();
        camera = null;
    }
    Log.d("Camera","Back Pressed");
}

@Override
protected void onStop() {
    super.onStop();

    // on stop release the camera
 //   if (camera != null) {
 //       camera.release();
  //      camera = null;
   // }
}
于 2016-09-01T03:37:07.980 に答える