سبد (0)

آموزش اندروید-ارسال به دیگر appها

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

  1. ارسال محتوای متنی
  2. ارسال محتوای باینری
  3. ارسال چندین محتوا

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

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

آموزش اندروید-ارسال داده به دیگر برنامه ها

وقتی یک intent ایجاد می کنید، می بایست Actionی که intent می خواهد راه اندازی کند را مشخص نمایید. اندروید چند Action مختلف دارد که از این دست می توان به ACTION_SEND اشاره کرد و همانگونه که می توانید حدس بزنید برای ارسال داده از یک Activity به دیگری یا حتی از یک برنامه به دیگری استفاده می شود. برای ارسال داده به activity دیگر، تنها کاری که باید انجام دهید مشخص کردن داده و نوع داده می باشد، با این کار سیستم activityهایی که می توانند Intent را دریافت کنند شناسایی می کند و آن ها را به کاربر نشان می دهد (البته اگر بیشتر از یک Activity باشد) یا اینکه Activity را راه اندازی می کند (اگر تنها یک گزینه موجود باشد). به همین ترتیب شما می توانید انواع داده ای که برنامه ی شما از دیگر Activity ها دریافت می کند را اعلام کنید. برای این کار می بایست فایل منیفست را اندکی دست کاری کنید.

دریافت و ارسال اطلاعات بین برنامه های کاربردی با استفاده از Intentها معمولاً برای به اشتراک گذاری محتوا استفاده می شود. Intentها به کاربر اجازه می دهند اطلاعات را به سرعت و به سادگی با استفاده از برنامه های کاربردی مورد نظرشان به اشتراک بگذارند.

توجه: بهترین رویش برای افزودن یک Action به اشتراک گذاری در action bar استفاده از ShareActionProvider می باشد، که در API 14 به بعد موجود است. ShareActionProvider در آموزش های آتی توضیح داده خواهد شد.


ارسال محتوای متنی

یک کاربرد آسان و رایج ACTION_SEND ارسال محتوای متنی از یک activity به Activity دیگر است.

برای مثال، برنامه ی مرورگر داخلی می تواند URL صفحاتی که به تازگی مشاهده شده اند را به صورت متنی با دیگر برنامه ها به اشتراک بگذارد.

این کار برای به اشتراک گذاری مقالات یا وبسایت ها از طریق ایمیل یا شبکه های اجتماعی مناسب است.

در زیر تکه کدی است که این نوع از به اشتراک گذاری را پیاده سازی کرده است:

کد مربوط به پیاده سازی اشتراک محتوای متنی

 
Intent sendIntent =newIntent();
sendIntent
.setAction(Intent.ACTION_SEND);
sendIntent
.putExtra(Intent.EXTRA_TEXT,"This is my text to send.");
sendIntent
.setType("text/plain");
startActivity
(sendIntent);
 

اگر برنامه ای روی سیستم نصب شده باشد که دارای فیلتری باشد که در ACTION_SEND مشخص شده است و نوع MIME آن text/plain باشد، سیستم اندروید آن را اجرا خواهد کرد.اگر بیش از یک برنامه ی کاربردی متناسب بود، سیستم پنجره ی انتخاب را نشان می دهد که به کاربر اجازه می دهد از بین برنامه ها یکی را انتخاب کند.

با این وجود، اگر شما متد ()IntentCreateChooser را فراخوانی کنید، و شی ء Intent خود را به آن ارسال کنید، نسخه ای از intent را بر می گرداند که همیشه پنجره ی انتخاب را نشان می دهد. این کار چند مزیت دارد:

  • حتی اگر کاربر از قبل یک Action پیش فرض را برای این intent مشخص کرده باشد، پنجره ی انتخاب نمایش داده می شود.
  • اگر هیچ برنامه ای با intetn منطبق نبود، اندروید یک پیغام سیستمی نمایش می دهد.
  • برای پنجره ی انتخاب می توانید یک عنوان تعیین نمایید.

در زیر کد به روز شده ملاحظه می گردد:

