آموزش intent ها و فیلترها در اندروید
intent توضیحی انتزاعی از عملی است که باید انجام شود. می تواند با startActivity برای راه اندازی یک Activity ، broadcastIntent برای ارسال آن به هر عنصر BroadcastReceiver ، و (startService (Intent یا (bindService (Intent ServiceConnection ,int ، برای ارتباط با خدمات پیش زمینه استفاده شود.
هدف Intent ، یک ساختار داده منفعل است که شرح انتزاعی از عملی را که باید انجام شود ، در اختیار دارد.
به عنوان مثال ، فرض کنید شما فعالیتی دارید که باید راه اندازی یک سرویس گیرنده ایمیل را انجام داده و با استفاده از دستگاه اندروید خود ایمیلی ارسال کند. برای این منظور ، فعالیت شما می تواند ACTION_SEND همراه با انتخاب کننده مناسب را به Android Intent Resolver ارسال کند. انتخاب کننده، رابط مناسب را به کاربر ارائه می دهد تا نحوه ارسال داده های ایمیل خود را انتخاب کند.
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 را در یک مرورگر وب در دستگاه اندروید خود باز کند. برای این منظور ، فعالیت شما Intent مربوط به ACTION_WEB_SEARCH را به Android Intent Resolver ارسال می کند تا URL داده شده را در مرورگر وب باز کند. Intent Resolver لیستی از فعالیتها را تجزیه و تحلیل می کند و یکی از مواردی را که به بهترین وجه با Intent شما مطابقت دارد را انتخاب می کند، یعنی Web Browser Activity. Intent Resolver سپس صفحه وب خود را به مرورگر وب منتقل می کند و Web Browser Activity را شروع می کند.
String q = “tutorialspoint”;
Intent intent = new Intent(Intent.ACTION_WEB_SEARCH );
intent.putExtra(SearchManager.QUERY, q);
startActivity(intent);
در بالا tutorialspoint در موتور جستجوی اندروید جستجو می شود و نتیجه جستجو را در فعالیت ارائه می دهد.
مکانیسم های جداگانه ای برای ارائه intent ها به هر نوع مؤلفه وجود دارد – فعالیت ها ، سرویس ها و دریافت کنندگان پیام.
شماره | متد و توضیحات |
۱ | ()Context.startActivity
شی Intent به این متد ارسال می شود تا یک فعالیت جدید یا یک فعالیت موجود را برای انجام کاری جدید راه اندازی کند. |
۲ | ()Context.startService
شی Intent برای شروع یک سرویس یا ارائه دستورالعمل جدید به یک سرویس در حال انجام به این متد منتقل می شود. |
۳ | ()Context.sendBroadcast
شی Intent به این متد منتقل می شود تا پیام را به همه دریافت کنندگان پیام مورد نظر ارسال کند. |
اشیاء Intent
شی Intent مجموعه ای از اطلاعات است که توسط مؤلفه ای که intent را دریافت می کند و همچنین اطلاعاتی که توسط سیستم اندرویدی دریافت می شود مورد استفاده قرار می گیرد. یک شی intent می تواند بر اساس آنچه در حال برقراری ارتباط است یا اجرا می شود، شامل اجزای زیر باشد –
Action
قسمت اجباری از شی Intent است و رشته ای است که عملی را انجام می دهد – یا در مورد intent های همه پخشی، action ی است که اتفاق می افتد و گزارش می شود. action تا حد زیادی مشخص می کند ساختار باقی مانده شی intent چگونه است. کلاس Intent تعدادی از محدودیت های action را که مربوط به intent های مختلف هستند ، تعریف می کند. در اینجا لیستی از action های استاندارد Intent اندروید آورده شده است.
action در یک شی Intent می تواند با استفاده از متد ()setAction تنظیم شده و توسط ()getAction خوانده شود.
Data
مشخصات داده را در فیلتر intent اضافه کنید. مشخصات می تواند فقط یک data type (ویژگی mimeType) ، فقط یک URI و یا هم data type و هم URI باشد. URI برای هر یک از قسمت های آن با ویژگی های جداگانه مشخص شده است –
این ویژگی هایی که قالب URL را مشخص می کنند اختیاری هستند ، اما به یکدیگر وابسته اند –
- اگر schema برای فیلتر intent مشخص نشده باشد ، تمام خصوصیات URI دیگر نادیده گرفته می شوند.
- اگر host برای فیلتر مشخص نشده باشد ، ویژگی port و تمام ویژگی های path نادیده گرفته می شوند.
متد ()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
حذف کننده برنامه را اجرا می کند. |
Category
بخشی اختیاری از شی Intent است و رشته ای است که حاوی اطلاعات تکمیلی در مورد نوع مؤلفه ای است که باید intent را کنترل کند. متد ()addCategorie یک category را در یک شیء Intent قرار می دهد ، ()removeCategorie طبقه بندی را که قبلاً اضافه شده بود حذف می کند ، و ()getCategories مجموعه ای از همه طبقه بندی های موجود در شی را بدست می آورد.
می توانید جزئیات مربوط به فیلترهای Intent را در قسمت زیر بررسی کنید تا بدانید که چگونه از category ها برای انتخاب فعالیت مناسب متناسب با Intent استفاده می کنیم.
Extras
این قسمت شامل زوج هایی با مقادیر کلیدی برای اطلاعات اضافی در مورد intent هاست و به مولفه ای که با intent تعامل دارد تحویل داده می شود. اطلاعات اضافی را می توان با استفاده از متد های ()putExtras و ()getExtras به ترتیب تنظیم کرد و خواند.
Flags
این پرچم ها جزء اختیاری از شی Intent هستند و به سیستم اندرویدی نحوه راه اندازی یک فعالیت و نحوه عمل پس از راه اندازی و غیره را آموزش می دهند.
شماره | Flags و توضیحات |
۱ | FLAG_ACTIVITY_CLEAR_TASK
اگر یک Intent به Context.startActivity() ارسال شده باشد ، این flag باعث می شود تا قبل از شروع فعالیت ، فعالیتهای موجود که مشغول پردازش این فعالیت بودند، آزاد شوند. این فقط در رابطه با FLAG_ACTIVITY_NEW_TASK قابل استفاده است. |
۲ | FLAG_ACTIVITY_CLEAR_TOP
در صورت استفاده از این flag ، هنگام شروع فعالیت، اگر یک واحد سیستمی مشغول پردازش این نوع فعالیت باشد، به جای راه اندازی یک نمونه ی جدید، تمام فعالیت های موجود که قبل از این بوده اند بسته می شوند و intent به عنوان یک intent جدید به آن ها واگذار می شود. |
۳ | FLAG_ACTIVITY_NEW_TASK
این flag معمولاً توسط فعالیتهایی که می خواهند راه اندازی شوند استفاده می شود. آنها لیستی از کارهایی را که می توان انجام داد به کاربر می دهند ، که در غیر این صورت کاملاً مستقل از فعالیتی که آنها را اجرا می کنند ، اجرا می شوند. |
Component Name
قسمت اختیاری یک شیء ComponentName است که کلاس یا فعالیت ، سرویس یا BroadcastReceiver را نشان می دهد. اگر تنظیم شود ، شی Intent به نمونه ای از کلاس تعیین شده تحویل داده می شود ، در غیر این صورت اندروید از اطلاعات دیگری در شی Intent برای یافتن یک شی مناسب استفاده می کند.
نام مؤلفه توسط ()setComponent() ، setClass یا ()setClassName تنظیم می شود و توسط ()getComponent خوانده می شود.
انواع intent ها
دو نوع intent وجود دارد که توسط اندروید پشتیبانی می شود
Explicit Intents
برای برقراری ارتباط بین قسمت های داخلی یک نرم افزار استفاده می شوند. فرض کنید می خواهید یک فعالیت را به فعالیت دیگر وصل کنید، می توان این ارتباط را با یک Explicit Intents انجام داد. تصویر زیر ارتباط بین فعالیت اول با فعالیت دوم را پس از کلیک کردن روی دکمه نشان می دهد.
این intent ها مؤلفه هدف را با نام آن مشخص می کند و معمولاً برای ارتباط بین کامپوننت های داخلی نرم افزار استفاده می شوند – مانند فعالیتی که شروع به ایجاد یک سرویس فرعی یا فعالیت های خواهر می کند. به عنوان مثال –
// Explicit Intent by specifying its class name
Intent i = new Intent(FirstActivity.this, SecondActivity.class);
// Starts TargetActivity
startActivity(i);
Implicit Intents
این intent ها مقصد را مشخص نمی کنند و فیلد مربوط به component name خالی است. intent های ضمنی اغلب برای فعال کردن مؤلفه ها در برنامه های دیگر استفاده می شود. به عنوان مثال –
Intent read1=new Intent();
read1.setAction(android.content.Intent.ACTION_VIEW);
read1.setData(ContactsContract.Contacts.CONTENT_URI);
startActivity(read1);
کد بالا نتیجه زیر را نمایش می دهد.
مؤلفه مقصدی که intent را دریافت می کند می تواند از متد ()getExtras برای دریافت اطلاعات اضافی ارسال شده توسط مؤلفه مبدا استفاده کند. به عنوان مثال –
// Get bundle object at appropriate place in your code
Bundle extras = getIntent().getExtras();
// Extract data using passed keys
String value1 = extras.getString(“Key1”);
String value2 = extras.getString(“Key2”);
مثال
مثال زیر عملکرد intent اندروید را در راه اندازی برنامه های مختلف داخلی اندرویدی نشان می دهد.
شماره | توضیحات |
۱ | می توانید از Android studio IDE برای ایجاد یک برنامه اندرویدی استفاده کنید و آن را با عنوان My Application تحت پکیج com.example.saira_000.myapplication بسازید. |
۲ | فایل src / main / java / MainActivity.java را تغییر دهید و کد را اضافه کنید تا دو listener متناظر با دو دکمه تعریف شوند. یعنی Start Browser و Start Phone. |
۳ | فایل XML صفحه بندی res / layout / activity_main.xml/ را تغییر دهید تا سه دکمه به ترتیب خطی اضافه شود. |
۴ | برنامه را اجرا کنید تا شبیه ساز اندروید راه اندازی شود و نتیجه تغییرات انجام شده در برنامه را نمایش دهد. |
در زیر محتوای فایل فعالیت اصلی اصلاح شده src / com.example.My Application / MainActivity.java آورده شده است.
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 آورده شده است:
<?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 برای تعریف دو ثابت جدید آورده شده است:
<?xml version=”1.0″ encoding=”utf-8″?>
<resources>
<string name=”app_name”>My Applicaiton</string>
</resources>
در زیر محتوای پیش فرض AndroidManifest.xml آمده است:
<?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>
برنامه My Application را اجرا کنید. فرض می کنیم هنگام انجام تنظیمات محیطی ، AVD خود را ایجاد کرده اید. برای اجرای برنامه در Android Studio ، یکی از فایل های فعالیت پروژه خود را باز کرده و روی گزینه Run Eclipse Run Icon از نوار ابزار کلیک کنید .Android Studio برنامه را در AVD شما نصب می کند و آن را راه اندازی می کند و اگر همه چیز درست باشد، صفحه زیر را نمایش می دهد-
اکنون بر روی دکمه Start Browser کلیک کنید ، که یک مرورگر را پیکربندی کرده و http://www.example.com را مانند تصویر زیر نمایش می دهد –
به روش مشابه می توانید رابط تلفن را با استفاده از دکمه Start Phone راه اندازی کنید ، که به شما امکان می دهد شماره تلفنی که قبلاً به سیستم داده شده را شماره گیری کنید.
Intent Filters
مشاهده کردید که چگونه از Intent برای فراخوانی فعالیت دیگر استفاده می شود. سیستم عامل اندروید با استفاده از فیلترها می تواند مجموعه فعالیت ها ، سرویس ها و گیرنده های پیام را مشخص کند که تا با کمک مجموعه action ها ، category ها ، data schemaی مرتبط با Intent ، تعامل برقرار کند. شما می توانید از تگ <intent-filter> در فایل manifest برای لیست کردن action ها ، category ها و data schemaی مرتبط با Intent ، سرویس ها و گیرنده های پیام استفاده کنید.
برنامه نویسی اندروید رو قورت بده! بدون کلاس، سرعت 2 برابر، ماندگاری 3 برابر، پولسازی با ساخت اپلیکیشن و بازی، سه پک زیر جوابت هست:
در زیر مثالی از فایل AndroidManifest.xml برای مشخص کردن فعالیت com.example.My Application.CustomActivity آورده شده که می توان با استفاده از هر دو روش ذکر شده مورد دسترسی قرار بگیرد و یک category و یک data در آن تعریف شده –
<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>
پس از تعریف این فعالیت به همراه فیلترهای ذکر شده در بالا ، فعالیت های دیگر قادر خواهند بود این فعالیت را با استفاده از android.intent.action.VIEW یا با استفاده از com.example.My Application.LAUNCH فراخوانی کنند. به شرطی که طبقه بندی مربوط به آن ها android.intent.categor.DEFAULT باشد.
تگ <data> نوع داده ای را که انتظار می رود توسط فعالیت فراخوانی شود، مشخص می کند و در مثال بالا فعالیت سفارشی ما انتظار دارد که داده ها با “//:http” شروع شوند.
ممکن است شرایطی وجود داشته باشد که یک intent بتواند به چند فیلتر یا بیش از یک فعالیت یا سرویس داده شود. ممکن است از کاربر سؤال شود که کدام مؤلفه را فعال کند. در صورت عدم یافتن مقصد ، استثنا مطرح می شود.
قبل از فراخوانی یک فعالیت ، بررسی های اندروید زیر انجام می شود –
- یک فیلتر <intent-filter> می تواند همانطور که در بالا نشان داده شد بیش از یک action را لیست کند ، اما این لیست نمی تواند خالی باشد. یک فیلتر باید حداقل یک عنصر <action> را داشته باشد ، در غیر این صورت تمام intent ها را مسدود می کند. اگر بیش از یک action ذکر شده باشد ، اندروید سعی می کند قبل از فراخوانی فعالیت ، یکی از action های ذکر شده را مطابقت دهد.
- یک فیلتر <intent-filter> ممکن است صفر ، یک یا بیش از یک category داشته باشد. اگر هیچ category ذکر نشده باشد ، اندروید همیشه این تست را پشت سر می گذراد ، اما اگر بیش از یک category ذکر شده باشد ، برای اینکه یک intent از این تست عبور کند، تمام category های موجود در شی Intent باید با category موجود در فیلتر مطابقت داشته باشند.
- هر تگ <data> می تواند URI و یک نوع داده (نوع رسانه MIME) را مشخص کند. برای هر قسمت از URI ویژگیهای جداگانه ای مانند schema ، host ، port و path وجود دارد. یک شیء Intent که حاوی URI و یک نوع داده است ، بخش تست نوع داده را فقط در صورتی پشت سر می گذارد که نوع آن مطابق با نوع ذکر شده در فیلتر باشد.
مثال
مثال زیر اصلاح مثال بالا است. در اینجا خواهیم دید که چگونه اندروید قصد دارد با دو فعالیت تعریف شده در intent ، ناسازگاری را برطرف کند، و پس از آن چطور یک فعالیت سفارشی را با یک فیلتر فراخوانی می کند و در نهایت سراغ استثنا می رویم، هنگامی که هیچ فعالیت مناسبی برای intent تعریف نشده باشد.
مرحله | توضیحات |
۱ | شما می توانید از android studio برای ایجاد یک برنامه اندرویدی استفاده کنید و آن را تحت عنوان My Application و تحت پکیج com.example.tutorialspoint7.myapplication ایجاد کنید. |
۲ | فایل src / Main / Java / MainActivity.java را تغییر داده و کد های مربوط به سه listener سه دکمه تعریف شده را در فایل layout اضافه کنید. |
۳ | یک فایل جدید src / Main / Java / CustomActivity.java اضافه کنید تا یک فعالیت سفارشی داشته باشد که با intent های مختلف فراخوانی شود. |
۴ | فایل XML صفحه بندی res / layout / activ_main.xml را تغییر دهید تا سه دکمه به ترتیب خطی اضافه کنید. |
۵ | فایل XML صفحه بندی res/layout/custom_view.xml را برای اضافه کردن یک تگ <TextView> برای نمایش داده های ارسال شده از طریق intent اضافه کنید. |
۶ | AndroidManifest.xml را برای افزودن <intent-filter> اصلاح کنید تا قوانینی را برای intent خود برای استناد به فعالیتهای سفارشی تعریف کنید. |
۷ | برنامه را اجرا کنید تا شبیه ساز اندروید راه اندازی شود و نتیجه تغییرات در برنامه را نمایش دهد. |
در زیر محتوای فایل فعالیت اصلی src / MainActivity.java اصلاح شده است.
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 تغییر یافته است.
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 / activ_main.xml آورده شده است:
<?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 file آورده شده است:
<?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 برای تعریف دو ثابت جدید آورده شده است:
<?xml version=”1.0″ encoding=”utf-8″?>
<resources>
<string name=”app_name”>My Application</string>
</resources>
در زیر محتوای پیش فرض AndroidManifest.xml آمده است:
<?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>
برنامه My Application خود را اجرا کنید. فرض می کنیم هنگام انجام تنظیمات محیطی ، AVD خود را ایجاد کرده اید. برای اجرای برنامه در Android Studio ، یکی از فایل های فعالیت پروژه خود را باز کرده و از نوار ابزار ، روی گزینه Run Eclipse Run Icon کلیک کنید. Android Studio برنامه را در AVD شما نصب می کند و آن را راه اندازی می کند و اگر همه چیز درست باشد ، پنجره Emulator زیر نمایش داده می شود –
حالا بیایید با اولین دکمه “Start Browser with VIEW Action” شروع کنیم. در اینجا فعالیتهای سفارشی خود را با فیلتر “android.intent.action.VIEW” تعریف کرده ایم ، و در حال حاضر یک فعالیت پیش فرض در برابر عملکرد VIEW تعریف شده توسط اندروید وجود دارد که در حال راه اندازی مرورگر وب است ، بنابراین اندروید دو گزینه زیر را برای انتخاب فعالیت شما نمایش می دهد.
اکنون اگر Browser را انتخاب کنید ، اندروید مرورگر وب را راه اندازی می کند و سایت shembull.com را باز می کند اما اگر گزینه IndentDemo را انتخاب کنید ، اندروید CustomActivity را راه اندازی می کند که هیچ کاری جز گرفتن داده های وارد شده و نمایش در غالب متن نمی کند –
اکنون از دکمه back استفاده کنید و بر روی دکمه “Start Browser with LAUNCH Action” کلیک کنید ، در اینجا اندروید برای انتخاب تعریف فعالیت، فیلتر را اعمال می کند و به راحتی فعالیت سفارشی شما را راه اندازی می کند.
باز هم با استفاده از دکمه back به عقب برگردید و بر روی دکمه “Exception Condition” کلیک کنید ، در اینجا اندروید سعی می کند یک فیلتر معتبر را برای intent مشخص پیدا کند اما یک فعالیت معتبر تعریف شده را پیدا نمی کند زیرا این بار ما به جای http از https استفاده کردیم. بنابراین اندروید یک حالت استثنا را اعلام می کند و پنجره زیر را نمایش می دهد-