Android 11'den (API düzeyi 30) itibaren sistem, makine öğrenimi ve medya oynatma gibi kullanım alanları için birden fazla uygulamanın erişebileceği büyük veri kümelerini önbelleğe alır. Bu işlev, hem ağ üzerinde hem de diskte veri yedekliliğinin azaltılmasına yardımcı olur.
Uygulamanız paylaşılan büyük bir veri kümesine erişmesi gerektiğinde, yeni bir kopya indirip indirmeyeceğini belirlemeden önce ilk olarak paylaşılan veri blob'ları olarak adlandırılan bu önbelleğe alınmış veri kümelerini arayabilir. Uygulamalar, BlobStoreManager
'teki API'leri kullanarak bu paylaşılan veri kümeleri işlevlerine erişebilir.
Sistem, paylaşılan veri bloblarını korur ve hangi uygulamaların bunlara erişebileceğini kontrol eder. Uygulamanız veri blobu katkısında bulunduğunda, aşağıdaki yöntemlerden birini çağırarak diğer hangi uygulamaların erişmesi gerektiğini belirtebilirsiniz:
- Bir cihazda belirli bir uygulama grubuna erişim izni vermek için bu uygulamaların paket adlarını
allowPackageAccess()
'e iletin. - Yalnızca uygulamanız için kullanılanla aynı anahtar kullanılarak sertifikaları imzalanmış uygulamalara (ör. yönettiğiniz bir uygulama paketi) izin vermek için
allowSameSignatureAccess()
çağrısı yapın. - Bir cihazdaki tüm uygulamalara erişim izni vermek için
allowPublicAccess()
numaralı telefonu arayın.
Paylaşılan veri blob'larına erişme
Sistem, paylaşılan her veri blobunu bir BlobHandle
nesnesi kullanarak temsil eder. Her BlobHandle
örneği, kriptografik olarak güvenli bir karma ve veri kümesi için bazı tanımlayıcı ayrıntılar içerir.
Paylaşılan veri bloblarına erişmek için sunucudan tanımlayıcı ayrıntıları indirin. Bu ayrıntıları kullanarak veri kümesinin sistemde zaten mevcut olup olmadığını kontrol edin.
Sonraki adım, verilerin kullanılabilir olup olmadığına bağlıdır.
Veri kümesi mevcut
Veri kümesi cihazda zaten mevcutsa aşağıdaki kod snippet'inde gösterildiği gibi sistemden erişin:
Kotlin
val blobStoreManager = getSystemService(Context.BLOB_STORE_SERVICE) as BlobStoreManager // The label "Sample photos" is visible to the user. val blobHandle = BlobHandle.createWithSha256(sha256DigestBytes, "Sample photos", System.currentTimeMillis() + TimeUnit.DAYS.toMillis(1), "photoTrainingDataset") try { val input = ParcelFileDescriptor.AutoCloseInputStream( blobStoreManager.openBlob(blobHandle)) useDataset(input) }
Java
BlobStoreManager blobStoreManager = ((BlobStoreManager) getSystemService(Context.BLOB_STORE_SERVICE)); if (blobStoreManager != null) { // The label "Sample photos" is visible to the user. BlobHandle blobHandle = BlobHandle.createWithSha256( sha256DigestBytes, "Sample photos", System.currentTimeMillis() + TimeUnit.DAYS.toMillis(1), "photoTrainingDataset"); try (InputStream input = new ParcelFileDescriptor.AutoCloseInputStream( blobStoreManager.openBlob(blobHandle))) { useDataset(input); } }
Veri kümesi kullanılamıyor
Veri kümesi mevcut değilse sunucudan indirin ve aşağıdaki kod snippet'inde gösterildiği gibi sisteme katkıda bulunun:
Kotlin
val sessionId = blobStoreManager.createSession(blobHandle) try { val session = blobStoreManager.openSession(sessionId) try { // For this example, write 200 MiB at the beginning of the file. val output = ParcelFileDescriptor.AutoCloseOutputStream( session.openWrite(0, 1024 * 1024 * 200)) writeDataset(output) session.apply { allowSameSignatureAccess() allowPackageAccess(your-app-package, app-certificate) allowPackageAccess(some-other-app-package, app-certificate) commit(mainExecutor, callback) } } }
Java
long sessionId = blobStoreManager.createSession(blobHandle); try (BlobStoreManager.Session session = blobStoreManager.openSession(sessionId)) { // For this example, write 200 MiB at the beginning of the file. try (OutputStream output = new ParcelFileDescriptor.AutoCloseOutputStream( session.openWrite(0, 1024 * 1024 * 200))) writeDataset(output); session.allowSameSignatureAccess(); session.allowPackageAccess(your-app-package, app-certificate); session.allowPackageAccess(some-other-app-package, app-certificate); session.commit(getMainExecutor(), callback); } }