Android: Wie man mit "begrenzten Zugriffsfotos" umgeht, um eine exif -Koordinate zu erhaltenAndroid

Forum für diejenigen, die für Android programmieren
Anonymous
 Android: Wie man mit "begrenzten Zugriffsfotos" umgeht, um eine exif -Koordinate zu erhalten

Post by Anonymous »

Ich baue eine Kotlin-Multiplattform-App. Der Kern meiner App basiert auf dem Zugriff auf Foto -EXIF -Daten von Bildern. Ich habe die Benutzer um Erlaubnis für read_media_images gebeten, was gut funktioniert, wenn der Benutzer den Zugriff gewährt oder dies leugnet. Ich benutze den folgenden Block, um die Erlaubnis des Benutzers zu erkennen. < /P>

Code: Select all

 permissionLauncher.launch(permissionToRequest)

val permissionToRequest = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
Manifest.permission.READ_MEDIA_IMAGES
} else {
Manifest.permission.READ_EXTERNAL_STORAGE
}

val permissionLauncher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.RequestPermission(),
onResult = { isGranted: Boolean ->
if (isGranted) {
imagePickerLauncher.launch("image/*")
}
}
)
Das Problem ist, wenn der Benutzer die dritte Option -Block mit isGranted = true ausgeführt, das einen anderen Picker ImagePickerlauncher.launch ("Image/*") neu gestartet hat. Wenn der Benutzer den Auswahler entlassen oder nichts ausgewählt und abgeschlossen drücken, dann isgranted = false .

Code: Select all

 val imagePickerLauncher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.GetMultipleContents(),
onResult = { uris: List ->
// handle images.
}
)
Ich habe versucht, die Gerätebibliothek zu befolgen. Gibt es eine Möglichkeit, nur 2 Optionen zu präsentieren [/b] oder , um dies anmutig zu bewältigen ? Es scheint, dass die begrenzte Zugriffsoption einen schrecklichen Fluss verursacht. Es ist nicht klar, wann die Gerätebibliothek < /em> abfragen soll.

Code: Select all

      val parsedUri = imageUri.toUri() // Using androidx.core.net.toUri
var tempFile: File? = null

try {
// Use androidContext which is now the correctly typed Android Context
tempFile = File.createTempFile("exif_image_", ".jpg", androidContext.cacheDir)
AppLogger.d(tag, "Created temp file: ${tempFile.absolutePath}")

androidContext.contentResolver.openInputStream(parsedUri)?.use { inputStream ->
FileOutputStream(tempFile).use { outputStream ->
inputStream.copyTo(outputStream)
AppLogger.d(tag, "Copied content to temp file: ${tempFile.absolutePath}")
}
} ?: run {
AppLogger.e(
tag,
"Failed to open input stream for URI: $imageUri. " +
"Temp file: ${tempFile.absolutePath}"
)
return@withContext null // Early exit; finally will clean up tempFile
}

val exifInterface =
ExifInterface(tempFile.absolutePath) // Using androidx.exifinterface.media.ExifInterface
val latLong = exifInterface.latLong

if (latLong == null || (latLong.size < 2) || (latLong[0] == 0.0 && latLong[1] == 0.0)) {
AppLogger.d(tag, "No valid LatLong found in EXIF data for ${tempFile.absolutePath}")
return@withContext null
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post