শেয়ার করা ডেটাসেট অ্যাক্সেস করুন

অ্যান্ড্রয়েড 11 (এপিআই লেভেল 30) থেকে শুরু করে, সিস্টেমটি বড় ডেটাসেট ক্যাশ করে যা একাধিক অ্যাপ ব্যবহার করতে পারে যেমন মেশিন লার্নিং এবং মিডিয়া প্লেব্যাকের জন্য। এই কার্যকারিতা নেটওয়ার্ক এবং ডিস্ক উভয় ক্ষেত্রেই ডেটা রিডানডেন্সি কমাতে সাহায্য করে৷

যখন আপনার অ্যাপের একটি শেয়ার করা বৃহৎ ডেটাসেটে অ্যাক্সেসের প্রয়োজন হয়, তখন একটি নতুন কপি ডাউনলোড করতে হবে কিনা তা নির্ধারণ করার আগে এটি প্রথমে এই ক্যাশে করা ডেটাসেটগুলি, শেয়ার্ড ডেটা ব্লব নামে পরিচিত, সন্ধান করতে পারে৷ অ্যাপগুলি BlobStoreManager এ API ব্যবহার করে এই শেয়ার করা ডেটাসেট কার্যকারিতা অ্যাক্সেস করতে পারে।

সিস্টেমটি ভাগ করা ডেটা ব্লবগুলি বজায় রাখে এবং কোন অ্যাপগুলি সেগুলি অ্যাক্সেস করতে পারে তা নিয়ন্ত্রণ করে৷ যখন আপনার অ্যাপ্লিকেশান ডেটা ব্লবগুলিতে অবদান রাখে, তখন নিম্নলিখিত পদ্ধতিগুলির মধ্যে একটিতে কল করে আপনি নির্দেশ করতে পারেন অন্য কোন অ্যাপগুলির অ্যাক্সেস থাকা উচিত:

  • একটি ডিভাইসে অ্যাপগুলির একটি নির্দিষ্ট সেটে অ্যাক্সেস মঞ্জুর করতে, এই অ্যাপগুলির প্যাকেজ নামগুলি allowPackageAccess() এ পাস করুন৷
  • শুধুমাত্র সেই অ্যাপগুলিকে অনুমতি দিতে যেগুলির শংসাপত্রগুলি আপনার অ্যাপের জন্য ব্যবহৃত একই কী ব্যবহার করে সাইন ইন করা হয়েছে—যেমন একটি অ্যাপ স্যুট যা আপনি পরিচালনা করেন— allowSameSignatureAccess() কল করুন৷
  • একটি ডিভাইসে সমস্ত অ্যাপে অ্যাক্সেস দেওয়ার জন্য, allowPublicAccess() এ কল করুন।

শেয়ার করা ডেটা ব্লব অ্যাক্সেস করুন

সিস্টেমটি একটি BlobHandle অবজেক্ট ব্যবহার করে প্রতিটি ভাগ করা ডেটা ব্লবকে উপস্থাপন করে। BlobHandle প্রতিটি উদাহরণে একটি ক্রিপ্টোগ্রাফিকভাবে-সুরক্ষিত হ্যাশ এবং ডেটাসেটের জন্য কিছু শনাক্তকারী বিশদ রয়েছে।

ভাগ করা ডেটা ব্লব অ্যাক্সেস করতে, সার্ভার থেকে সনাক্তকারী বিবরণ ডাউনলোড করুন। এই বিবরণগুলি ব্যবহার করে, ডেটাসেটটি ইতিমধ্যে সিস্টেমে উপলব্ধ কিনা তা পরীক্ষা করুন৷

পরবর্তী ধাপ ডেটা উপলব্ধ কিনা তার উপর নির্ভর করে।

ডেটাসেট উপলব্ধ

যদি ডেটাসেটটি ইতিমধ্যেই ডিভাইসে উপলব্ধ থাকে, তাহলে সিস্টেম থেকে এটি অ্যাক্সেস করুন, যেমনটি নিম্নলিখিত কোড স্নিপেটে দেখানো হয়েছে:

কোটলিন

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

জাভা

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

ডেটাসেট অনুপলব্ধ৷

যদি ডেটাসেটটি উপলব্ধ না হয়, তাহলে এটি সার্ভার থেকে ডাউনলোড করুন এবং এটিকে সিস্টেমে অবদান রাখুন, যেমনটি নিম্নলিখিত কোড স্নিপেটে দেখানো হয়েছে:

কোটলিন

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

জাভা

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