Android 11'den (API düzeyi 30) başlayarak sistem, makine öğrenimi ve medya gibi kullanım alanları için birden fazla uygulama erişebilir. oynatmaya devam edebilirsiniz. Bu işlev, hem ağda hem de diskte veri yedekliğini azaltmaya yardımcı olur.
Uygulamanızın paylaşılan büyük bir veri kümesine erişmesi gerektiğinde,
paylaşılan veri blob'ları adı verilen bu önbelleğe alınmış veri kümelerinin
yeni bir kopya indirin. Uygulamalar, BlobStoreManager
'daki API'leri kullanarak bu ortak veri kümesi işlevlerine erişebilir.
Sistem, paylaşılan veri blob'larını korur ve hangi uygulamaların erişebileceğini kontrol eder oluşturabilirsiniz. Uygulamanız veri topakları sağladığında aşağıdaki yöntemlerden birini çağırarak hangi diğer uygulamaların erişmesi gerektiğini belirtebilirsiniz:
- Bir cihazdaki belirli bir uygulama grubuna erişim izni vermek için paket adlarını iletin
bunlardan bazılarını
allowPackageAccess()
. - Yalnızca sertifikaları kendileriyle aynı anahtar kullanılarak imzalanmış uygulamalara izin vermek için
bir uygulama paketi (ör. yönettiğiniz bir uygulama paketi) ile
allowSameSignatureAccess()
. - Bir cihazdaki tüm uygulamalara erişim izni vermek için şu numarayı arayın:
allowPublicAccess()
.
Paylaşılan veri blob'larına erişme
Sistem, her paylaşılan veri blobunu bir
BlobHandle
nesnesini tanımlayın. BlobHandle
her örneği, kriptografik olarak güvenli bir karma oluşturma işlemi ve veri kümesi için bazı tanımlayıcı ayrıntılar içerir.
Paylaşılan veri bloklarına erişmek için sunucudan kimlik bilgilerini indirin. Bu ayrıntıları kullanarak veri kümesinin sistemde mevcut olup olmadığını kontrol edin.
Bir sonraki adım, verilerin kullanılabilir olup olmadığına bağlıdır.
Veri kümesi mevcut
Veri kümesi cihazınızda zaten mevcutsa sistemden bu veri kümesine erişin. aşağıdaki kod snippet'inde gösterildiği gibidir:
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 indirip katkıda bulunun aşağıdaki kod snippet'inde gösterildiği gibi sisteme eklemeniz gerekir:
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); } }