مشاوره رایگان
دریافت لینک های دانلود دریافت پستی درب منزل مبلغ کل: تومان
جهت دریافت کد تخفیف به کانال تلگرام مراجعه و یا با پشتیبان آنلاین هماهنگ نمایید

معرفی Intent ها در برنامه نویسی اندروید


یک Intent در برنامه نویسی اندروید،  یک توصیف انتزاعی از یک عملیاتی است که انجام می شود. Intent می تواند به عنوان شروع کننده ی یک اکتیویتی برای راه اندازی یک  (اکتیویتی) ، فرستادن هر مولفه ای از broadcastIntent به BroadcastReceiver ، و برقراری ارتباط بین متد (startService(Intent و سرویس های پس زمینه استفاده شود.

کلاس Intent بخشی تحت عنوان Data است که نوع داده ها، محل قرار گرفتن آن ها و هم چنین جنس داده ها را مشخص می کند. گفتیم که محل قرار گرفتن داده ها از طریق URI در اختیار Intent قرار خواهد گرفت. حال علاوه بر URI که به منزله آدرس در اپلیکیشن ما است، نوع Data یا اطلاعات نیز بایستی تعریف شود که اینکار از طریق MIME Type صورت خواهد پذیرفت. 

یک Intent به عنوان یک شی ، ساختاری برای توضیح یک عملیات است.

به عنوان مثال، فرض کنید که یک Activity دارید که باید یک سرویس ایمیل را راه اندازی کرده و با استفاده از دستگاه Android خود یک ایمیل بفرستد. برای این منظور، Activity شما یک ACTION_SEND همراه با chooser مناسب را به 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 برای شروع email activity انجام می شود و نتیجه به صورت زیر خواهد بود :

مثلا فرض کنید اکتیویتی ای دارید که باید یک آدرس URL را در مرورگر دستگاه اندروید خود باز کند ، برای این کار اکتیویتی مورد نظر شما  ACTION_WEB_SEARCH Intent را به Intent Resolver خواهد فرستاد تا URL مورد نظر را در مرورگر وب خود باز کند.

Intent Resolver توسط یک لیست اکتیویتی تجزیه می شود و گزینه ای انتخاب می شود که به بهترین نحو شما را به Intent مورد نظرتان برساند.

سپس Intent Resolver صفحه وب مورد نظر  را به مرورگر وب منتقل می کند و اکتیویتی ، مرورگر وب را اجرا می کند.

String q = "clicksite";
Intent intent = new Intent(Intent.ACTION_WEB_SEARCH );
intent.putExtra(SearchManager.QUERY, q);
startActivity(intent);

 

در مثال فوق ، clicksite را جست و جو می کند و در آخر clicksite را به عنوان نتیجه نمایش می دهد. مکانیسم های مختلفی برای رساندن Intent به هر یک از سرویس ها ، اکتیویتی ها و broadcast receiver ها وجود دارد.

متد ها و توضیحات :

()Context.startActivity:

Intent به عنوان یک شی ، برای راه اندازی یک اکتیویتی جدید ، یا Intent جدید برای همان اکتیویتی فعلی ، عمل می کند.

()Context.startService:

Intent به عنوان یک شی ، برای شروع سرویس ها یا ارائه دستورالعمل های جدید به سرویس عمل میکند.

()Context.sendBroadcast:

Intent به عنوان یک شی به این متد منتقل می شود تا پیام را همه broadcast receiver ها دریافت کنند.

 

Intent Objects :

یک شی Intent ، یک بسته نرم افزاری از اطلاعات است که توسط مولفه ای که قصد دریافت اطلاعات مورد نیاز برای اندروید را دارد استفاده می شود. یک شی بر اساس نوع ارتباط و نوع نیازش اجزای زیر را شامل شود :

Action :

این ، بخش الزامی یک شی است و رشته نامیده میشود . action تا حد زیادی تعیین می کند که چطور ، بقیه شی در نظر گرفته شود . کلاس Intent تعداد زیادی از اکشن ها را که به Intent های مختلف تعلق دارند تعریف می کند. 

action در یک شی Intent با متد ()setAction تنظیم و با ()getAction فراخوانی می شود. 

Data :

مشخصات یک داده را به یک intent filter اضافه می کند. این مشخصات می تواند نوع داده (type) ، ادرس (URL) داده ، یا ترکیبی از آدرس داده و نوع داده باشد . یک URL توسط اتریبیوت های جداگانه مشخص می شود.

این اتریبیوت هایی که فرمت URL را مشخص می کنند اختیاری هستند ، اما به نوعی به یکدیگر وابستگی هم دارند . 

  • اگر یک رویه از پیش تعیین شده برای intent filter در نظر گرفته نشده باشد ، تمام اتریبیوت های URL نادیده گرفته می شوند.
  • اگر یک میزبان برای فیلتر مشخص نشده باشد ، اتریبیوت پورت و همه ی اتریبیوت های مسیر نادیده گرفته می شوند.

متد setData اطلاعات را تنها به عنوان یک URL مشخص می کند ، setType تنها اطلاعات را به عنوان یک نوع MIME مشخص میکند ، و متد setDataAndType همزمان به عنوان URL و MIME مشخص می کند. URL توسط getData  و نوع ، توسط getType  خوانده می شود.

مثال هایی از اکشن و دیتا :

1) ACTION_VIEW content://contacts/people/1 :

نمایش اطلاعات فردی که شناسه ی آن 1 است .

2) ACTION_DIAL content://contacts/people/1 :

نمایش شماره گیر تلفن بر اساس فرد خواسته شده

3) ACTION_VIEW tel:123 :

نمایش شماره گیر تلفن بر اساس شماره ی داده شده

4) ACTION_DIAL tel:123 :

نمایش شماره گیر تلفن بر اساس شماره ی داده شده

5) ACTION_EDIT content://contacts/people/1 :

ویرایش اطلاعات فردی که شناسه ی آن 1 است

6) ACTION_VIEW content://contacts/people/ :

نمایش لیستی از افراد که کاربر می تواند از طریق آن لیست را مرور کند.

7) ACTION_SET_WALLPAPER :

نمایش تنظیمات برای تغییر تصویر والپیپر

8) ACTION_SYNC :

این داده ها همگام است . داده ی کنونی android.intent.action.SYNC است.

9)ACTION_TIMEZONE_CHANGED :

هنگامی که منطقه زمانی تغییر می کند.

 

Category (دسته بندی) :

 

Category یک بخش اختیاری از Intent object است و حاوی یک رشته اطلاعات اضافی در مورد نوع مولفه ای است که باید استفاده شود . به بیان ساده تر ، یک Intent می بایست حاوی اطلاعاتی تکمیلی مبنی بر این که کدام بخش از سیستم عامل اندروید یا به عبارتی کدام Component قرار است Intent مد نظر ما را اجرا کند ، باشد.

متد ()addCategory یک Category را جایگزین Intent object میکند .

متد ()removeCategory عمل حذف Category  ای که قبلا اضافه شده را انجام میدهد.

متد getCategories() مجموعه تمام Category  هایی که قبلا اضافه شده را می گیرد.

شما میتوانید جزییات راجع به Intent Filter در بخش زیر بررسی کنید تا بفهمید چگونه از Category ها برای انتخاب اکتیویتی مناسب یک Intent استفاده کنید .

Extras (اضافات) :

با استفاده از متد putExtras() میتوان موارد اضافه را تعیین و با کمک متد getExtras() می توان آن ها را خواند .
در برخی مواقع اطلاعات اضافی جهت اجرای یک Action تحت عنوان Extras به معنی اضافی نیز مورد استفاده قرار می گیرند که به عنوان اطلاعات تکمیلی ، مد نظر قرار داده خواهند شد. به عبارت دیگر اگر یک Action را به عنوان یک متد برای Intent در نظر بگیریم ، Extras را می توان به عنوان پارامتر آن متد قلمداد نمود.

Flags :

 flag ها نیز بخش اختیاری Intent Filter هستند و دستور سیستم اندروید مبنی بر راه اندازی یک اکتیویتی و نحوه ی پیشبرد آن بعد از راه اندازی را مدیریت می کنند. Flag مجموعه دستوراتی است که سیستم عامل اندروید را مجبور می سازد تا یک Activity را به روش خاصی اجرا سازد.

FLAG_ACTIVITY_CLEAR_TASK : 

اگر Intent  روی ()Context.startActivity تنظیم شده باشد ، فلگ باعث میشود که تمام task های موجود در اکتیویتی ، قبل از شروع اکتیویتی پاکسازی شود. به این معنی که اکتیویتی شکل جدیدی به خود میگیرد و تمام اکتیویتی های قدیمی پاک می شوند.این کار فقط با FLAG_ACTIVITY_CLEAR_TASK امکان پذیر است .

FLAG_ACTIVITY_CLEAR_TOP :

اگر این پرچم ایجاد شود و activity متصل به آن در حال حاضر در دستور فعلی در حال اجرا باشد،  بجای اتصال به یک اکتیویتی جدید ، تمام فعالیت ها یا اکتیویتی های دستور فعلی را منقضی خواهد کرد. این شی Intent به اکتویتی قدیمی به عنوان یک شی Intent جدید مراجعه می کند.

FLAG_ACTIVITY_NEW_TASK :

این flag به صورت کلی برای اکتیویتی ای که می خواهد یک استایل launcher را فراخوانی کند استفاده می شود. اکتیوتی های فراخوانی کننده لانچر ها به کاربر لیستی از امکانات استایل دهی را می دهند، که عموما  ، بصورت مستقل از اکتیویتی که آن ها را فرا خوانده عمل می کنند.

 

Component Name (نام مولفه) :

این فیلد انتخابی ، یک شی اندرویدی ComponentName است که کلاس Activity ، Service یا BroadcastReceiver را فراخوانی می کند. اگر این فیلد پر شد باشد ، شی Intent ، یک کلاس دیزاین شده را به صورت نمونه ارجاع خواهد داد . اگر هم این فیلد پر نشده باشد. اندروید از سایر اطلاعات موجود در شی Intent برای یافتن موقعیت مناسب هدف استفاده می کند.

نام کامپوننت با متد های setComponent(), setClass() و یا setClassName() درج شده و با متد getComponent() اطلاعات را میخواند (اطلاعات را میگیرد)

انواع Intent : 

دو نوع Intent وجود دارد که توسط اندروید پشتیبانی می شود :

  • Explicit Intents (اینتنت های صرحی)

  • Implicit Intents (اینتنت های ضمنی) 

Explicit Intents : اینتنت هایی هستند که مقصد مشخصی دارند و ما به عنوان توسعه دهنده ، نام مقصد را درون Intent قید می کنیم. به عنوان یک مثال ساده می توان گفت : انتقال از یک اکتیویتی به اکتیویتی دیگر درون یک اپلیکیشن . این نوع از Intent  مولفه ی هدف را مشخص می کند و معمولا در پیام های های داخلی کاربردی استفاده میشود. مانند اکتیویتی که یک سرویس وابسته یا یک sister activity را راه اندازی میکند .
مثال :

// Explicit Intent by specifying its class name
Intent i = new Intent(FirstActivity.this, SecondActivity.class);

// Starts TargetActivity
startActivity(i);

Implicit Intents : این intent ها تارگت (هدف) را نامگذاری نمیکنند و فیلد مولفه ی نام ، خالی است . Implicit Intents ها اغلب برای فعال کردن کامپوننت ها در اپلیکیشن های دیگر استفاده می شوند.
مثال :

Intent read1=new Intent();
read1.setAction(android.content.Intent.ACTION_VIEW);
read1.setData(ContactsContract.Contacts.CONTENT_URI);
startActivity(read1);

مولفه ی هدف که intent را دریافت می کند می تواند از متد getExtras() برای دریافت اطلاعات اضافی (extra data) ارسال شده توسط مولفه ی منبع ، استفاده کند .
مثال :

// 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");

مثال زیر قابلیت یک Android Intent را برای راه اندازی اپلیکیشن های مختلف نشان می دهد :

1) شما از Android studio IDE برای ایجاد یک برنامه اندروید استفاده کرده و آن را با نام My Application تحت پکیج com.example.saira_000.myapplication نامگذاری می کنید 

2) فایل src/main/java/MainActivity.java را تغییر دهید و کدی برای تعریف دو شنونده و دو دکمه اضافه کنید . مرورگر و تلفن را راه اندازی کنید .

3) فایل layout XML را به res/layout/activity_main.xml تغییر دهید و سه دکمه به layout خطی اضافه کنید .

4) اپلیکیشن را در امولاتور اندروید اجرا کنید و نتیجه تغییراتی که ایجاد کردید را بررسی نمایید .

 

در زیر محتوای تغییر یافته ی فایل main activity به صورت src/com.example.Myapplication/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  را به خوبی تنظیم کرده باشید . برای اجرای اپلیکیشن ، اندروید استودیو را باز کرده و یکی از پروژه های خود را باز کنید و گزینه Run را از نوار ابزار انتخاب کنید . اگر همه چیز رو به راه باشد نتیجه را در امولاتور خواهید دید .

 

Intent Filters :

تا اینجا دیدید که چطور با استفاده از Intent یک اکتیویتی را از یک برنامه ی دیگر فراخوانی کردیم.سیستم عامل اندروید با استفاده از فیلتر ها می تواند مجموعه ای از اکتیویتی ها، سرویس ها و Broadcast receivers را مشخص کند تا با کمک action، categories و data scheme مرتبط با یک Intent ، تعامل برقرار کنند. با استفاده از تگ <intent-filter> در فایل مانیفست (manifest file) می توانید لیستی از action ها، category ها و نوع data هایی که با هر کدام از کامپوننت های اکتیویتی، سرویس یا Broadcast receivers مرتبط هستند را تعریف کنید.

برای مثال قسمتی از یک فایل مانیفست (manifest file) در زیر آورده شده که در آن با استفاده از action یک اکتیویتی تعیین شده است که می تواند با هر دو روش صریح و ضمنی مورد دستیابی قرار بگیرد و یک category و نوع data نیز در آن تعریف گردیده.

در زیر نمونه ای از یک فایل AndroidManifest.xml برای مشخص کردن اکتیویتی com.example.My Application.CustomActivity که میتواند به دیتا ، کتگوری و اکشن پاسخ دهد را میبینیم :

<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>

 

وقتی برای یک اکتیویتی مانند قطعه کد بالا فیلتر (filter) تعریف کنید ، اکتیویتی های دیگری که category آن ها android.intent.category.DEFAULT تعریف شده باشد، می توانند با استفاده از android.intent.action.VIEW یاcom.example.ApplicationName.LAUNCH این اکتیویتی را فراخوانی کنند.

تگ <data> نیز نوع داده هایی را که اکتیویتی انتظار دارد آن ها را دریافت کند مشخص می کند که در قطعه کد بالا اکتیویتی سفارشی (custom) ما انتظار دارد داده هایی که دریافت می کند با “://http” آغاز شوند؛ یعنی یک آدرس وب.

ممکن است در وضعیتی که ارائه ی یک Intent با فیلترهای بیش از یک اکتیویتی یا سرویس هم خوانی پیدا کند، از کاربر پرسیده شود که مایل است کارش با کامپوننت کدام برنامه که فیلترش با این Intent هم خوانی داشته انجام شود. یک استثنا نیز وجود دارد و آن زمانی است که Intent نتواند هیچ فیلتر مناسبی را پیدا کند.

در زیر لیست بررسی های انجام شده توسط اندروید، قبل از فراخوانی یک اکتیویتی آورده شده است:

  • ممکن است یک تگ <intent-filter> مانند مثال بالا ، بیشتر از یک action را در داخل لیست خود بیاورد، اما این لیست نمی تواند خالی باشد؛ یک فیلتر حداقل باید یک تگ <action> را در لیست خود داشته باشد، در غیر این صورت تمام Intent های دیگر را نیز مسدود خواهد کرد. اگر بیش از یک action در لیست داخل <intent-filter> ذکر شود ، سیستم اندروید قبل از فراخوانی اکتیویتی ، برای مطابقت دادن یکی از آن ها تلاش خواهد کرد.
  • ممکن است یک تگ <intent-filter> ، صفر ، یک یا بیشتر از یک catgory را در خود لیست کند. اگر هیچ category ذکر نشده باشد سیستم اندروید به طور پیش فرض تطابق این category را موفقیت آمیز در نظر خواهد گرفت، اما اگر بیش از یک category ذکر شده باشد، سیستم اندروید ، تک تک آن ها را تست کرده و باید هر category در شی Intent با یک category در فیلتر مطابقت داشته باشد.
  • هر تگ <data> می تواند یک URI و یک نوع داده (MIME media type) را مشخص کند. ویژگی های مجزایی نیز شبیه scheme، host، port و path برای هر قسمت از URI وجود دارد. یک شی Intent که شامل هر دو بخش URI و نوع داده می شود، در صورتی آزمون تطابق را قبول می شود که نوع داده اش با یکی از داده های ذکر شده در فیلتر مطابقت داشته باشد.

مثال

در این مثال می بینیم که سیستم اندروید چگونه تعارض تطابق یک Intent با دو اکتیوی را حل می کند؛ و پس از آن چطور یک اکتیویتی سفارشی را با یک فیلتر فراخوانی می کند و در نهایت به سراغ مورد استثنا می رویم : یعنی هنگامی که هیچ اکتیوتی مناسبی برای Intent تعریف نشده باشد.

1) با استفاده ازandroid studio یک پروژه ی جدید با نام Android Filters تحت بسته یcom.example.android.filters ایجاد کنید

2)فایل src/com.example.android.filters/MainActivity.java را با افزودن گیرنده های تلنگر برای سه دکمه تغییر دهید.

3)فایل src/com.example.android.filters/CustomActivity.java را برای تعریف یک اکتیویتی که توسط intetn های مختلف اجرا خواهد شد، ایجاد کنید.

4)فایل res/layout/activity_main.xml را با افزودن سه دکمه و دو متن تغییر دهید.

5)فایل layout (صفحه بندی) res/layout/custom_view.xml را با یک <TextView> ایجاد کنید که نشان دهنده ی اطلاعات ارسال شده از طریق intent خواهد بود.

6) ثابت های رشته ای مورد نیاز را در فایل res/values/strings.xml تعریف کنید.

7) محتوای فایل AndroidManifest.xml را با افزودن تگ <intent-filter> که معرف intent شما در اجرای اکتیویتی سفارشی (custom activity) است، تغییر دهید.

8) اپلیکیشن را را با استفاده از شبیه ساز (امولاتور) سیستم اندروید اجرا و نتیجه بدست آمده  را بررسی نمایید.

 

مثال زیر تغییر یافته ی main activity file  را نشان می دهد :

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);
         }
      });
   }
}


در زیر محتوای فایل main activity به صورت 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/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: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 :

<?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.clicksite7.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.clicksite7.myapplication.CustomActivity">

         <intent-filter>
            <action android:name = "android.intent.action.VIEW" />
            <action android:name = "com.example.clicksite7.myapplication.LAUNCH" />
            <category android:name = "android.intent.category.DEFAULT" />
            <data android:scheme = "http" />
         </intent-filter>

      </activity>
   </application>

</manifest>

اگر تا به اینجا همه چیز خوب پیش رفته باشد شما میتوانید نتیجه را در امولاتور ببینید .

در امولاتور سه دکمه خواهید دید ؛ اجازه دهید با اولین دکمه یعنی “Start Browser with VIEW Action ” کار را آغاز کنیم. در اینجا ما اکتیویتی سفارشی خودمان را با فیلتر ” android.intent.action.VIEW” تعریف کرده ایم، اما برای “ACTION_VIEW” یک اکتیویتی دیگر نیز به صورت دیفالت ، توسط سیستم اندروید تعریف شده است ، که باعث راه اندازی مرورگر می شود. بنابراین اندروید با استفاده از پنجره ای  از ما می خواهد یک اکتیویتی را برای اجرا شدن انتخاب کنیم. (نوع مرورگر را انتخاب میکنیم ) 

