簡體   English   中英

如何使用相同的按鈕啟動和停止方法

[英]How to start and stop method with same button

如何使用相同的 onClick 按鈕啟動和停止此相機(或預覽?)? 啟動相機沒有問題,但現在也關閉相機,對於像我這樣的新手來說,使用相同的按鈕被證明更困難。

第二次按下按鈕時,程序現在崩潰了,這並不理想。

public class MainActivity extends AppCompatActivity {

PreviewView previewView;
public int REQUEST_CODE_PERMISSIONS = 101;
public final String[] REQUIRED_PERMISSIONS = new String[]{"android.permission.CAMERA"};


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    previewView = findViewById(R.id.previewView);
    Button captureButton = findViewById(R.id.buttonPreview);
    captureButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
          if (allPermissionsGranted()) {
              startCamera();
          } else {
              ActivityCompat.requestPermissions(MainActivity.this, REQUIRED_PERMISSIONS, REQUEST_CODE_PERMISSIONS);
          }
      }
      });
}


@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull 
int[] grantResults) {
  super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  if (allPermissionsGranted()) {
      startCamera();
  } else {
      Toast.makeText(this, "Permissions not granted by the user.", Toast.LENGTH_SHORT).show();
      finish();
  }
}

public boolean allPermissionsGranted() {

  for (String permission : REQUIRED_PERMISSIONS) {
      if (ContextCompat.checkSelfPermission(getApplicationContext(), permission) != PackageManager.PERMISSION_GRANTED) {
          return false;
      }
  }
  return true;
}
 public void startCamera() {
    ListenableFuture cameraProviderFuture = ProcessCameraProvider.getInstance(this);

    cameraProviderFuture.addListener(() -> {
        try {
            ProcessCameraProvider cameraProvider = (ProcessCameraProvider) cameraProviderFuture.get();
            Preview preview = new Preview.Builder().build();
            CameraSelector cameraSelector = new CameraSelector.Builder()
                    .requireLensFacing(CameraSelector.LENS_FACING_BACK)
                    .build();
            ImageAnalysis imageAnalysis =
                    new ImageAnalysis.Builder()
                            .setTargetResolution(new Size(1280, 720))
                            .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
                            .build();
            preview.setSurfaceProvider(previewView.getSurfaceProvider());
            Camera camera = cameraProvider.bindToLifecycle(
                    ((LifecycleOwner) this),
                    cameraSelector,
                    preview,
                    imageAnalysis);

        } catch (InterruptedException | ExecutionException e) {

        }
    }, ContextCompat.getMainExecutor(this));
}
}

只需要創建一個 boolean 或 int 變量,例如:

boolean ifCameraStarted=false;

當您調用 startCamera() 時,您將此變量更改為 true,當您停止相機時將其更改為 false; 當你點擊按鈕時,你用這個變量判斷它是真還是假,做不同的事情

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM