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