Android 앱이 작동하는 데 시간이 걸리는 런타임에서 작동하지 않습니다.이 문제를 해결하는 방법

라자 자 베이 드

저는 안드로이드 개발과 안드로이드 앱 개발에 익숙합니다. 나는 안드로이드 장치를위한 매우 기본적이고 간단한 손전등을 만들었습니다. 앱을 실행할 때 문제가 발생했습니다. 플래시 라이트를 켜면 시간이 좀 걸릴 것입니다 (반초 이하이지만 시간이 좀 걸립니다), wait () 메서드를 사용하지 않은 것처럼 실행하는 데 시간이 걸립니다. 내 앱에서. 사용자가 플래시를 켜거나 끄는 것처럼 정말 빠르게 실행하는 방법은 무엇입니까?

public class MainActivity extends AppCompatActivity {

private ImageButton imageButton;
private Camera camera;
private boolean isFlashOn;
private boolean hasFlash;
private Camera.Parameters params;
private MediaPlayer mp;

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

    imageButton = (ImageButton) findViewById(R.id.switch_btn);

    //Check that Device has supports flash or not

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

    if (!hasFlash){
        //If device does not supports Flash
        AlertDialog alert = new AlertDialog.Builder(MainActivity.this).create();
        alert.setTitle("Error");
        alert.setMessage("Sorry, your current device does not support to Little Flashy! ops");
        alert.setButton("Ok", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                //Close application
                finish();
            }
        });
        alert.show();
        return;
    }


    //Get the Camera
    getCamera();
    //Display button image
    toggleButtonImage();

    imageButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (isFlashOn) {
                turnOffFlash();
            } else

            {
                turnOnFlash();
            }
        }
    });
}

private void toggleButtonImage() {
    if (isFlashOn){
        imageButton.setImageResource(R.drawable.btn_switch_on);}
    else {imageButton.setImageResource(R.drawable.btn_switch_off);}

    }

private void getCamera() {
    if (camera == null){
        try{
            camera = camera.open();
            params = camera.getParameters();
        }catch (RuntimeException e){
            Log.d("Camera Error.", e.getMessage());
        }
    }
}

/*
 * Turning On flash
 */
private void turnOnFlash() {
    if (!isFlashOn) {
        if (camera == null || params == null) {
            return;
        }
        // play sound
        playSound();

        params = camera.getParameters();
        params.setFlashMode(Parameters.FLASH_MODE_TORCH);
        camera.setParameters(params);
        camera.startPreview();
        isFlashOn = true;

        // changing button/switch image
        toggleButtonImage();
    }

}

/*
 * Turning Off flash
 */
private void turnOffFlash() {
    if (isFlashOn) {
        if (camera == null || params == null) {
            return;
        }
        // play sound
        playSound();

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

        // changing button/switch image
        toggleButtonImage();
    }
}

private void playSound() {
    if (isFlashOn){
        mp = MediaPlayer.create(MainActivity.this, R.raw.light_switch_off);}
    else {
        mp= MediaPlayer.create(MainActivity.this, R.raw.light_switch_on);
    }
    mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            mp.release();
        }
    });
    mp.start();
}

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

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

    //turn off flash when on Pause called
    turnOffFlash();
}

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

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

    if (hasFlash) turnOnFlash();
}

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

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

    if (camera != null){
        camera.release();
        camera = null;
    }
}
}
TDG

당신이 켜거나 플래시를 켜기 전에, 당신은 전화 playSound용도 방법을 MediaPlayer. 이 방법은 느리고 지연이 발생합니다. 먼저 주석으로 제거하고 차이점을 확인하십시오. 다음으로 스레드에서 실행할 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관