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ğ üzerinden hem de veri yedekliliğini azaltmaya yardımcı olur yer alır.
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 blob'larıyla katkıda bulunduğunda, aşağıdaki yöntemlerden birini çağırarak erişime sahip olması gerekir:
- 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
allowPublicAccess()
numaralı telefonu arayın.
Paylaşılan veri blob'larına erişme
Sistem, her paylaşılan veri blobunu bir
BlobHandle
nesnesini tanımlayın. Her bir BlobHandle
örneği
kriptografik olarak güvenli bir karma ve
veri kümesiyle eşleştirilir.
Paylaşılan veri bloblarına erişmek için sunucudan tanımlayıcı ayrıntıları indirin. Kullanım 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 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); } }