استفاده از IntentCreator

 
Intent sendIntent =newIntent();
sendIntent
.setAction(Intent.ACTION_SEND);
sendIntent
.putExtra(Intent.EXTRA_TEXT,"This is my text to send.");
sendIntent
.setType("text/plain");
startActivity
(Intent.createChooser(sendIntent, getResources().getText(R.string.send_to)));
 

نتیجه ی این کد در شکل بالا نمایش داده شده است.

می توانید به صورت اختیاریبرخی از استانداردهای extraها را برای intent تنظیم کنید: EXTRA_EMAIL، EXTRA_CC، EXTRA_BCC، EXTRA_SUBJECT. اگر برنامه ای که intent را دریافت می کند جوری طراحی نشده باشد که از این مقادیر استفاده نمی کند، به سادگی این مقادیر را نادیده می گیرد.

Note

توجه: برخی از برنامه های کاربردی ایمیل، از قبیل Gmail، آرایه ای از رشته ([]string) را برای extraهایی مانند EXTRA_EMAIL و EXTRA_CC انتظار دارند، بنابراین می توانید از PutExtra با آرگومان های ([]String , string)  استفاده کنید.


ارسال محتوای باینری

داده های باینری را می توان با استفاده از ترکیب کردن ACTION_SEND و نوع MIME مناسب و قرار دادن URI داخل داده ها در extraهایی با عنوان EXTRA_STREAM به اشتراک گذاشت. از این مورد معمولاً برای به اشتراک گذاشتن عکس استفاده می شود، اما می توان آن را برای هر گونه به اشتراک گذاری هر نوع محتوای باینری استفاده کرد:

 

 
Intent shareIntent =newIntent();
shareIntent
.setAction(Intent.ACTION_SEND);
shareIntent
.putExtra(Intent.EXTRA_STREAM, uriToImage);
shareIntent
.setType("image/jpeg");
startActivity
(Intent.createChooser(shareIntent, getResources().getText(R.string.send_to)));

به موارد زیر توجه فرمایید:

  • می توانید از نوع MIME "*/*" استفاده کنید، اما این نوع MIME تنها با Activityهایی که رشته داده های کلی را مدیریت می کنند منطبق می باشد.
  • برنامه ی دریافت کننده برای دسترسی به داده ای که uri به آن اشاره می کند نیاز به مجوز دارد. 

ارسال چندین نوع محتوا

برای به اشتراک گذاری چند نوع محتوا، از actionی با عنوان ACTION_SEND_MULTIPLE به همراه لیستی از URIها که به محتوا اشاره دارند استفاده کنید. نوع MIME بر اساس ترکیب محتوایی که می خواهید به اشتراک بگذارید تغییر می کند. برای مثال، اگر شما سه عدد عکس JPEG، نوع MIME i همان "image.jpeg" می باشد. برای ترکیبی از انواع عکس ها نوع MIME عبارت است از "*/image". در این حالت Activity که تمام انواع عکس را مدیریت می کند با این نوع منطبق است. تنها در زمانی که قصد دارید محدوده ی زیادی از انواع MIME را به اشتراک بگذارید از "*/*" استفاده کنید. همانگونه که قبلاً ذکر شد، بستگی به برنامه ی دریافت کننده دارد که داده های شما را تحلیل و پراسس کند. در زیر یک مثال ذکر شده است:


 
ArrayList<Uri> imageUris =newArrayList<Uri>();
imageUris
.add(imageUri1);// Add your image URIs here
imageUris
.add(imageUri2);

Intent shareIntent =newIntent();
shareIntent
.setAction(Intent.ACTION_SEND_MULTIPLE);
shareIntent
.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);
shareIntent
.setType("image/*");
startActivity
(Intent.createChooser(shareIntent,"Share images to.."));
تمامی محصولات و خدمات این وبسایت، حسب مورد دارای مجوزهای لازم از مراجع مربوطه می‌باشند و فعالیت‌های این سایت تابع قوانین و مقررات جمهوری اسلامی ایران است.
logo-samandehi مجوز نشر دیجیتال از وزرات فرهنگ و ارشاد اسلامی پرداخت آنلاین -  بانک ملت معرفی بیاموز در شبکه سه