ورود

View Full Version : Intent چیست؟



a.ameri
دوشنبه 24 تیر 1392, 13:39 عصر
سلام
من در مفهوم Intent ها مشکل دارم ممنون میشم از اساتید گرامی در موردش توضیح دهند

hamyd_reza
دوشنبه 24 تیر 1392, 14:03 عصر
----------

a.ameri
دوشنبه 24 تیر 1392, 14:26 عصر
اگر درست متوجه شده باشم : Intent شی میشه که می تونه انواع مختلف داده(از یک اکتیویتی گرفته تا یه رشته) رو در خودش نگه دارد و به اکتیویتی های دیگر انتفال بده ؟

می شه بیشتر این جملتون رو توضیح بدین ( اجزای اصلی برنامه که Activityها، Serviceها و Broadcast Receiverها هستن از طریق Intent فعال میشن)؟

yasinf
سه شنبه 25 تیر 1392, 12:16 عصر
با Intent کار های مختلفی میشه انجام داد .
کار هایی مثل :

انتقال از یک اکتیویتی به اکتیویتی دیگه :

Intent i = new Intent(this, ActivityTwo.class);
startActivity(i);


ارسال یک آدرس به مرورگر :

String url = "http://barnamenevis.org/";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);


انتقال اطلاعات بین دو اکتیویتی :

Intent i = new Intent(this, ActivityTwo.class);
i.putExtra("Value1", "This value one for ActivityTwo ");
i.putExtra("Value2", "This value two ActivityTwo");
startActivity(i);


برقراری تماس :

Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:00980000000"));
startActivity(callIntent);


ارسال پیام کوتاه :

Intent sendIntent = new Intent(Intent.ACTION_VIEW);
sendIntent.putExtra("sms_body", "default content");
sendIntent.setType("vnd.android-dir/mms-sms");
startActivity(sendIntent);


ارسال ایمیل :

Intent email = new Intent(Intent.ACTION_SEND);
email.putExtra(Intent.EXTRA_EMAIL, new String[]{"youremail@yahoo.com"});
email.putExtra(Intent.EXTRA_SUBJECT, "subject");
email.putExtra(Intent.EXTRA_TEXT, "message");
email.setType("message/rfc822");
startActivity(Intent.createChooser(email, "Choose an Email client :"));


کاربرد های دیگه رو میتونید با جست و جو توی وب پیدا کنید .

mahmood75
پنج شنبه 07 اسفند 1393, 15:18 عصر
Intent ها پیام هایی هستند که به واسطه‌ی آنها از سیستم تقاضای انجام کاری را میکنید. مثلا فرض کنید میخواهید مرورگر وب اندروید، آدرس اینترنتی مد نظرتان را باز کند، یا قصد دارید به وسیله‌ی برنامه تان با شماره تلفنی تماس بگیرید یا یک Activity به خصوص اجرا شود. همه‌ی این کارها باید توسط Intent ها برای اندروید توضیح داده شوند...
در واقع Intent ها وقوع یک رویداد را به اندروید اعلام میکنند؛ با این کار تمام Activity ها و Service هایی که برای آن رویداد در سیستم ثبت شده‌اند فراخوانی میشوند.
انواع Intent : 1- Intent صریح (Explicit): برای فراخوانی سرویس یا Activity مشخص به کار میرود. در این حالت کاربر نمیتواند برای اجرای رویداد مورد نظر از Activity دلخواه خود استفاده کند، فرض کنید نرم افزار شما دارای دو Activity میباشد و قصد دارید از طریق اکتیویتی اول، اکتیویتی دوم را باز کنید، در این صورت باید از Intent صریح استفاده کنید:


1
2

Intent i = new Intent(this, Activity2.class);
startActivity(i);






یا برای اجرای یک سرویس از متد startService(intent) استفاده میکنید.
2- Intent ضمنی (Implicit): وقتی قصد دارید اندروید برای شما کاری را انجام دهد و برایتان مهم نیست که چه اکتیویتی یا سرویسی آن کار را انجام میدهد باید از Intent ضمنی استفاده کنید. در این صورت اندروید تمام اجزائی که قابلیت انجام آن کار را دارند را برای کاربر لیست میکند و کاربر جزء دلخواه خود را انتخاب میکند. برای مثال فرض کنید قصد دارید یک تصویر را برای کاربر نمایش دهید و فرقی نمیکند که چه ابزاری برای نمایش تصویر استفاده می‌شود، برای این کار به صورت ضمنی از اندروید میخواهیم که تصویر مورد نظر را نمایش دهد. در این صورت اندروید لیست تمام Acitvity هایی که به عنوان نمایش دهنده‌ی تصویر در اندروید ثبت شده اند را برای کاربر لیست میکند و تصویر توسط نرم افزار دلخواه کاربر نمایش داده میشود.


