Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -----------------------------activity_main.xml
- <?xml version="1.0" encoding="utf-8"?>
- <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- tools:context=".MainActivity">
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="0dp"
- android:orientation="vertical"
- android:weightSum="100"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent">
- <androidx.camera.view.PreviewView
- android:id="@+id/previewView"
- android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="90" />
- <RelativeLayout
- android:layout_width="match_parent"
- android:layout_height="0dp"
- android:orientation="horizontal"
- android:layout_weight="10"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent">
- <Button
- android:id="@+id/bCapture"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:text="take picture" />
- </RelativeLayout>
- </LinearLayout>
- </androidx.constraintlayout.widget.ConstraintLayout>
- -----------------------------AndroidManifest.xml
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- package="com.example.camera_devandroid_01">
- <uses-permission android:name="android.permission.CAMERA"/>
- <uses-permission android:name="android.permission.RECORD_AUDIO"/>
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <!-- android:maxSdkVersion="28" -->
- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
- <uses-feature android:name="android.hardware.camera" />
- <application
- android:allowBackup="true"
- android:dataExtractionRules="@xml/data_extraction_rules"
- android:fullBackupContent="@xml/backup_rules"
- android:icon="@mipmap/ic_launcher"
- android:label="@string/app_name"
- android:roundIcon="@mipmap/ic_launcher_round"
- android:supportsRtl="true"
- android:theme="@style/Theme.Cameradevandroid01"
- tools:targetApi="31">
- <activity
- android:name=".MainActivity"
- android:exported="true">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application>
- </manifest>
- -----------------------------build.gradle
- plugins {
- id 'com.android.application'
- }
- android {
- compileSdk 32
- defaultConfig {
- applicationId "com.example.camera_devandroid_01"
- minSdk 23
- targetSdk 32
- versionCode 1
- versionName "1.0"
- testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
- }
- buildTypes {
- release {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
- }
- }
- compileOptions {
- sourceCompatibility JavaVersion.VERSION_1_8
- targetCompatibility JavaVersion.VERSION_1_8
- }
- }
- dependencies {
- implementation 'androidx.appcompat:appcompat:1.4.2'
- implementation 'com.google.android.material:material:1.6.1'
- implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
- def cameraxVersion = "1.1.0-alpha05"
- implementation "androidx.camera:camera-core:${cameraxVersion}"
- implementation "androidx.camera:camera-camera2:${cameraxVersion}"
- implementation "androidx.camera:camera-lifecycle:${cameraxVersion}"
- implementation 'androidx.camera:camera-view:1.0.0-alpha25'
- testImplementation 'junit:junit:4.13.2'
- androidTestImplementation 'androidx.test.ext:junit:1.1.3'
- androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
- }
- -----------------------------MainActivity.java
- package com.example.camera_devandroid_01;
- import androidx.annotation.NonNull;
- import androidx.appcompat.app.AppCompatActivity;
- import androidx.camera.core.CameraSelector;
- import androidx.camera.core.ImageAnalysis;
- import androidx.camera.core.ImageCapture;
- import androidx.camera.core.ImageCaptureException;
- import androidx.camera.core.ImageProxy;
- import androidx.camera.core.Preview;
- import androidx.camera.core.VideoCapture;
- import androidx.camera.lifecycle.ProcessCameraProvider;
- import androidx.camera.view.PreviewView;
- import androidx.core.content.ContextCompat;
- import androidx.lifecycle.LifecycleOwner;
- import android.Manifest;
- import android.annotation.SuppressLint;
- import android.app.Activity;
- import android.content.ContentValues;
- import android.content.Context;
- import android.content.pm.PackageManager;
- import android.hardware.Camera;
- import android.os.Bundle;
- import android.provider.MediaStore;
- import android.util.Log;
- import android.view.View;
- import android.widget.Button;
- import android.widget.Toast;
- import com.google.common.util.concurrent.ListenableFuture;
- import java.util.concurrent.ExecutionException;
- public class MainActivity extends AppCompatActivity {
- private ListenableFuture<ProcessCameraProvider> cameraProviderFuture;
- PreviewView previewView;
- private ImageCapture imageCapture;
- private Button bCapture;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- previewView = findViewById(R.id.previewView);
- bCapture = findViewById(R.id.bCapture);
- if (checkSelfPermission(Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_DENIED ||
- checkSelfPermission(Manifest.permission.ACCESS_NETWORK_STATE) == PackageManager.PERMISSION_DENIED ||
- checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED ||
- checkSelfPermission(Manifest.permission.INTERNET) == PackageManager.PERMISSION_DENIED ||
- checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_DENIED ||
- checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) {
- String[] permission = {Manifest.permission.ACCESS_WIFI_STATE, Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, Manifest.permission.ACCESS_NETWORK_STATE, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.INTERNET, Manifest.permission.WRITE_EXTERNAL_STORAGE};
- requestPermissions(permission, 1000);
- }
- cameraProviderFuture = ProcessCameraProvider.getInstance(this);
- cameraProviderFuture.addListener(() -> {
- try {
- ProcessCameraProvider cameraProvider = cameraProviderFuture.get();
- startCameraX(cameraProvider);
- } catch (ExecutionException | InterruptedException e) {
- e.printStackTrace();
- }
- }, ContextCompat.getMainExecutor(this));
- bCapture.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- //Toast.makeText(MainActivity.this, "Clicked Capture!", Toast.LENGTH_SHORT).show();
- capturePhoto();
- }
- });
- }
- @SuppressLint("RestrictedApi")
- private void startCameraX(@NonNull ProcessCameraProvider cameraProvider) {
- cameraProvider.unbindAll();
- CameraSelector cameraSelector = new CameraSelector.Builder()
- .requireLensFacing(CameraSelector.LENS_FACING_BACK)
- .build();
- Preview preview = new Preview.Builder()
- .build();
- preview.setSurfaceProvider(previewView.getSurfaceProvider());
- // Image capture use case
- imageCapture = new ImageCapture.Builder()
- .setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
- .build();
- // Image analysis use case
- ImageAnalysis imageAnalysis = new ImageAnalysis.Builder()
- .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
- .build();
- //imageAnalysis.setAnalyzer(ContextCompat.getMainExecutor(this),this); //got to fix 'this' 2nd param
- imageAnalysis.setAnalyzer(ContextCompat.getMainExecutor(this), new ImageAnalysis.Analyzer() {
- @Override
- public void analyze(@NonNull ImageProxy imageProxy) {
- int rotationDegrees = imageProxy.getImageInfo().getRotationDegrees();
- imageProxy.close();
- }
- });
- //bind to lifecycle:
- try {
- cameraProvider.bindToLifecycle((LifecycleOwner) this, cameraSelector, preview, imageCapture);
- } catch (Exception e) {
- Log.e("========>ERROR<=========", e.getMessage(), e);
- }
- }
- private void capturePhoto() {
- long timestamp = System.currentTimeMillis();
- ContentValues contentValues = new ContentValues();
- contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, timestamp);
- contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/jpeg");
- imageCapture.takePicture(
- new ImageCapture.OutputFileOptions.Builder(
- getContentResolver(),
- MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
- contentValues
- ).build(),
- ContextCompat.getMainExecutor(this),
- new ImageCapture.OnImageSavedCallback() {
- @Override
- public void onImageSaved(@NonNull ImageCapture.OutputFileResults outputFileResults) {
- Toast.makeText(MainActivity.this, "Photo has been saved successfully.", Toast.LENGTH_SHORT).show();
- }
- @Override
- public void onError(@NonNull ImageCaptureException exception) {
- Toast.makeText(MainActivity.this, "Error saving photo: " + exception.getMessage(), Toast.LENGTH_SHORT).show();
- }
- }
- );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement