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

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

যখন আপনার অ্যাপের একটি শেয়ার করা বৃহৎ ডেটাসেটে অ্যাক্সেসের প্রয়োজন হয়, তখন এটি প্রথমে এই ক্যাশ করা ডেটাসেটগুলি খুঁজে বের করতে পারে, যাকে বলা হয় শেয়ার করা ডেটা ব্লবস , তারপর একটি নতুন কপি ডাউনলোড করতে হবে কিনা তা নির্ধারণ করতে পারে। অ্যাপগুলি 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);
    }
}