1
2
3

Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(“Address_of_image”));
i.setType(“image/*”);
startActivity(i);








Intent-filter: وقتی از طریق Intent درخواستی برای اندروید فرستاده میشود، اندروید همه‌ی نرم افزارهایی که برای انجام آن درخواست مناسب هستند را تشخیص داده و برای کاربر لیست میکند تا کاربر نرم افزار دلخواه خود را برای انجام آن درخواست انتخاب کند. در واقع اندروید به وسیله‌ی IntentFilter ها تشخیص میدهد که آیا یک نرم افزار امکان اجرای آن درخواست را دارد یا نه.
یک IntentFilter مشخص میکند که نرم افزار شما قادر است چه نوع درخواست هایی را اجرا کند. در واقع IntentFilter ، قابلیت های نرم افزار شما را تعریف میکند. اگر برای یک Acitvity یا Service ، IntentFilter تعریف نشود، آن Activity فقط به صورت صریح (Explicit Intent) قابلیت فراخوانی دارد.
برای تعریف IntentFilter دو راه وجود دارد.
1- تعریف در فایل AndroidManifest.xml: در این صورت وقتی نرم افزار نصب میشود، اندروید تمام IntentFilter هایی که تعریف کرده‌اید را ثبت میکند؛ با این کار برای پیشنهاد نرم افزار شما برای انجام درخواست کاربر، نیازی نیست که نرم افزار شما در حال اجرا باشد یا قبلا اجرا شده باشد. برای مثال در صورتی که میخواهید نرم افزار شما به عنوان مرورگر وب در اندروید ثبت شود باید این قابلیت را به صورت زیر در فایل AndroidManifest.xml ثبت نمایید:


1
2
3
4
5
6
7

<activity android:name=”.testActivity” android:label=”test”>
<intent-filter>
<action android:name=”android.intent.action.VIEW” />
<category android:name=”android.intent.category.DEFAULT”/>
<data android:schema=”http”/>
</intent-filter>
</activity>






حال وقتی کاربر یا نرم افزاری درخواست باز شدن آدرس اینترنتی را داشته باشد و به طور صریح نرم افزار مشخصی را برای این کار ذکر نکرده باشد اندروید نرم افزار شما را هم برای اجرای این درخواست به کاربر پیشنهاد میدهد.
2- استفاده از BroadCastReceiver: در صورتی که قصد دارید نرم افزارتان فقط زمانی که در حال اجراست, درخواستها را دریافت کند، باید از BroadCastReceive استفاده کنید.
روش استفاده از BroadCastReceiver را در فرصت بعدی به صورت کامل توضیح خواهیم داد.
رد و بدل کردن داده بین دو Activity یا Service با استفاده از Intent: هنگام تعریف یک Intent باید اطلاعات مربوط به آن Intent را مشخص کنیم, در واقع یک Intent دارای یک سرآیند از اطلاعات پایه ای میباشد. آن اطلاعات عبارتند از کاری که میخواهیم انجام شود (Action)، نوع (Type) و ... که برای هر نوع درخواست ممکن است اطلاعات بیشتری نیز مورد نیاز باشد. برای دریافت این داده ها نیز کافیست از متدهای getIntent().getAction() و getIntent().getType() استفاده کنید. اما غیر از این اطلاعات ضروری, ممکن است بخواهید, داده‌های بیشتر و اضافه ای را به یک Activity ارسال کنید، مثلا فرض کنید در اکتیویتی اول، لیستی از عناوین را نمایش میدهید و کاربر با انتخاب هر یک از عناوین، میتواند از اکتیویتی دوم, محتوای آن عنوان را مشاهده نماید. برای این کار لازم است که عنوان انتخاب شده به اکتیویتی دوم ارسال شود تا محتوا متناسب با آن عنوان درآن اکتیویتی نمایش داده شود. برای این کار به صورت زیر عمل میکنیم:
الف: ارسال داده از اکیتویتی اول به اکتیویتی دوم:

1
2
3

Intent intent = new Intent(this, Activity2.class);
intent.putExtra(“name”, selectedTitle);
startActivity(intent);






در واقع ما داده های اضافی را با استفاده از متد putExtra برای Intent تعریف میکنید. این داده ها به صورت کلید/مقدار میباشند. پارامتر اول تابع putExtra، کلید و از نوع String و پارامتر دوم مقدار داده میباشد که میتواند از انواع متغیرهای اصلی (int, float, String, …) باشد.
ب: دریافت داده در اکتیویتی دوم: براي دریافت داده های اضافه به روش زیر عمل میکنیم:


1
2
3
4
5
6

Bundle extras = getIntent().getExtras();
if (extras == null) {
return;
}
// get data from the key
String title = extras.getString(“name”);