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ğda hem de diskte veri fazlalığını azaltmaya yardımcı olur.
Uygulamanızın paylaşılan büyük bir veri kümesine erişmesi gerektiğinde, yeni bir kopya indirip indirmeyeceğine karar vermeden önce paylaşılan veri blob'ları olarak adlandırılan bu önbelleğe alınmış veri kümelerini arayabilir. Uygulamalar, BlobStoreManager içindeki API'leri kullanarak bu paylaşılan veri kümesi işlevlerine erişebilir.
Sistem, paylaşılan veri blob'larını korur ve hangi uygulamaların bunlara erişebileceğini kontrol eder. Uygulamanız veri blob'ları eklediğinde, aşağıdaki yöntemlerden birini çağırarak hangi uygulamaların erişime sahip olması gerektiğini belirtebilirsiniz:
- Bir cihazdaki belirli bir uygulama grubuna erişim izni vermek için bu uygulamaların paket adlarını
allowPackageAccess()yöntemine iletin. - Yalnızca sertifikaları uygulamanız için kullanılan anahtarla imzalanmış uygulamalara (ör. yönettiğiniz bir uygulama paketi) izin vermek için
allowSameSignatureAccess()yöntemini çağırın. - Bir cihazdaki tüm uygulamalara erişim izni vermek için
allowPublicAccess()yöntemini çağırın.
Paylaşılan veri blob'larına erişme
Sistem, paylaşılan her veri blob'unu bir BlobHandle nesnesi kullanarak temsil eder. Her BlobHandle örneği, kriptografik olarak güvenli bir karma ve veri kümesiyle ilgili bazı tanımlayıcı ayrıntılar içerir.
Paylaşılan veri blob'larına erişmek için sunucudan tanımlayıcı bilgileri indirin. Bu bilgileri kullanarak veri kümesinin sistemde mevcut olup olmadığını kontrol edin.
Sonraki adım, verilerin mevcut olup olmadığına bağlıdır.
Veri kümesi kullanılabilir
Veri kümesi cihazda zaten mevcutsa aşağıdaki kod snippet'inde gösterildiği gibi sisteme 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 ekleyin:
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); } }