پس از انتخاب مرورگر سایت clicksite باز خواهد شد . اگر IndentDemo را انتخاب کنید اندروید CustomActivity،  را راه اندازی خواهد کرد که تنها داده ارسالی را دریافت می کند.

پایان

فصلِ: 20 , تعداد قسمت ها: 238 , سطح: صفر تا صد

این فصل در یک نگاه:

فصل رایگان مربوط به مفاهیم php و api نویسی …

توضیحات کلی مجموعه: دوره متخصص اندروید کلیک سایت کامل ترین دوره جامع برنامه نویسی اندروید(حتما دمو دوره را ببینید)   چرا دوره متخصص جایگزین دوره صفرتاصد اندروید شد؟ کلیک سایت تصمیم گرفت …
فصلِ: 30 , تعداد قسمت ها: 182 , سطح: صفر تا صد

این فصل در یک نگاه:

آموزش ساخت اپلیکیشن علی بابا-آموزش کالبک ها-…

دوره "متخصص" جایگزین دوره صفرتاصد اندروید شد. برای دیدن دوره متخصص اندروید بر روی لینک زیر کلیک کنید : https://b2n.ir/d36082 چرا دوره متخصص جایگزین دوره صفرتاصد شده است؟چرا باید دوره متخص…
فصلِ: 11 , تعداد قسمت ها: 121 , سطح: صفر تا صد

این فصل در یک نگاه:

عملیات شبیه فیلتر-ساخت الرت دیالوگ وچیدمان براساس فروش-مرتب سازی-نحوه خطایابی-استفاده از bottom sheet در اندروید-سبد خری…

آموزش ساخت اپلیکیشن اندروید دیجی کالا  : ساخت برنامه اندروید یکی از پر طرفدارترین آموزش های کلیک سایت می باشد. با توجه به فراگیر شدن سیستم اندروید و آشنایی افراد با این سیستم ، برنامه های ک…
فصلِ: 3 , تعداد قسمت ها: 179 , سطح: صفر تا صد

این فصل در یک نگاه:

در این دوره آموزشی ، برنامه نویسی اندروید و ios را با استفاده از زامارین خواهیم آموخت. همچنین به صورت کاملا پروژه محور ، اپلیکیشن فروشگاهی مشابه دیجی کالا را پیاده سازی خواهیم کرد. در انته…
فصلِ: 2 , تعداد قسمت ها: 58 , سطح: صفر تا صد

این فصل در یک نگاه:

توضیحات کلی مجموعه: سرفصل های دوره آموزش ساخت اپلیکیشن فیلیمو معرفی اهداف دوره مقدمه و بررسی پیش نیازهای دوره بررسی جزئی و …
فصلِ: 1 , تعداد قسمت ها: 9 , سطح: صفر تا صد

این فصل در یک نگاه:

آموزش ساخت api key-آموزش استفاده از GPS گوشی ونمایش مکان شخص برروی نقشه-متصل کردن چند نقطه برروی نقشه با خط-رسم چند ضلعی…

حتما دمو دوره رو ببینید اولین دوره کامل کار با نقشه گوگل ومسیریابی در نقشه گوگل(این اموزش مشابه فارسی ندارد) اموزش کار با نقشه گوگل در برنامه نویسی اندروید یکی از مهم ترین مباحث هست که …
فصلِ: 1 , تعداد قسمت ها: 14 , سطح: صفر تا صد

این فصل در یک نگاه:

ساخت انواع نوتیفیکیشن ها -کار با وب سرویس پوشه-ارسال نوتیفیکیشن با سرویس پوشه-ارسال نوتیفیکیشن با one signal-اموزش کار ب…

با این مجموعه همه چیز در مورد نوتیفیکیشن و فایربیس رو خواهید اموخت یکی از مواردی که در استخدام کاربران در شرکت های برنامه نویسی بسیار موثر هست مبحث کار با firebase هست که ما دراین دوره ام…
فصلِ: 1 , تعداد قسمت ها: 16 , سطح: صفر تا صد

این فصل در یک نگاه:

لیست کردن فایل های صوتی ویدیویی گوشی-طاحی متریال وزیبا-استفاده از تب بندی-حرکت سیک بار همراه با اهنگ وزمان-ست کردن زمان …

توضیحات کلی مجموعه: اموزش ساخت یک موزیک پلیر و ویدیو پلیر ح رفه ای که کاملا کاربردی است و قابلیت نصب روی گوشی های مختلف را دارد از جمله امکانات این اپلیکیشن: لیست کردن فایل های صوتی وید…
فصلِ: 1 , تعداد قسمت ها: 61 , سطح: صفر تا صد

این فصل در یک نگاه:

اموزش ساخت اپلیکیشن کافه بازار-اشتراک گذاری اپلیکیشن-کار با رتروفیت-کاربا ران تیم پرمیشن- کار با فرگمنت ها-کار با sqlite…

دوره "متخصص" جایگزین دوره های اندروید شد. برای دیدن دوره متخصص اندروید بر روی لینک زیر کلیک کنید : https://b2n.ir/d36082 چرا دوره متخصص جایگزین دیگر دوره های اندروید شده است؟چرا باید دو…
فصلِ: 1 , تعداد قسمت ها: 9 , سطح: صفر تا صد

این فصل در یک نگاه:

پرداخت درون برنامه ای بازار-اموزش فروش سکه-اموزش فروش اشتراک-اموزش فروش نسخه پولی-اموزش چک کردن خرید کردن کاربر-اموزش کا…

دوره "متخصص" جایگزین دوره های اندروید شد. برای دیدن دوره متخصص اندروید بر روی لینک زیر کلیک کنید : https://b2n.ir/d36082 چرا دوره متخصص جایگزین دیگر دوره های اندروید شده است؟چرا باید دوره…
فصلِ: 1 , تعداد قسمت ها: 20 , سطح: صفر تا صد

این فصل در یک نگاه:

آموزش کامل پیکربندی mvp-اموزش اتصال با سرور با رتروفیت و rxjava-اموزش کار با دیتابیس-آموزش کار با bottom navigation-اموز…

دوره "متخصص" جایگزین دوره های اندروید شد. برای دیدن دوره متخصص اندروید بر روی لینک زیر کلیک کنید : https://b2n.ir/d36082 چرا دوره متخصص جایگزین دیگر دوره های اندروید شده است؟چرا باید دوره…
فصلِ: 1 , تعداد قسمت ها: 35 , سطح: متوسط

این فصل در یک نگاه:

این آموزش در یک فصل شامل 35 جلسه آموزش تصویری به همراه سورس کد ارائه شده است.…

سرفصل ها مقدمه و معرفی متد آموزشی بررسی جزئی و خلاصه موارد موردنیاز پیش از آموزش شامل: کار با ویوها،  کار با کتابخانه های مختلف و ... …
فصلِ: 1 , تعداد قسمت ها: 1 , سطح: صفر تا صد

این فصل در یک نگاه:

آموزش ارسال پیامک با سامانه مدیر پیامک-ارسال کد فعال سازی برنامه با پیامک-اعتبارسنجی کد فعال سازی-ثبت نام در اپلیکیشن با…

دوره "متخصص" جایگزین دوره های اندروید شد. برای دیدن دوره متخصص اندروید بر روی لینک زیر کلیک کنید : https://b2n.ir/d36082 چرا دوره متخصص جایگزین دیگر دوره های اندروید شده است؟چرا باید دوره…
فصلِ: 2 , تعداد قسمت ها: 19 , سطح: صفر تا صد

این فصل در یک نگاه:

آموزش ارسال توکن در اندروید -اموزش امنیت در برنامه نویسی اندروید-اموزش ارسال توکن در هدر در اندروید-اموزش ساخت token -ام…

توضیحات کلی مجموعه: دموی دوره را حتما ببینید دوره امنیت و دیزاین پترن در برنامه نویسی اندروید که شامل دو فصل هست. فصل اول شامل اموزش singletone design patern-builder design patern-command …
فصلِ: 2 , تعداد قسمت ها: 44 , سطح: صفر تا صد

