سبد (0)

اشتراک فایل ها-درخواست فایل

آن چه در این آموزش فرا می گیرید:

  1. ارسال درخواست برای یک فایل
  2. دستیابی به فایل درخواست شده

مواردی که باید مطالعه کرده باشید:

  • Intent ها و فیلترهای Intent

اشتراک فایل ها-درخواست فایل به اشتراک گذاشته شده

وقتی برنامه ای می خواهد به فایل هایی که توسط دیگر برنامه ها به اشتراک گذاشته شده است دسترسی پیدا کند، آن برنامه معمولاً یک درخواست به برنامه ای که فایل را به اشتراک گذاشته است (سرویس دهنده) ارسال می کند. در اکثر حالات، درخواست صادر شده یک Activity در برنامه ی سرور راه اندازی می کند که فایل هایی که می تواند به اشتراک گذاشته شود را لیست می کند. کاربر فایلی را انتخاب می کند، بعد از آن برنامه سرویس دهنده URI مربوط به آن فایل را برای برنامه ی درخواست کننده بر می گرداند.

در این آموزش برنامه نویسی اندروید نشان می دهیم که چگونه یک برنامه ی کلاینت فایلی را از برنامه ی سرویس دهنده درخواست می کند، سپس URI مربوط به فایل را دریافت می کند، و در نهایت فایل را با استفاده از URI باز می کند.


ارسال درخواست برای یک فایل

برنامه کلاینت برای درخواست یک فایل از برنامه ی سرویس دهنده، متد ()startActivityForResult را به همراه یک Intent که حاوی action مورد نظر مانند ACTION_PICK و نوع MIME فایل را ارسال می کند.

به عنوان مثال، تکه کد زیر نشان می دهد که چگونه Intent به برنامه سرویس دهنده ارسال می شود و Activity که در توضیح داده شد راه اندازی می شود:

مثال ارسال درخواست فایل

 
public class MainActivity extends Activity{
private Intent mRequestFileIntent;
private ParcelFileDescriptor mInputPFD;
...
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRequestFileIntent =new Intent(Intent.ACTION_PICK);
mRequestFileIntent.setType("image/jpg");
...
}
...
protected void requestFile(){
/**
* وقتی کاربر فایلی را درخواست می کند، یک
* Intent
*برای برنامه ی سرویس دهنده ارسال می کند

*/
startActivityForResult(mRequestFileIntent,0);
...
}
...
}

دستیابی به فایل درخواست شده

برنامه ی سرویس دهنده، URI مربوط به فایل را با استفاده از Intent به کاربر بر می گرداند. این Intent در متد بازنویسی شده ی ()onActivityResult در برنامه ی کلاینت دریافت می شود. هنگامی که برنماه ی کلاینت URI را دریافت کرد، می تواند به فایل از طریق تولید FileDescriptor دسترسی پیدا کند.

امنیت فایل در این مرحله حفظ می شود زیرا URI در حقیقت تنها چیزی است که برنامه ی کلاینت دریافت می کند. از آنجایی که URI حاوی مسیر دایرکتوی نیست، برنامه ی کلاینت نمی تواند هیچ فایل دیگری از برنامه ی سرویس دهنده را باز کند. فقط کلاینت می تواند به فایل مورد نظر دسترسی پیدا کند و تنها برای مجوزی که برنامه ی سرویس دهنده برای او صادر کرده است. مجوزها موقتی هستند، بنابراین هنگامی که برنامه ی کلاینت به وضعیت finished رفت، فایل دیگر توسط هیچ برنامه ای قابل دسترس نیست.

تکه کد زیر نشان می دهد که چگونه برنامه ی کلاینت Intent دریافتی را مدیریت می کند و چگونه FileDescriptor را با استفاده از URI دریافت می کند:

 

    /*
* هنگامی که اکتیویتی برنامه ی میزبان نتایج را تنظیم می کند و متد
* finish()
* را فراخوانی می کند این متد اجرا می شود. اینتنت برگشتی حاوی
* یو آر آی مربوط به فایل انتخابی می باشد. کد نتیجه مشخص می کند که
* انتخاب فایل کار می کند یا نه
*/
@Override
public void onActivityResult(int requestCode,int resultCode,
Intent returnIntent){
// If the selection didn't work
if(resultCode != RESULT_OK){
//خروج بدون انجام هیچ کار دیگری
return;
}else{
// به دست آوردن یو آر آی فایل
Uri returnUri = returnIntent.getData();
/*
*فایل را با استفاده از یو آر آی با سطح دسترسی خواندن باز می کند
* اگر فایل پیدا نشد خطایی را ثبت می کند و باز می گردد
*
*/
try{

mInputPFD = getContentResolver().openFileDescriptor(returnUri,"r");
}catch(FileNotFoundException e){
e.printStackTrace();
Log.e("MainActivity","File not found.");
return;
}
//استفاده از دیسکریپتور فایل
FileDescriptor fd = mInputPFD.getFileDescriptor();
...
}
}
 

متد ()openFileDescriptor یک ParcelFileDescriptor برای فایل بر می گرداند. با استفاده از این شیء برنامه ی کلاینت شیء FileDescriptor را دریافت می کند که به وسیله ی آن می تواند فایل را بخواند.

تمامی محصولات و خدمات این وبسایت، حسب مورد دارای مجوزهای لازم از مراجع مربوطه می‌باشند و فعالیت‌های این سایت تابع قوانین و مقررات جمهوری اسلامی ایران است.
logo-samandehi مجوز نشر دیجیتال از وزرات فرهنگ و ارشاد اسلامی پرداخت آنلاین -  بانک ملت معرفی بیاموز در شبکه سه