From d06a1dd9b36d779387f5e78a02b214019019fb2f Mon Sep 17 00:00:00 2001 From: pilhoefermi93253 Date: Tue, 30 May 2023 18:37:38 +0200 Subject: [PATCH] =?UTF-8?q?Kamera=20implementiert=20und=20Preview=20im=20I?= =?UTF-8?q?nterface=20Zus=C3=A4tzlich=20eintragen=20der=20Berechtigungen?= =?UTF-8?q?=20und=20der=20extra=20Klasse=20KameraAktivitaet=20im=20Manifes?= =?UTF-8?q?t=20eingetragen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 7 +++ app/src/main/AndroidManifest.xml | 15 ++++- .../java/com/example/greenwatch/Kamera.java | 4 -- .../example/greenwatch/KameraAktivitaet.java | 59 +++++++++++++++++++ .../com/example/greenwatch/MainActivity.java | 30 +++++++++- app/src/main/res/layout/activity_main.xml | 14 +++-- build.gradle | 4 +- gradle.properties | 4 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 9 files changed, 122 insertions(+), 17 deletions(-) delete mode 100644 app/src/main/java/com/example/greenwatch/Kamera.java create mode 100644 app/src/main/java/com/example/greenwatch/KameraAktivitaet.java diff --git a/app/build.gradle b/app/build.gradle index e5afc91..f401dc8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,6 +25,7 @@ android { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } + namespace 'com.example.greenwatch' } dependencies { @@ -35,4 +36,10 @@ dependencies { testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' + + def camerax_version = "1.2.3" + implementation "androidx.camera:camera-camera2:${camerax_version}" + implementation "androidx.camera:camera-lifecycle:${camerax_version}" + implementation "androidx.camera:camera-view:${camerax_version}" + } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e6408bb..3c47440 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,14 @@ - + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/example/greenwatch/Kamera.java b/app/src/main/java/com/example/greenwatch/Kamera.java deleted file mode 100644 index 4f49b5d..0000000 --- a/app/src/main/java/com/example/greenwatch/Kamera.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.example.greenwatch; - -public class Kamera { -} diff --git a/app/src/main/java/com/example/greenwatch/KameraAktivitaet.java b/app/src/main/java/com/example/greenwatch/KameraAktivitaet.java new file mode 100644 index 0000000..ee33eaa --- /dev/null +++ b/app/src/main/java/com/example/greenwatch/KameraAktivitaet.java @@ -0,0 +1,59 @@ +package com.example.greenwatch; + +import android.graphics.ImageFormat; +import android.media.Image; +import android.os.Bundle; +import android.util.Size; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.camera.core.CameraSelector; +import androidx.camera.core.ImageAnalysis; +import androidx.camera.core.Preview; +import androidx.camera.lifecycle.ProcessCameraProvider; +import androidx.camera.view.PreviewView; +import androidx.core.content.ContextCompat; + +import com.google.common.util.concurrent.ListenableFuture; + +import java.util.concurrent.ExecutionException; + +public class KameraAktivitaet extends AppCompatActivity { + private PreviewView previewView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_demo_kamera2_nebenaktivitaet); + previewView = findViewById(R.id.previewView); + final ListenableFuture cameraProviderFuture = ProcessCameraProvider.getInstance(this); + cameraProviderFuture.addListener(() -> { + try { + bindImageAnalysis(cameraProviderFuture.get()); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + }, ContextCompat.getMainExecutor(this)); + } + + private void bindImageAnalysis(ProcessCameraProvider cameraProvider) { + ImageAnalysis.Builder builder = new ImageAnalysis.Builder(); + builder.setTargetResolution(new Size(640, 480)); + builder.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST); + ImageAnalysis imageAnalysis = builder.build(); + imageAnalysis.setAnalyzer( + ContextCompat.getMainExecutor(this), + imageProxy -> { + int imageFormat = imageProxy.getFormat(); + if (imageFormat == ImageFormat.YUV_420_888) { + Image image = imageProxy.getImage(); + } + imageProxy.close(); + }); + + Preview preview = new Preview.Builder().build(); + CameraSelector cameraSelector = new CameraSelector.Builder().requireLensFacing(CameraSelector.LENS_FACING_BACK).build(); + preview.setSurfaceProvider(previewView.getSurfaceProvider()); + cameraProvider.bindToLifecycle(this, cameraSelector, imageAnalysis, preview); + } +} + diff --git a/app/src/main/java/com/example/greenwatch/MainActivity.java b/app/src/main/java/com/example/greenwatch/MainActivity.java index 98aa213..520b150 100644 --- a/app/src/main/java/com/example/greenwatch/MainActivity.java +++ b/app/src/main/java/com/example/greenwatch/MainActivity.java @@ -1,14 +1,40 @@ package com.example.greenwatch; -import androidx.appcompat.app.AppCompatActivity; - +import android.content.Intent; +import android.content.pm.PackageManager; import android.os.Bundle; +import android.widget.Button; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; public class MainActivity extends AppCompatActivity { + private static final int RECHTEANFORDERUNG_KAMERA = 10; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + Button kameraStarten = findViewById(R.id.button_camera); + kameraStarten.setOnClickListener(v -> { + if (istZugriffAufKameraErlaubt()) { + starteKameraAktivitaet(); + } else { + zugriffAufKameraAnfordern(); + } + }); + } + + private boolean istZugriffAufKameraErlaubt() { + return ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED; + } + + private void zugriffAufKameraAnfordern() { + ActivityCompat.requestPermissions(this,new String[]{android.Manifest.permission.CAMERA}, RECHTEANFORDERUNG_KAMERA); + } + + private void starteKameraAktivitaet() { + startActivity(new Intent(this, KameraAktivitaet.class)); } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 4fc2444..9663aaf 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -6,13 +6,17 @@ android:layout_height="match_parent" tools:context=".MainActivity"> - + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.129" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.931" /> + \ No newline at end of file diff --git a/build.gradle b/build.gradle index 905d3bd..1f7d8ec 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { - id 'com.android.application' version '7.1.3' apply false - id 'com.android.library' version '7.1.3' apply false + id 'com.android.application' version '8.0.0' apply false + id 'com.android.library' version '8.0.0' apply false } task clean(type: Delete) { diff --git a/gradle.properties b/gradle.properties index dab7c28..ec63151 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,4 +18,6 @@ android.useAndroidX=true # Enables namespacing of each library's R class so that its R class includes only the # resources declared in the library itself and none from the library's dependencies, # thereby reducing the size of the R class for that library -android.nonTransitiveRClass=true \ No newline at end of file +android.nonTransitiveRClass=true +android.defaults.buildfeatures.buildconfig=true +android.nonFinalResIds=false \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 78ca69f..45b6746 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Thu May 11 14:50:16 CEST 2023 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME