Paylaşılan veri kümelerine erişme

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);
    }
}