23- اشتراک گذاری داده های ساده + ارسال یک داده ساده به سایر برنامه ها
آدرس اصلی مطالب:
http://developer.android.com/training/sharing/send.html
Sharing Simple Data
اشتراک گذاری ساده ی داده
یکی از بزرگترین نکتهها در مورد برنامههای آندروید توانایی آنها در برقراری ارتباط و ترکیب شدن با یکدیگر هست.
چرا یک فعالیت یا یک دیتا که هسته ی برنامه ی شما نیست را دوباره ایجاد کنید در حالی این فعالیت قبلاً توسط برنامههای دیگر ایجاد شده و شما میتونید به طور اشتراکی از اون ها استفاده کنید.
این کلاس با استفاده از ابزارهای واسط Intent و شی ActionProVider یک سری روشهای متداول برای ارسال و دریافت دیتایی ساده بین برنامهها را پوشش میدهد.
Sending Simple Data to Other Apps
ارسال یک دیتای ساده به دیگر برنامهها
وقتی شما قصد انجام عملی را دارید، خود باید آن را راه اندازی کنید.
آندروید تعدادی عمل شامل ACTION_SEND «که همانطور که از اسمش پیداست، انقال از یک activity به دیگری و حتی در طول یک پراسس را تضمین میکند» را فراهم کرده است.
تمام کاری که شما باید برای انتقال داده بین activity ها انجام بدهید، ۲ عمل است :
۱- مشخص کردن داده
۲- نوع داده
سیستم خودش گیرنده ی مناسب این داده را تشخیص داده و اون رو به کاربر نشون میده.
همچنین شما میتوانید با اعمال در فایل مانیفست مشخص کنید که activity شما چه نوع دادهای را از دیگر برنامهها دریافت میکند
دریافت و ارسال داده بین برنامهها به وسیله ی intents ها یک روش معمول است و در انتشار مجتمع محتوی استفاده میشود.intents ها اجازه میدهند که کاربران به سرعت و آسانی اطلاعات خود را منتشر کنند و برنامههای مورد علاقه ی خود را بسازند.
** بهترین راه برای اضافه کردن یک عمل به نوار اعمال استفاده از ShareActionProvider میباشد که در API level 14 در دسترس هست.
ارسال محتوی متنی :
راحت ترین، سریعترین و متداول ترین روش استفاده از ACTION_SEND ارسال محتوی متنی ساده بین یک activity و دیگری است.
به عنوان مثال مرورگر وب میتواند آدرس صفحهای که در حال حاضر مشاهده میکند را با دیگر برنامهها به اشتراک بگذارد. این عمل در اشتراک گذاری آدرس سایت با دوستان در سرویس های شبکههای اجتماعی و ایمیل کاربرد دارد. کد زیر بخشی از پیادهسازی این عمل است :
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
sendIntent.setType("text/plain");
startActivity(sendIntent);
اگر یک برنامه با کد شناسایی ACTION_SEND نصب باشه، آندروید اون رو اجرا میکنه.
اگر بیش از یک برنامه با این کد وجود داشته باشه، آندروید از کاربر سئوال میپرسد که میخواهد از کدام ابزار استفاده بکند.
به هر حال اگر شما Intent.createChooser رو فراخوندید و شی intent رو به اون پاس دادید، شماره ی ورژن intent رو نشون میده و همیشه منوی انتخاب برنامه رو نشان میدهد که این چند خاصیت دارد :
۱- حتی اگر کاربر به طور پیشفرض برنامهای رو برای این انتخاب کرده باشه، منوی انتخاب برنامه همواره نشان داده میشود.
۲- اگر برنامهای مناسب با این intent پیدا نشد، آندروید یک پیغام سیستمی نشان میدهد.
۳- شما میتوانید برای این منو یک عنوان انتخاب کنید.
این هم از کد بروز شده :
Intent sendIntent = new Intent();
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_EMAIL ،EXTRA_CC ، EXTRA_BCC ، EXTRA_SUBJECT استفاده کنید. اگر برنامه ی دریافتکننده برای استفاده از اینها طراحی نشده باشد، اینها را در نظر نمیگیرد.
ارسال محتوی باینری :
داده ی باینری از طریق ACTION_SEND منتشر میشود. عمل به همراه تنظیماتی که نوع مناسب برای MIME
وقرار دادن URI در داده با نام اضافی EXTRA_STREAM. به طور معمول این روش برای انتشار عکس به کار میرود ولی به طور کل برای انتشار هر نوع داده و محتوی باینری استفاده میشود.
Intent shareIntent = new Intent();
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 استفاده کنید، اما این مدل فقط فعالیتهایی را که توانایی هندل کردن جریان های دادهای عمومی را قبول میکند.
۲- برنامه ی دریافتکننده ی داده برای دسترسی به داده ی در uri نیاز به مجوز دارد. راههای پیشنهادی برای انجام این کار این است :
الف-ذخیره ی داده در ContentProvider. از داشتن مجوز توسط برنامههای دیگر برای دسترسی به Provider مطمئن باشید. بهترین روش و مکانیسم برای فراهم کردن دسترسی استفاده از per-URI permissions است که به صورت موقتی میباشد و فقط مجوز دریافت را برای برنامهها تأمین میکنند. راحت ترین روش برای ساخت ContentProvider به این روش ، استفاده از کلاسهای کمک کننده ی FileProvider است.
ب- استفاده از MediaStore.
در اصل MediaStore در کارهای ویدئویی،صوتی، و عکسهای انواع MIME استفاده میشود.
به هر حال افراد تازه کار میتوانند در Android 3.3 دادههای غیر مدیایی هم ذخیره بکنند.
فایلهای میتوانند با استفاده از ScanFile به MediaStore بعد از اینکه ساختار URI به صورت //:content و مناسب با انتشار تنظیم شد و به دوباره خوانی onScanCompleted پاس داده شد.
* توجه کنید که وقتی دادهای به MediaStore اضافه شد. داده از طریق هر برنامهای قابل دسترسی هست.
ارسال بخشهای دادهای به صورت تکه تکه:
برای ارسال دادهها به صورت تکهتکه از ACTION_SEND_MULTIPLE به همراه URI هایی که به دادهها اشاره میکند استفاده میکنیم.
نوع MIME بسته به ترکیب محتوایی که شما منتشر میکنید متغیر است.برای مثال اگر شما ۳ تا عکس JPEG منتشر کنید، نوع همچنان image/jpeg خواهد بود. برای ترکیب های پیچیدهتری از عکسها این نوع به */image تغییر خواهد کرد تا هر activity بتواند هر نوع عکسی را هندل کند. شما فقط در هنگامی که از رنج دادهای باز و زیادی استفاده میکنید مجاز هستید تا از */* استفاده کنید.
همانطور که قبلاً گفته شد، دریافت نوع دادهای بسته به برنامه ی دریافتکننده داده دارد تا بتواند آن را تفسیر و پردازش بکند.
این هم یک نمونه :
ArrayList<Uri> imageUris = new ArrayList<Uri>();
imageUris.add(imageUri1); // Add your image URIs here
imageUris.add(imageUri2);
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE);
shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);
shareIntent.setType("image/*");
startActivity(Intent.createChooser(shareIntent, "Share images to.."));
- ۹۳/۰۳/۰۳