প্রোগ্রামেমেটিকভাবে পরীক্ষা করুন যদি অ্যান্ড্রয়েড 10+ তে লেগ্যাসির বাহ্যিক স্টোরেজ অ্যাক্সেস অক্ষম থাকে


12

একটি সাধারণ এপিআই কল রয়েছে যা আমাকে বলবে যে অ্যান্ড্রয়েড 10 বা তার পরে চলমান কোনও অ্যাপ্লিকেশনটিকে স্কোপড স্টোরেজ অ্যাক্সেস ব্যবহার করা উচিত, তা হল, যদি সাধারণ ফাইল অ্যাক্সেস, ওরফে "লিগ্যাসি এক্সটার্নাল স্টোরেজ" অক্ষম করা থাকে? দ্রষ্টব্য যে AndroidManifest.xML এ বিভাগটি অধ্যায় ঘোষণা করলেও:

  android:requestLegacyExternalStorage="true"

ভবিষ্যতে গুগল নীতি পরিবর্তনের কারণে ফাইল অ্যাক্সেসটিকে এখনও অস্বীকার করা যেতে পারে, সুতরাং এই মানটি পরীক্ষা করা নিরর্থক। আমি খুঁজে পেলাম একমাত্র উপায়, বাহ্যিক স্টোরেজ রুট ডিরেক্টরিটি পাঠযোগ্য কিনা তা পরীক্ষা করা, তবে তার জন্য অ্যাপ্লিকেশনটিকে প্রথমে স্টোরেজ অনুমতি চাইবে, যা উত্তরাধিকারী সঞ্চয় স্থানটি অক্ষম থাকলে, অন্য যে কোনও কিছুর জন্য অকেজো।

public static boolean mustUseScopedStorage() {
    // Impractical must first ask for useless Storage permission...
    File exSD = Environment.getExternalStorageDirectory();
    return !exSD.canRead(); // this test works only if Storage permission was granted.
}

আমি মনে করি এটি একবার সনাক্ত করার জন্য আমি একটি নতুন এপিআই দেখেছি, তবে আর নিবন্ধটি আর খুঁজে পাচ্ছি না ...


an app running on Android 10 or later must use Scoped Storage access? আপনি এর সাথে কী বোঝাতে চেয়েছেন? কোন fuctions আপনার মনে আছে? আমি জানি যে দৃষ্টান্ত সংগ্রহস্থল ভলিউম এবং সংগ্রহস্থল ম্যানেজার যে এন জন্য আনা হয়েছে ইতিমধ্যে প্র: জন্য অসমর্থিত জন্য
blackapps

আমি বলতে চাইছি নিয়মিত জাভা ফাইল অ্যাক্সেস সিস্টেম দ্বারা অ্যাপ্লিকেশনকে দেওয়া স্যান্ডবক্সের বাইরে, বা সি / সি ++ জেএনআই কোড ফোপেন ("ফাইলের নাম.সেক্সট", মোড) এ; যদি সিস্টেম দ্বারা নির্ধারিত অ্যাপ্লিকেশন ডিরেক্টরিটির বাইরে ফাইল পাথ কাজ করে (অ্যাক্সেস অস্বীকার করা) কাজ করবে না। ঠিক আছে, এটি এখন অ্যান্ড্রয়েড 10 এ কাজ করবে, যদি আপনি অ্যান্ড্রয়েড ব্যবহার করেন: ম্যানিফেস্টে অনুরোধলিগেসি এক্সটার্নাল স্টোরেজ = "সত্য", তবে এটি একটি অস্থায়ী সমাধান এবং পরের বছর সম্পূর্ণ অক্ষম হয়ে যেতে পারে। আরও পড়ুন যেমন অ্যান্ড্রয়েডেন্ট্রাল
স্টোরেজ-

এমনকি সেই নিবন্ধে এটি স্কোপড স্টোরেজ কী হবে তা পরিষ্কার নয়।

@ ব্ল্যাক্যাপস, সম্ভবত এই নিবন্ধটি এটি আরও ভালভাবে ব্যাখ্যা করেছে: ডেভেলপার.অ্যান্ড্রয়েড
ট্রেনিং

ঠিক আছে. কেবলমাত্র অ্যাপ্লিকেশনগুলির ব্যক্তিগত ডিরেক্টরিগুলিতে সীমাবদ্ধ অ্যাক্সেস।
9:59

উত্তর:


8

আপনি এই দুটি পদ্ধতি ব্যবহার করতে পারেন android.os.Environment:

  • isExternalStorageLegacy(File path)

    প্রদত্ত পথে ভাগ করা / বাহ্যিক স্টোরেজ মিডিয়াটি উত্তরাধিকারের দৃষ্টিভঙ্গি যা অ্যাপ্লিকেশনটির মালিকানাধীন ফাইলগুলি অন্তর্ভুক্ত করে কিনা তা ফিরিয়ে দেয়।

  • isExternalStorageLegacy()

    প্রাথমিক ভাগ করা / বহিরাগত স্টোরেজ মিডিয়াটি কোনও লিগ্যাসি ভিউ যা অ্যাপ্লিকেশনটির মালিকানাধীন ফাইলগুলি অন্তর্ভুক্ত করে না তা ফিরিয়ে দেয়।

এই মানটি requestLegacyExternalStorageঅ্যাপ্লিকেশনটির ম্যানিফেস্টে অনুরোধ করা মানের থেকে আলাদা হতে পারে , যেহেতু কোনও অ্যাপ্লিকেশনটি কখন ইনস্টল করা হয়েছিল তার ভিত্তিতে তার উত্তরাধিকারের রাজ্যের উত্তরাধিকারী হতে পারে।

নন-লিগ্যাসি অ্যাপ্লিকেশনগুলির মাধ্যমে অন্যান্য অ্যাপ্লিকেশনগুলির সাথে সম্পর্কিত মিডিয়া আবিষ্কার এবং পড়া চালিয়ে যেতে পারে MediaStore

যদি আপনি আবিষ্কার করেন যে আপনার লিগ্যাসি স্টোরেজে অ্যাক্সেস রয়েছে তবে ব্যক্তিগতভাবে আমি মনে করি যে কেবলমাত্র স্কোপড স্টোরেজে ডেটা স্থানান্তর করা এবং এটি ব্যবহার করা আরও ভাল কারণ লিগ্যাসি স্টোরেজ সতর্কতা ছাড়াই কাজ করা বন্ধ করে দিতে পারে।


1
আপনাকে ধন্যবাদ, জাফি, আমি ঠিক এটিই উত্তর খুঁজছিলাম is এটি নিখুঁতভাবে কাজ করে এবং "স্টোরেজ অ্যাক্সেস" জিজ্ঞাসা করার দরকার নেই।
গ্রেগকো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.