این فصل در یک نگاه:

در فصل دوم این دوره بیشتر میپردازیم به کار با کتابخانه ها و موارد پیشرفته تر مانند دوربین ، ضبط صدا، دیتا بیس ، و .....…

توضیحات کلی مجموعه: سلام خدمت کلیک سایتی های عزیز مجموعه آموزشی صفر تا صد برنامه نویسی اندروید در محیط بیسیک 4 اندروید (basic 4 android) معرفی محیط بیسیک 4 اندروید محیط b4a  تحت کمپانی A…
فصلِ: 3 , تعداد قسمت ها: 61 , سطح: صفر تا صد

این فصل در یک نگاه:

فصل جدید و اپدیت های جدید-آموزش کار با برودکست ریسیور در کاتلین-آموزش چک کردن اتصال به اینترنت در کاتلین-اموزش اپلود کرد…

دوره "متخصص" جایگزین دوره های اندروید شد. برای دیدن دوره متخصص اندروید بر روی لینک زیر کلیک کنید : https://b2n.ir/d36082 چرا دوره متخصص جایگزین دیگر دوره های اندروید شده است؟چرا باید دوره…
فصلِ: 5 , تعداد قسمت ها: 21 , سطح: متوسط

این فصل در یک نگاه:

نحوه ارورگیری-رفع ایراد-رفع مشکل-اشتراک گذاری مطالب-ساخت اکتیویتی تنظیمات-اشتراک گذاری مطالب-جستجو کردن…

دوره "متخصص" جایگزین دوره های اندروید شد. برای دیدن دوره متخصص اندروید بر روی لینک زیر کلیک کنید : https://b2n.ir/d36082 چرا دوره متخصص جایگزین دیگر دوره های اندروید شده است؟چرا باید دوره…
فصلِ: 5 , تعداد قسمت ها: 128 , سطح: صفر تا صد

این فصل در یک نگاه:

پرداخت درون برنامه ای بازار با کاتلین…

دوره "متخصص" جایگزین دوره های اندروید شد. برای دیدن دوره متخصص اندروید بر روی لینک زیر کلیک کنید : https://b2n.ir/d36082 چرا دوره متخصص جایگزین دیگر دوره های اندروید شده است؟چرا باید دوره…
فصلِ: 8 , تعداد قسمت ها: 62 , سطح: صفر تا صد

این فصل در یک نگاه:

اپلود تصاویر روی سرور نود جی اس-کار با کانال در چت- ساخت کانال-ساخت گروه-تفاوت کانال و گروه-انلاین بودن-ارسال تصاویر در …

  توضیحات کلی مجموعه آموزش اندروید اپلیکیشن چت مشابه تلگرام( با استفاده از Socket IO ): دموی مجموعه را حتما ببینید دراین دوره سعی میشود بسیاری از اپشن هایی که اپلیکیشن موبوگرام داراست ر…
فصلِ: 6 , تعداد قسمت ها: 194 , سطح: صفر تا صد

این فصل در یک نگاه:

در این فصل آپدیت های مربوط به دوره را قرار میدهیم…

با سلام و خسته نباشد خدمت کلیک سایتی های عزیز در ادامه با توضیحات مختصری درمورد دوره ی react native با ما همراه باشید: React Native چیست؟ قطعا یکی از آرزوهای برنامه نویسان این میباشد که ب…

تولید شده توسط کلیک سایت

پشتیبانی آنلاین
آماده پاسخگویی هستیم
انتخاب تصویر جهت ارسال:
در حال ضبط صدا

(جهت توقف و یا لغو ضبط از دکمه های زیر استفاده کنید)

توقف و ارسال :
لغو ضبط
در حال حاضر تمامی کارشناسان آفلاین هستند. همواره می توانید با شماره تلگرام / واتساپ 09010005000 به صورت آنلاین با ما در ارتباط باشید. جهت ورود به واتساپ کلیک کنید
0 پیام جدید
پشتیبان در حال تایپ ...
ارسال تصویر ضبط صدا
0 کارشناسان آنلاین می باشند
این گفت و گو توسط پشتیبان به اتمام رسید