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

অ্যান্ড্রয়েড ১১ (এপিআই লেভেল ৩০) থেকে, সিস্টেম বড় ডেটাসেটগুলোকে ক্যাশ করে রাখে, যা মেশিন লার্নিং এবং মিডিয়া প্লেব্যাকের মতো কাজের জন্য একাধিক অ্যাপ ব্যবহার করতে পারে। এই কার্যকারিতা নেটওয়ার্ক এবং ডিস্ক উভয় ক্ষেত্রেই ডেটার পুনরাবৃত্তি কমাতে সাহায্য করে।

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

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

  • ডিভাইসের নির্দিষ্ট কিছু অ্যাপে অ্যাক্সেস দেওয়ার জন্য, allowPackageAccess() ফাংশনে সেই অ্যাপগুলোর প্যাকেজ নেমগুলো পাস করুন।
  • শুধুমাত্র সেইসব অ্যাপের অনুমতি দিতে, যাদের সার্টিফিকেট আপনার অ্যাপে ব্যবহৃত একই কী (key) দিয়ে স্বাক্ষরিত—যেমন আপনার পরিচালিত কোনো অ্যাপ স্যুট— 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);
    }
}