با شروع راه اندازی سیستم Android 11 (API level 30) مجموعه داده های بزرگی را ذخیره کرده است که ممکن است چندین برنامه برای استفاده موارد مانند یادگیری ماشین و پخش رسانه به آنها دسترسی داشته باشد. این قابلیت به کاهش فراوانی داده ها، هم از طریق شبکه و هم از طریق دیسک کمک می کند.
وقتی برنامه شما به دسترسی یک مجموعه داده بزرگ مشترک نیاز دارد، قبل از تعیین اینکه آیا نسخه جدید نصب شده قابلیت پشتیبانی را دارد یا نه، ابتدا می تواند به دنبال این مجموعه داده های ذخیره شده، به نام باشید. برنامه ها با استفاده از API ها در BlobStoreManager می توانند به این قابلیت مجموعه داده های اشتراک گذاری شده دسترسی پیدا کنند.
این سیستم shared data blobs را کنترل کرده و برنامه هایی را که می توانند به آنها دسترسی داشته باشند کنترل می کند. وقتی برنامه شما با data blobs همکاری می کند، می توانید با فراخوانی یکی از روش های زیر مشخص کنید که به کدام برنامه های دیگر باید دسترسی داشته باشند:
- برای دسترسی به مجموعه خاصی از برنامه ها در یک دستگاه، نام بسته های این برنامه ها را به allowPackageAccess () منتقل کنید.
- برای اجازه دادن به برنامه هایی که گواهینامه های آنها با استفاده از همان کلید مورد استفاده برای برنامه شما امضا شده است – مانند مجموعه برنامه ای که مدیریت می کنید -کدSameSignatureAccess () فراخوانی کنید.
- برای اعطای دسترسی به همه برنامه های موجود در دستگاه، allowPublicAccess () فراخوانی کنید.
Access shared data blobs
این سیستم با استفاده از ابزار BlobHandle هر blob داده مشترک را نشان می دهد. هر نمونه از BlobHandle حاوی یک هش با رمزنگاری امن و برخی از جزئیات شناسایی مجموعه داده است.
برای دسترسی به blobهای داده مشترک، جزئیات شناسایی را از سرور بارگیری کنید. با استفاده از این جزئیات، بررسی کنید که آیا مجموعه داده از قبل در سیستم موجود بوده است.
مرحله بعدی به در دسترس بودن داده بستگی دارد.
- مجموعه داده موجود است.
اگر مجموعه داده از قبل در دستگاه موجود است، همانطور که در قطعه کد زیر نشان داده شده است، از سیستم به آن دسترسی پیدا کنید:
val blobStoreManager = getSystemService(Context.BLOB_STORE_SERVICE) as BlobStoreManager val blobHandle = BlobHandle.createWithSha256(sha256DigestBytes, "Sample photos", System.currentTimeMillis() + TimeUnit.DAYS.toMillis(1), "photoTrainingDataset") try { val input = ParcelFileDescriptor.AutoCloseInputStream( blobStoreManager.openBlob(blobHandle)) useDataset(input) }
|
Kotlin |
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); } }
|
Java |
- مجموعه داده در دسترس نیست
اگر مجموعه داده در دسترس نیست، همانطور که در قطعه کد زیر نشان داده شده است ، آن را از سرور بارگیری کرده و به سیستم وارد کنید:
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) } } }
|
Kotlin |
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); } }
|
Java |