Android 11 (API লেভেল ৩০) থেকে শুরু করে, সিস্টেম বড় ডেটাসেট ক্যাশে করে যা একাধিক অ্যাপ মেশিন লার্নিং ও মিডিয়া প্লেব্যাকের মতো ব্যবহারের ক্ষেত্রে অ্যাক্সেস করতে পারে। এই কার্যকারিতা নেটওয়ার্ক ও ডিস্ক, দুটিতেই ডেটা রিডানডেন্সি কমাতে সাহায্য করে।
আপনার অ্যাপের কোনও শেয়ার করা বড় ডেটাসেট অ্যাক্সেস করার প্রয়োজন হলে, এটি প্রথমে
এইসব ক্যাশে করা ডেটাসেট খোঁজে, যেগুলিকে শেয়ার করা ডেটা ব্লব বলা হয়, তারপরে নতুন কপি
ডাউনলোড করা হবে কিনা তা নির্ধারণ করে। BlobStoreManager-এ API ব্যবহার করে অ্যাপগুলি এই শেয়ার করা ডেটাসেট কার্যকারিতা অ্যাক্সেস করতে পারে।
সিস্টেম শেয়ার করা ডেটা ব্লব বজায় রাখে এবং কোন অ্যাপ সেগুলি অ্যাক্সেস করতে পারবে তা নিয়ন্ত্রণ করে। আপনার অ্যাপ ডেটা ব্লব কন্ট্রিবিউট করলে, আপনি নিম্নলিখিত পদ্ধতিগুলির মধ্যে একটি কল করে কোন কোন অ্যাপের অ্যাক্সেস থাকা উচিত তা নির্দেশ করতে পারেন:
- কোনও ডিভাইসে নির্দিষ্ট কিছু অ্যাপের অ্যাক্সেস দিতে, এইসব অ্যাপের প্যাকেজের নাম
allowPackageAccess()-এ পাস করুন। - শুধুমাত্র সেইসব অ্যাপকে অনুমতি দিতে, যেগুলির সার্টিফিকেট আপনার অ্যাপের জন্য ব্যবহৃত কী-এর মতো একই কী ব্যবহার করে সাইন করা হয়েছে—যেমন আপনার ম্যানেজ করা অ্যাপ স্যুট—কল করুন
allowSameSignatureAccess()। - কোনও ডিভাইসের সব অ্যাপে অ্যাক্সেস দিতে,
allowPublicAccess()কল করুন।
শেয়ার করা ডেটা ব্লব অ্যাক্সেস করুন
সিস্টেম প্রতিটি শেয়ার করা ডেটা ব্লবকে
BlobHandle অবজেক্ট হিসেবে দেখায়। BlobHandle-এর প্রতিটি ইনস্ট্যান্সে
ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত হ্যাশ এবং ডেটাসেটের জন্য কিছু শনাক্তকরণ বিবরণ
থাকে।
শেয়ার করা ডেটা ব্লব অ্যাক্সেস করতে, সার্ভার থেকে শনাক্তকরণ বিবরণ ডাউনলোড করুন। এইসব বিবরণ ব্যবহার করে, ডেটাসেটটি সিস্টেমে আগে থেকেই উপলভ্য আছে কিনা তা চেক করুন।
ডেটা উপলভ্য আছে কিনা তার উপর পরবর্তী ধাপ নির্ভর করে।
ডেটাসেট উপলভ্য
ডিভাইসে ডেটাসেট আগে থেকেই উপলভ্য থাকলে, সিস্টেম থেকে এটি অ্যাক্সেস করুন, যেমনটি নিম্নলিখিত কোড স্নিপেটে দেখানো হয়েছে:
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) }
জাভা
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); } }
ডেটাসেট উপলভ্য নেই
ডেটাসেট উপলভ্য না থাকলে, সার্ভার থেকে এটি ডাউনলোড করুন এবং সিস্টেমে কন্ট্রিবিউট করুন, যেমনটি নিম্নলিখিত কোড স্নিপেটে দেখানো হয়েছে:
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) } } }
জাভা
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); } }