اشتراک فایل ها-پیکربندی
آن چه در این آموزش فرا می گیرید:
مواردی که باید مطالعه کرده باشید:
- گزینه های به اشتراک گذاری
- ذخیره سازی فایل
آموزش اندروید - پیکربندی به اشتراک گذاری فایل
برای اینکه به صورت امن فایلی توسط برنامه ی شما به دیگر برنامه ها ارائه شود، می بایست برنامه را جوری پیکربندی کرد که یک handle امن برای فایل فراهم کند. این handle در قالب یک URI می باشد. کامپوننت FileProvider در اندروید، بر اساس خصوصیت هایی که شما در XML مشخص می کنید، URIی را برای فایل ها فراهم می کند. در این آموزش اندروید به شما نحوه پیاده سازی پیش فرض FileProvider را در برنامه های اندروید نشان می دهیم. همچنین نشان می دهیم که چگونه فایل هایی که می خواهید به دیگر برنامه ها ارائه دهید را مشخص کنید.
مشخص کردن FileProvider
برای اینکه FileProvider را در برنامه تعریف کنیم می بایست داخل فایل منیفست یک ورودی را مشخص کنیم. این ورودی در حقیقت مجوز تولید URI را مشخص می کند. این ورودی همچنین دایرکتوری هایی که می توانند به اشتراک گذاشته شوند مشخص می شود.
تکه کد زیر نشان می دهد که چگونه به فایل منیفست عنصر <provider> را اضافه کنیم. این عنصر کلاس FileProvider، مجوزهای لازم و نام فایل XML را مشخص می کند:
افزودن عنصر provider به فایل منیفست
package="com.example.myapp">
<application
...>
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.example.myapp.fileprovider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths"/>
</provider>
...
</application>
</manifest>
در این مثال، خصوصیت android:authorities مجوزهای URI را مشخص می کند. مجوز لازم در این مثال برنامه نویسی اندروید عبارت است از com.example.myapp.fileprovider. برای برنامه های خودتان این مقدار از ترکیب نام پکیج (android:pakage) با رشته ی fileprovider مشخص می شود.
عنصر <meta-data> داخل <provider> به یک فایل XML اشاره می کند که دایرکتوری که به اشتراک گذاشته شده است را مشخص می کند. خصوصیت android:resource نام و مسیر فایل را مشخص می کند البته بدون اینکه پسوند xml. ذکر شود. محتوای این فایل در قسمت بعدی توضیح داده شده است.
مشخص کردن دایرکتوری هایی که می خواهیم به اشتراک بگذاریم
هنگامی که FileProvider را به منیفست برنامه ی خود اضافه کردید، لازم است دایرکتوری هایی را که داخل آن ها فایل هایی که می خواهید به اشتراک بگذارید قرار دارند مشخص کنید. برای انجام این کار، با ایجاد فایل filepaths.xml در زیر دایرکتوری res/xml از پروژه ی تان مراحل را شروع کنید. در این فایل، با اضافه کردن عنصر XML در هر دایرکتوری، دایرکتوری های مورد نظر را مشخص کنید. تکه کد زیر نمونه ای از محتوای داخل فایل res/xml/filepath.xml را نشان می دهد.
مشخص کردن مسیر دایرکتوری ها
<paths>
<files-path path="images/" name="myimages"/>
</paths>
در این مثال تگ <files-path> دایرکتوری های داخل دایرکتوری files حافظه ی داخلی برنامه ی شما را به اشتراک می گذارد. خصوصیت path دایرکتوری image داخل دایرکتوری files را به اشتراک می گذارد. خصوصیت name به FileProvider می گوید که برای فایل های داخل دایرکتوری files/images یک سگمنت با عنوان myimages به مسیر اضافه کند.
عنصر <paths> می تواند چند عنصر فرزند داشته باشد که هر کدام از آن ها دایرکتوری متفاوتی را به اشتراک می گذارد. می توان علاوه بر عنصر <files-path> عنصر <external-path> که دایرکتوری های داخل حافظه ی داخلی را به اشتراک می گذارد و عنصر <cache-path> که دایرکتوری های داخل عنصر دایرکتوری کش داخلی را به اشتراک می گذارد به عنوان فرزند عنصر <path> مشخص کنیم.
توجه: استفاده از فایل XML تنها روشی است که می توان به وسیله ی آن دایرکتوری هایی که می خواهیم به اشتراک بگذاریم مشخص کنیم. این کار از طریق برنامه نویسی اندروید و داخل کدهای اندروید قابل انجام نیست. |
تا الان FileProvider جوری تعریف شده است که URI را برای فایل های داخل دایرکتوری files حافظه ی داخلی و زیر دایرکتوری های آن تولید می کند. هنگامی که برنامه ی شما یک URI برای یک فایل تولید کرد، این URI حاوی موارد زیر می باشد:
- مجوز مشخص شده در عنصر provider
- مسیر دایرکتوری myimages
- و نام فایل
برای مثال اگر بر اساس تکه کدهای این آموزش یک FileProvider تعریف کنید، سپس درخواست URI برای فایل default_image.jpg داشته باشیم، FileProvider برای این درخواست URI زیر را بر می گرداند:
نتیجه URI درخواستی
content://com.example.myapp.fileprovider/myimages/default_image.jpg
- نوشته شده توسط مظاهر نصوحی
- بازدید: 7334