با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن . و کاربرانی که دوره کامل آموزش برنامه نویسی اندروید را دنبال می کنند. Intent در اندروید یک نوع فعالیت انتراعی است که با استفاده از متد startActivity می تواند یک نوع فعالیت broadcastIntent را راه اندازی کرده و آن را به هر کدام از اجزای Broadcast Receiver ها در بخش های قبلی که به آن اشاره شده ارسال کند. همچنین (startService(Intent نیز با سرویس در حال اجرا در پس زمینه ی برنامه ارتباط برقرار می کند. برای آنایی بیشتر با Intent و فیلتر در اندروید و چگونگی استفاده از آن در ادامه ی مباحث با ما همراه باشید.
در ادامه ی مبحث Intent و فیلتر در اندروید با ساختار و تعریف Intent ، انواع آن و مثال هایی از آن آشنا خواهید شد.
برای درک بهتر عملکرد Intent به مثال زیر توجه کنید:
فرض کنید که فعالیتی دارید که باید یک سرویس ایمیل را راه اندازی کرده و با استفاده از دستگاه اندروید ایمیل ارسال شود.
برای این منظور، Activity شما یک ACTION_SEND همراه با chooser (انتخابگر) را به Android Intent Resolver ارسال می کند.
chooser مشخص می کند که کاربر می تواند نحوه ارسال اطلاعات ایمیل خود را انتخاب کند:
1 2 3 4 5 | Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:")); email.putExtra(Intent.EXTRA_EMAIL, recipients); email.putExtra(Intent.EXTRA_SUBJECT, subject.getText().toString()); email.putExtra(Intent.EXTRA_TEXT, body.getText().toString()); startActivity(Intent.createChooser(email, "Choose an email client from...")); |
دستور بالا از متد startActivity برای شروع یک فعالیت ایمیل استفاده کرده و نتیجه بصورت زیر خواهد بود:
به عنوان مثال، فرض کنید که یک فعالیت دارید که باید URL را در یک مرورگر وب بر روی دستگاه Android خود باز کند.
برای این منظور، فعالیت شما به Android Resolver Intent ارسال خواهد کرد تا آدرس داده شده را در مرورگر وب باز کند.
Resolver Intent توسط لیست فعالیت ها تجزیه می شود و فعالیتی که بهترین نتیجه را برای شما بدهد را انتخاب می کند.
Resolver Intent سپس صفحه وب شما را به مرورگر وب منتقل می کند و فعالیت مرورگر وب را آغاز می کند.
1 2 3 4 | String q = "PVLEARN"; Intent intent = new Intent(Intent.ACTION_WEB_SEARCH ); intent.putExtra(SearchManager.QUERY, q); startActivity(intent); |
مثال فوق PVLEARN را در موتور جستجوی اندروید جستجو کرده و نتیجه ی فعالیت PVLEARN را بازمی گرداند.
متدهای مختلفی برای ارائه ی Intent به یک فعالیت ، سرویس و یا broadcast receiver وجود دارد:
ردیف | متد و توضیحات مربوطه |
---|---|
۱ | Context.startActivity() آبجکت Intent به این متد برای راه اندازی فعالیت جدید یا اجرای هدفی در فعالیت فعلی ارسال می شود.
|
۲ | Context.startService() آبجکت Intent به این متد برای شروع خدمات و یا ارائه ی دستورالعمل جدید به سرویس منتقل می شود.
|
۳ | Context.sendBroadcast() آبجکت Intent به این متد برای ارسال پیام به broadcast receiver ارسال می شود. |
یک آبجکت Intent در واقع بسته ای از اطلاعات مورد نیاز مورادی که قصد دریافت آن را دارند می باشد.
همچنین این شیء حاوی اطلاعات مورد استفاده ی سیستم اندروید می باشد.
یک شیء Intent معمولا شامل اجزای زیر است:
این یکی از اجزای ضروری آبجکت Intent است و به عنوان رشته ای که یک عمل را انجام می دهد شناخته می شود.
action تا حد زیادی تعیین کننده ی سایر بخش های آبجکت Intent است.
action در یک شیء Intent را می توان با متد () setAction تنظیم کرده و آن را با استفاده از متد () getAction فراخوانی کرد.
مشخصات یک داده را به یک فیلتر intent اضافه می کند.
مشخصات می تواند شامل فقط نوع داده ، فقط نوع URI و یا هر دوی آن ها باشد.
URI با استفاده از صفات مشخصی برای هر کدام از بخش ها تعریف شده است.
موراد زیر ویژگی های اختیاری هستند که فرمت URI را تعیین می کنند اما با هم وابستگی متقابل دارند:
متد ()setData اطلاعات را تنها به عنوان یک URI مشخص می کند.
()setType آن را فقط به عنوان یک نوع MIME مشخص کرده و ()setDataAndType آن را به عنوان یک URI و یک نوع MIME مشخص می کند.
URI توسط ()getData و نوع ()getType فرخوانی می کند.
مثال هایی از نمونه های action/data :
ردیف | Action/Data و توضیحات آن |
---|---|
۱ | ACTION_VIEW content://contacts/people/1 نمایش اطلاعات مربوط به فردی که شناسه آن “۱” است. |
۲ | ACTION_DIAL content://contacts/people/1 شماره گیر تلفن را با مشخصات نمایش می دهد.
|
۳ | ACTION_VIEW tel:123 شماره گیر تلفن را با شماره داده شده پر می کند.
|
۴ | ACTION_DIAL tel:123 شماره گیر تلفن را با شماره داده شده پر می کند. |
۵ | ACTION_EDIT content://contacts/people/1 اطلاعات مربوط به فردی که شناسه آن “۱” است را ویرایش کنید. |
۶ | ACTION_VIEW content://contacts/people/ نمایش لیستی از افراد که کاربر می تواند از آن ها را مرور کند.
|
۷ | ACTION_SET_WALLPAPER تنظیمات را برای انتخاب تصویر زمینه نمایش می دهد.
|
۸ | ACTION_SYNC مقدار کنونی android.intent.action.SYNC است.
|
۹ | ACTION_SYSTEM_TUTORIAL این آموزش مبتنی بر پلت فرم را آغاز می کند.
|
۱۰ | ACTION_TIMEZONE_CHANGED منطقه زمانی تغییر می کند |
۱۱ | ACTION_UNINSTALL_PACKAGE برای اجرای uninstaller پیش فرض است. |
متد () addCategory یک دسته را در یک شی Intent قرار می دهد.
متد () RemoveCategory یک دسته از قبلا اضافه شده را حذف می کند.
متد () getCategories نیز مجموعه ای از تمام دسته های حاضر در شی را برمی گرداند.
با استفاده از متدهای ()putExtras و ()getExtras ، می توان موارد اضافی را تعیین و کرده و فرخوانی کرد.
پرچم ها بخش اختیاری از شی Intent است و دستور سیستم اندروید را برای راه اندازی یک فعالیت تعیین می کند:
ردیف | Flags و توضیحات |
---|---|
۱ | FLAG_ACTIVITY_CLEAR_TASK اگر مجموعه ای در Intent به متد () Context.startActivity منتقل شود این flag فعالیت جاری را به فعالیت های قبل مرتبط می کند. |
۲ | FLAG_ACTIVITY_CLEAR_TOP این flag به جای ایجاد یک فعالیت دیگر در بالای سایر فعالیت ها ، فعالیت های قبلی را می بندد.
|
۳ | FLAG_ACTIVITY_NEW_TASK این flage توسط فعالیتهایی که می خواهند یک launcher را ارائه دهند استفاده می شود. |
ComponentName یک فیلد اختیاری اندروید است که از کلاس های Service یا BroadcastReceiver مشتق می شود.
اگر این فیلد تنظیم شود آبجکت Intent را به کلاس تعیین شده ارسال می کند، درغیر این صورت اندروید با استفاده از سایر اطلاعات عملی دیگری را انتخاب می کند.
فیلد ComponentName توسط متدهای ()setComponent(), setClass یا ()setClassName تنظیم شده و با استفاده از متد () getComponent فراخوانی می شود.
دو نوع Intent پشتیبانی شده توسط Android وجود دارد:
Explicit intent برای اتصالات داخلی یک اپلیکیشن استفاده می شود.
به عنوان مثال برای اتصال یک activity به activity دیگر می توانید از Explicit intent استفاده کنید.
تصویر زیر برنامه ای را نشان می دهد که با کلیک روی یک دکمه activity اول را به activity دوم متصل می کند:
این intent ها هدف اجزاء را همراه با نام آن ها مشخص می کند و معمولا برای پیام های کاربردی داخلی استفاده می شود.
مثال:
1 2 | Intent i = new Intent(FirstActivity.this, SecondActivity.class); startActivity(i); |
این intent ها مقدار فیلد component name را تنظیم نکرده و آن را خالی رها می کند.
Implicit intent اغلب برای فعال کردن اجزاء در برنامه های دیگر به کار می رود.
برای مثال:
1 2 3 4 | Intent read1=new Intent(); read1.setAction(android.content.Intent.ACTION_VIEW); read1.setData(ContactsContract.Contacts.CONTENT_URI); startActivity(read1); |
کد فوق نتیجه ای مشابه زیر را تحویل خواهد داد:
target component که intent را دریافت می کند، می تواند از متد ()getExtras برای دریافت اطلاعات اضافی ارسال شده به منبع استفاده کند.
برای مثال:
1 2 3 | Bundle extras = getIntent().getExtras(); String value1 = extras.getString("Key1"); String value2 = extras.getString("Key2"); |
مثال زیر چگونگی استفاده از intent برای راه اندازی برنامه های مختلف ساخته شده در اندروید را نشان می دهد:
مراحل | توضیحات |
---|---|
۱ | مراحل ایجاد برنامه در اندروید استدیو را طبق بخش های قبلی دنبال کرده و نام پکیج را com.pvlearn.pvlearn.myapplication قرار بدهید. |
۲ | محتوای فایل src / main / java / MainActivity.java را برای کد تعریف دو دکمه ی Start Browser و Start Phone تغییر دهید. |
۳ | محتوای فایل res / layout / activity_main.xml را نیز برای افزودن سه دکمه در طرح خطی تغییر دهید. |
۴ | برنامه را اجرا کنید تا شبیه ساز آندروید را راه اندازی کنید و نتیجه تغییرات انجام شده در برنامه را تأیید کنید. |
کد زیر حاوی محتوای دستکاری شده ی فایل src/com.example.My Application/MainActivity.java. است:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | package com.example.saira_000.myapplication; import android.content.Intent; import android.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity { Button b1,b2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); b1=(Button)findViewById(R.id.button); b1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://www.example.com")); startActivity(i); } }); b2=(Button)findViewById(R.id.button2); b2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("tel:9510300000")); startActivity(i); } }); } } |
کد زیر نیز محتوای فایل res/layout/activity_main.xml خواهد بود:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Intent Example" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:textSize="30dp" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Tutorials point" android:textColor="#ff87ff09" android:textSize="30dp" android:layout_below="@+id/textView1" android:layout_centerHorizontal="true" /> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageButton" android:src="@drawable/abc" android:layout_below="@+id/textView2" android:layout_centerHorizontal="true" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/editText" android:layout_below="@+id/imageButton" android:layout_alignRight="@+id/imageButton" android:layout_alignEnd="@+id/imageButton" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Start Browser" android:id="@+id/button" android:layout_alignTop="@+id/editText" android:layout_alignRight="@+id/textView1" android:layout_alignEnd="@+id/textView1" android:layout_alignLeft="@+id/imageButton" android:layout_alignStart="@+id/imageButton" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Start Phone" android:id="@+id/button2" android:layout_below="@+id/button" android:layout_alignLeft="@+id/button" android:layout_alignStart="@+id/button" android:layout_alignRight="@+id/textView2" android:layout_alignEnd="@+id/textView2" /> </RelativeLayout> |
کد زیر نیز محتوای فایل res/values/strings.xml برای تعریف ثابت هاست:
1 2 3 4 | <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">My Applicaiton</string> </resources> |
کد زیر نیز محتوای پیش فرض فایل AndroidManifest.xml است:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.saira_000.myapplication"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> |
برای اجرای برنامه ی اندرویدی خود یکی از فایل های activity در برنامه ی خود کلیک کنید.
سپس روی نماد (Run) از نوار ابزار برای شروع اجرای برنامه کلیک کنید.
اگر همه چیز بخوبی پیش برود شبیه ساز اندروید پنجره ی زیر را نمایش خواهد داد:
حالا روی دکمه ی Start Browser کلیک کنید، سپس مرورگر باز شده و آدرس http://www.example.com را نمایش می دهد:
و همینطور می توانید رابط تلفن را با استفاده از دکمه Start Phone راه اندازی کنید که به شما امکان می دهد شماره تلفن داده شده را شماره گیری کنید.
با ارائه ی مثال فوق متوجه شدیم که چه طور از Intent برای فراخوانی فعالیت های دیگر استفاده می شود.
توجه داشته باشید که باید از عنصر <intent-filter> در فایل manifest برای لیست کردن action ، دسته ها و انواع داده مرتبط با هر فعالیت، service یا broadcast receiver استفاده کنید.
کد زیر نمونه ای از فایل AndroidManifest.xml را برای مشخص کردن یک فعالیت com.example.My Application.CustomActivity را نشان می دهد.
1 2 3 4 5 6 7 8 9 10 11 | <activity android:name=".CustomActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <action android:name="com.example.My Application.LAUNCH" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="http" /> </intent-filter> </activity> |
هنگامی که این فعالیت با فیلترهای فوق تعریف می شود. فعالیت های دیگر قادر به فراخوانی این فعالیت هستند.
فراخوانی فعالیت با استفاده از فعالیت های دیگر توسط orroid.intent.action.VIEW می باشد.
عنصر <data> نوع داده ای را که انتظار می رود توسط فعالیت مورد نظر فراخوانی می شود را مشخص می کند.
قبل از اعلام یک فعالیت موارد زیر را دنبال کنید:
اما این لیست نمی تواند خالی باشد یک فیلتر باید حاوی حداقل یک عنصر <action> باشد.
صفات جداگانه مانند طرح، میزبان، پورت و مسیر برای هر بخشی از URI وجود دارد.
مثال زیر در واقع تغیر یافته ی مثال فوق است، در این مثال تصمیم گیری اندروید وقتیکه یک intent به دو فعالیت متصل است را نشان می دهد:
مرحل | توضیحات |
---|---|
۱ | مراحل ایجاد برنامه در اندروید استدیو را طبق بخش های قبلی دنبال کرده و نام پکیج را com.pvlearn.pvlearn.myapplication قرار بدهید. |
۲ | محتوای فایل src / Main / Java / MainActivity.java را تغییر داده و کد مربوطه به تعریف سه دکمه در طراحی را لحاظ کنید. |
۳ | فایل src / Main / Java / CustomActivity.java را برای ایجاد فعالیت سفارشی ایجاد کنید. |
۴ | محتوای فایل res / layout / activity_main.xml را برای افزودن سه دکمه در طرح خطی تغییر دهید. |
۵ | فایل res / layout / custom_view.xml را برای افزودن یک <TextView> ساده جهت نشان دادن داده های منتقل شده از مقصد اضافه کنید. |
۶ | به محتوای فایل AndroidManifest.xml تگ <intent-filter> را برای تعریف قوانین intent تعریف کنید. |
۷ | برنامه را اجرا کنید تا شبیه ساز آندروید را راه اندازی کنید و نتیجه تغییرات انجام شده در برنامه را تأیید کنید. |
کد زیر نیز حاوی محتوای فایل src/MainActivity.java. می باشد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | package com.example.tutorialspoint7.myapplication; import android.content.Intent; import android.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity { Button b1,b2,b3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); b1=(Button)findViewById(R.id.button); b1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://www.example.com")); startActivity(i); } }); b2 = (Button)findViewById(R.id.button2); b2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent("com.example. tutorialspoint7.myapplication. LAUNCH",Uri.parse("http://www.example.com")); startActivity(i); } }); b3 = (Button)findViewById(R.id.button3); b3.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent("com.example. My Application.LAUNCH", Uri.parse("https://www.example.com")); startActivity(i); } }); } } |
کد زیر نیز محتوای فایل src/com.example.My Application/CustomActivity.java. را نشان می دهد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | package com.example.tutorialspoint7.myapplication; import android.app.Activity; import android.net.Uri; import android.os.Bundle; import android.widget.TextView; /** * Created by TutorialsPoint7 on 8/23/2016. */ public class CustomActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.custom_view); TextView label = (TextView) findViewById(R.id.show_data); Uri url = getIntent().getData(); label.setText(url.toString()); } } |
کد زیر نیز شامل محتوای فایل res/layout/activity_main.xml می باشد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.tutorialspoint7.myapplication.MainActivity"> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Intent Example" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:textSize="30dp" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Tutorials point" android:textColor="#ff87ff09" android:textSize="30dp" android:layout_below="@+id/textView1" android:layout_centerHorizontal="true" /> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageButton" android:src="@drawable/abc" android:layout_below="@+id/textView2" android:layout_centerHorizontal="true" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/editText" android:layout_below="@+id/imageButton" android:layout_alignRight="@+id/imageButton" android:layout_alignEnd="@+id/imageButton" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Start Browser" android:id="@+id/button" android:layout_alignTop="@+id/editText" android:layout_alignLeft="@+id/imageButton" android:layout_alignStart="@+id/imageButton" android:layout_alignEnd="@+id/imageButton" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Start browsing with launch action" android:id="@+id/button2" android:layout_below="@+id/button" android:layout_alignLeft="@+id/button" android:layout_alignStart="@+id/button" android:layout_alignEnd="@+id/button" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Exceptional condition" android:id="@+id/button3" android:layout_below="@+id/button2" android:layout_alignLeft="@+id/button2" android:layout_alignStart="@+id/button2" android:layout_toStartOf="@+id/editText" android:layout_alignParentEnd="true" /> </RelativeLayout> |
کد زیر نیز حاوی محتوای فایل res/layout/custom_view.xml می باشد:
1 2 3 4 5 6 7 8 | <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/show_data" android:layout_width="fill_parent" android:layout_height="400dp"/> </LinearLayout> |
کد محتوای فایل res/values/strings.xml :
1 2 3 4 | <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">My Application</string> </resources> |
کد زیر محتوای پیش فرض فایل AndroidManifest.xml می باشد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.tutorialspoint7.myapplication"> <application android:allowBackup = "true" android:icon = "@mipmap/ic_launcher" android:label = "@string/app_name" android:supportsRtl = "true" android:theme = "@style/AppTheme"> <activity android:name = ".MainActivity"> <intent-filter> <action android:name = "android.intent.action.MAIN" /> <category android:name = "android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.example.tutorialspoint7.myapplication.CustomActivity"> <intent-filter> <action android:name = "android.intent.action.VIEW" /> <action android:name = "com.example.tutorialspoint7.myapplication.LAUNCH" /> <category android:name = "android.intent.category.DEFAULT" /> <data android:scheme = "http" /> </intent-filter> </activity> </application> </manifest> |
برای اجرای برنامه ی اندرویدی خود یکی از فایل های activity در برنامه ی خود کلیک کنید.
سپس روی نماد (Run) از نوار ابزار برای شروع اجرای برنامه کلیک کنید.
اگر همه چیز بخوبی پیش برود شبیه ساز اندروید پنجره ی زیر را نمایش خواهد داد:
حالا با کلیک روی دکمه ی “Start Browser with VIEW Action” شروع کنیم.
در اینجا فعالیت سفارشی ما با فیلتر “android.intent.action.VIEW” تعریف شده است.
در حال حاضر یک فعالیت پیش فرض در برابر عملکرد VIEW تعریف شده توسط آندروید است که آن راه اندازی مرورگر وب است.
بنابراین اندروید دو گزینه را برای انتخاب activity شما نمایش می دهد.
حالا اگر Browser را انتخاب کنید، آندروید مرورگر وب را باز کرده و وبسایت example.com را باز خواهد کرد.
اما اگر گزینه IndentDemo را انتخاب کنید، آندروید CustomActivity را راه اندازی خواهد کرد.
حالا با کلیک روی دکمه ی back به عقب برگشته و اینبار روی “Start Browser with LAUNCH Action” کلیک کنید.
در اینجا اندروید فیلتری را برای تعریف activity اعمال می کند و به سادگی می توان فعالیت سفارشی خود را راه اندازی کنید.
دوباره روی دکمه ی back برای بازگشت کلیک کرده و اینبار روی “Exception Condition” کلیک کنید.
در این بخش اندروید سعی می کند که یک فیلتر معتبر برای درخواست مورد نظر اعمال کند.
از آن جایی که ما از https به جای http استفاده می کنیم فیلتر معتبری تعریف نشده و اندروید یک خطا صادر می کند.
با استفاده از قابلیت Intent و فیلتر در اندروید شما می توانید از یک فعالیت به فعالیت دیگری مراجعه کنید ضمن اینکه فعالیت قبلی خود را نیز حفظ کرده و امکان بازگشت به فعالیت های قبل را دارید، در فصل بعدی به مباحث طراحی رابط کاربری می پردازیم.