Android 11'deActivityForResult nasıl başlatılır?
startActivityForResult()Şunun gibi bir şey yaparak uygulamama resim yüklüyorum :
val intentForLoadingImage = Intent(Intent.ACTION_GET_CONTENT)
intentForLoadingImage.type = "image/*"
if (intentForLoadingImage.resolveActivity(packageManager) != null) {
startActivityForResult(intentForLoadingImage, IMAGE_REQUEST_CODE)
}
onActivityResult()Görüntüyü bir ImageView'a yükleme mantığımı geçersiz kıldım. Tüm android sürümlerinde çalışır (uygulamamın minSdkVersion'ı 21'dir) ancak Android 11'de kesinlikle hiçbir şey yapmaz. Çünkü intentForLoadingImage.resolveActivity(packageManager)boş döndürür ve resim yükleme etkinliği başlamaz.
Yanıtlar
Gereğince ACTION_GET_CONTENTbelgeleri , gerçek bir dize olduğunu android.intent.action.GET_CONTENTve değil android.media.action.GET_CONTENT kodunuzda olması. Bu nedenle, doğru paket görünürlüğü sorgusu
<queries>
<intent>
<action android:name="android.intent.action.GET_CONTENT" />
<data android:mimeType="image/*"/>
</intent>
</queries>
Alternatif olarak, özel bir ROM'un parçası olarak Depolama Erişim Çerçevesinin (hangi işleyicileri ) devre dışı bırakıldığı ActivityNotFoundExceptionnadir durumlarda meydana gelenleri de yakalayabilirsiniz . Bu yaklaşım, paket görünürlük etiketi gerektirmez:ACTION_GET_CONTENT
val intentForLoadingImage = Intent(Intent.ACTION_GET_CONTENT)
intentForLoadingImage.type = "image/*"
try {
startActivityForResult(intentForLoadingImage, IMAGE_REQUEST_CODE)
} catch (e: ActivityNotFoundException) {
}
Android 11'de paket görünürlüğü gizlilik güncellemelerini öğrendim . Hangi diyor
Android 11, uygulamaların, kullanıcının bir cihaza yüklediği diğer uygulamaları sorgulama ve bunlarla etkileşim kurma şeklini değiştirir. Öğeyi kullanarak uygulamalar, erişebilecekleri diğer paketler kümesini tanımlayabilir. Bu öğe, sisteme hangi diğer paketlerin uygulamanıza görünür hale getirileceğini söyleyerek en az ayrıcalık ilkesini teşvik etmeye yardımcı olur ve Google Play gibi uygulama mağazalarının, uygulamanızın kullanıcılar için sağladığı gizliliği ve güvenliği değerlendirmesine yardımcı olur.
Uygulamanız Android 11 veya sonraki bir sürümünü hedefliyorsa, öğeyi uygulamanızın manifest dosyasına eklemeniz gerekebilir. Öğe içinde paketleri ada göre, niyet imzasına göre veya sağlayıcı yetkisine göre belirtebilirsiniz.
Bu yüzden, manifest dosyama aşağıdaki etiketleri ekledim:
<queries>
<intent>
<action android:name="android.intent.action.GET_CONTENT" />
<data android:mimeType="image/*"/>
</intent>
</queries>
Ve bu kadar!