From: Martin Pitt <martin@piware.de> Date: Fri, 29 May 2020 13:55:48 +0000 (+0200) Subject: Add button to take a photo X-Git-Url: https://piware.de/gitweb/?a=commitdiff_plain;ds=inline;p=android-PittiHelloWorld.git Add button to take a photo This calls an external intent [1]. This does not work yet -- while the camera app is being called correctly, onActivityResult() always gets a -1 result. [1] https://developer.android.com/training/camera/photobasics --- diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 99c7675..2407a60 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,9 @@ <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.pittihelloworld"> + <uses-feature android:name="android.hardware.camera" android:required="true" /> + <!-- <uses-permission android:name="android.permission.CAMERA" /> does not help --> + <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" diff --git a/app/src/main/java/com/example/pittihelloworld/MainActivity.kt b/app/src/main/java/com/example/pittihelloworld/MainActivity.kt index 540fc06..a75e653 100644 --- a/app/src/main/java/com/example/pittihelloworld/MainActivity.kt +++ b/app/src/main/java/com/example/pittihelloworld/MainActivity.kt @@ -1,12 +1,18 @@ package com.example.pittihelloworld +import android.app.Activity import android.content.Intent +import android.graphics.Bitmap import androidx.appcompat.app.AppCompatActivity import android.os.Bundle +import android.provider.MediaStore import android.view.View import android.widget.EditText +import android.widget.TextView +import kotlinx.android.synthetic.main.activity_main.* const val EXTRA_MESSAGE = "com.example.pittihelloworld.MESSAGE" +const val REQUEST_IMAGE_CAPTURE = 1 class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { @@ -15,11 +21,30 @@ class MainActivity : AppCompatActivity() { } fun sendMessage(view: View) { - val editText = findViewById<EditText>(R.id.messageText) - val message = editText.text.toString() + val message = messageText.text.toString() val intent = Intent(this, DisplayMessageActivity::class.java).apply { putExtra(EXTRA_MESSAGE, message) } startActivity(intent) } + + fun takePhoto(view: View) { + Intent(MediaStore.ACTION_IMAGE_CAPTURE).also { takePictureIntent -> + takePictureIntent.resolveActivity(packageManager)?.also { + startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE) + } + } + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + textViewPhotoResult.text = "result code: " + resultCode.toString() + if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK && data != null) { + val extras = data.extras + if (extras != null) { + val imageBitmap = extras.get("data") as Bitmap + imageViewPhoto.setImageBitmap(imageBitmap) + } + } + } } \ 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 b9c73fe..4fac27c 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -30,4 +30,41 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toEndOf="@+id/messageText" /> + + <Button + android:id="@+id/button_photo" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="16dp" + android:layout_marginLeft="16dp" + android:layout_marginTop="16dp" + android:onClick="takePhoto" + android:text="@string/button_photo" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/messageText" /> + + <ImageView + android:id="@+id/imageViewPhoto" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_marginStart="16dp" + android:layout_marginLeft="16dp" + android:layout_marginTop="16dp" + android:layout_marginEnd="16dp" + android:layout_marginRight="16dp" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/button_photo" + app:srcCompat="@android:drawable/btn_dialog" /> + + <TextView + android:id="@+id/textViewPhotoResult" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="16dp" + android:layout_marginLeft="16dp" + android:layout_marginTop="16dp" + android:text="@string/text_nocamresult" + app:layout_constraintStart_toEndOf="@+id/button_photo" + app:layout_constraintTop_toBottomOf="@+id/messageText" /> </androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5f138a8..5631ead 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2,4 +2,6 @@ <string name="app_name">"Pitti's Hello World"</string> <string name="edit_message">Enter a message</string> <string name="button_send">Send</string> + <string name="button_photo">Take a photo</string> + <string name="text_nocamresult">No photo taken yet</string> </resources>