Latest web development tutorials

نية الروبوت (نية) ومرشح (فلتر)

الروبوت القصد من ذلك هو توصيف نظري من العمل ليتم تنفيذها. ويمكن أن تبدأ قبل الأنشطة startActivity، broadcastIntent لإرسال البث إلى أي مكون من مكونات جهاز الراديو المهتمة، startService (نية) أو bindService (نية، ServiceConnection، الباحث) للاتصال مع خدمات الخلفية.

النية نفسها (كائن النوايا) هي بنية بيانات السلبي الذي يحمل وصف مجردة من العملية التي يتعين القيام بها.

على سبيل المثال، لديك نشطة، فتح عميل البريد وإرسال البريد إلى جهاز الروبوت الخاص بك. لهذا الغرض، وكنت في حاجة الى ارسال النشاط ACTION_SEND مع محدد مناسبة لمعالج نية الروبوت. محدد محددة تعطى واجهة مناسبة للسماح للمستخدم أن تقرر كيفية إرسال البيانات رسالته.

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 من خلال المتصفح. لهذا الغرض، أرسل سيرتك الحدث ACTION_WEB_SEARCH نية لمعالجات الروبوت نية لفتح عنوان معين في المتصفح الخاص بك. نية المعالج عن طريق تحليل مجموعة من الأنشطة، واختيار النشاط أنسبها كنت تنوي، في هذه الحالة، فإن النشاط مستعرض ويب. نية المعالج لتمر على صفحة الويب الخاصة بك عنوان لمستعرض ويب، وفتح النشاط مستعرض ويب.

String q = "http://www.uprogrammer.cn";
Intent intent = new Intent(Intent.ACTION_WEB_SEARCH );
intent.putExtra(SearchManager.QUERY, q);
startActivity(intent);

والمثال أعلاه العثور على "www.uprogrammer.cn" محرك البحث على الروبوت، ويعطي نتائج على النشاط الكلمة.

لكل مكون - الأنشطة والخدمات، استقبال بث لها آلية مستقلة لنقل القصد.

لا. طريقة والوصف
1 Context.startActivity (): قصد تمريرها إلى الطريقة المستخدمة لبدء نشاط جديد أو لديك نشاط قائم على القيام بشيء جديد.
2 Context.startService (): قصد تمريرها إلى الأسلوب، تهيئة الخدمة، أو معلومات جديدة إلى خدمة الثابتة.
3 Context.sendBroadcast (): قصد تمريرها إلى الأسلوب، وسيتم تسليم هذه المعلومات لجميع أجهزة الاستقبال بث المهتمين.

كائن القصد

كائن القصد هو عبارة عن حزمة من المعلومات عن عنصر تتلقى نوايا كما يتلقى الروبوت نظام المعلومات.

يتضمن كائن عازمة على المكونات التالية، اعتمادا على ما كنت ترغب في الاتصال أو تنفيذ.

العمل (العمل)

كان لها أن تكون جزءا من بنية الكائن، فهي تتمثل كسلسلة. بث القصد، والعمل في هذا الحدث، وسيتم إبلاغ. وسوف يكون العمل تحدد إلى حد كبير كيف يتم تنظيم باقي القصد. وتعرف الطبقة تنوي مجموعة من الإجراءات الثوابت المقابلة لنوايا مختلفة. ستجد هنا ل عمل معيار القصد الروبوت القائمة.

كائن النية في الحركة يمكن تعيينها من قبل طريقة setAction ()، عن طريق getAction () طريقة للقراءة.

البيانات (البيانات)

إضافة البيانات إلى نية مواصفات المرشح. هذه المواصفات يمكن أن يكون واحد فقط نوع البيانات (مثل نوع من الخلايا سمة)، وأوري، أو تشمل كلا من أنواع البيانات وأوري. من URI لتحديد سمات أجزاء مختلفة.

هذه الصفات تحدد شكل من عنوان الموقع هو اختياري، ولكن أيضا مستقلة عن بعضها البعض -

  • إذا لم يتم تحديد القصد وضع التصفية، يتم تجاهل جميع الممتلكات URI أخرى.
  • إذا لم تقم بتحديد مجموعة لالتصفية، يتم تجاهل سمات الساحلية، وسمات المسار.

طريقة setData () لا يمكن تحديد البيانات أوري، setType () يمكن فقط تحديد نوع البيانات الفوقية، setDataAndType () يمكن تحديد URI وعنصر أنواع في وقت واحد. URI التي كتبها getData () لقراءة، نوع من getType () لقراءتها.

وفيما يلي بعض الأمثلة على مجموعة الإجراءات / البيانات -

لا. العمل / البيانات ووصف
1 محتوى ACTION_VIEW: // اتصالات / الناس / 1: يتم عرض 1 للحصول على المعلومات هوية المستخدم.
2 محتوى ACTION_DIAL: // اتصالات / الناس / 1: طالب مشاهدة الهاتف، وملء بيانات المستخدم 1.
3 الهاتف ACTION_VIEW: 123: طالب مشاهدة الهاتف، وملء عدد معين.
4 الهاتف ACTION_DIAL: 123: طالب مشاهدة الهاتف، وملء عدد معين.
5 محتوى ACTION_EDIT: // اتصالات / الناس / 1: تحرير المعلومات هوية المستخدم 1.
6 محتوى ACTION_VIEW: // اتصالات / الناس /: عرض قائمة من المستخدمين لعرضها.
7 ACTION_SET_WALLPAPER: حدد إعداد عرض خلفية.
8 ACTION_SYNC: مزامنة البيانات، القيمة الافتراضية: android.intent.action.SYNC
9 ACTION_SYSTEM_TUTORIAL: منصة مفتوحة تعريف البرنامج التعليمي (أو تقصير بداية البرنامج التعليمي البرنامج التعليمي)
10 ACTION_TIMEZONE_CHANGED: عندما يتم تغيير المنطقة الزمنية إعلام
11 ACTION_UNINSTALL_PACKAGE: تشغيل برنامج إلغاء التثبيت الافتراضية

فئة

الفئة هو جزء اختياري من القصد، هو سلسلة يحتوي على معلومات إضافية حول أنواع المكونات لتكون النوايا معالجتها. addCategory () الأسلوب مع نية لإضافة فئة كائن، طريقة removeCategory () لإزالة قبل فئات مضيفا getCategories () يحصل كل مجموعة إلى فئات الكائن عازمة. ستجد هنا ل الروبوت معيار القصد فئة القائمة.

يمكنك عرض الأقسام التالية مرشحات عازمة على فهم كيفية استخدام فئات من نية المقابلة لتحديد الأنشطة المناسبة.

بيانات إضافية

يتم تمرير هذا التجمع للتعامل مع النية لمزيد من المعلومات الأساسية الواردة في هذا التقرير. مجموعات من putExtras ()، getExtras () طريقة للقراءة. ستجد هنا ل معيار نية بيانات إضافية الروبوت القائمة.

علامة

هذه العلامات هي جزء اختياري من القصد، مما يدل على نظام أندرويد كيفية الشروع في النشاط، كيف بعد بدء العلاج.

لا. العلامات والأوصاف
1 FLAG_ACTIVITY_CLEAR_TASK: إذا كانت نية، ومرورا Context.startActivity، هذه العلامة سوف يؤدي جميع المهام الحالية المرتبطة بالنشاط أخلى قبل أن يبدأ الحدث. والأنشطة يكون جذر مهمة فارغة، يتم إنهاء كل نشاط من العمر. استخدام علامة يمكن الجمع بين FLAG_ACTIVITY_NEW_TASK.
2 FLAG_ACTIVITY_CLEAR_TOP: إذا تم تعيين هذا العلم، وسيتم بدأ الحدث في مهمة قيد التشغيل حاليا. هذا المرض لا يبدأ مثيل النشاط الجديد، يتم تشغيل كل نشاط على تشغيله، هذه النية كما يتم تسليم نية جديدة للأنشطة الحالية (حاليا في الأعلى).
3 FLAG_ACTIVITY_NEW_TASK: وتستخدم هذه العلامة عادة لمثل هذه الأنشطة على غرار "بداية" من السلوك: لتزويد المستخدمين مع سلسلة من البيانات يمكن أن تكتمل بشكل مستقل، وبدء فصل الأطفال الأنشطة كاملة.

اسم مكون

اسم كائن مكون هو اختياري مجال التمثيل الأنشطة والخدمات أو استقبال البث الطبقة. إذا وضع، يتم تمرير الكائن نية لتنفيذ مثيل لفئة تصميم وبخلاف ذلك، الروبوت نوايا أخرى غيرها من المعلومات لتحديد موقع الهدف مناسبة. اسم المكون من setComponent ()، setClass () أو setClassName () لاقامة، () من خلال الحصول على getComponent.


نوع نوايا

الروبوت يدعم نوعين من النوايا.

صورة

القصد واضح

العالم الداخلي من وجود نية واضحة لربط التطبيق، إذا كنت بحاجة إلى ربط نشاط إلى نشاط آخر، ونحن يمكن أن تظهر نية، ويبين الشكل التالي الاتصال عن طريق النقر على زر النشاط الأول إلى النشاط الثاني.

صورة

القصد من استهداف عنصر بالاسم، تستخدم عادة لتطبيق المعلومات الداخلية - مثل النشاط فرعية أو النشاط لبدء بدء أنشطة الأخوة. على سبيل المثال:

// 通过指定类名的显式意图
Intent i = new Intent(FirstActivity.this, SecondAcitivity.class);

// 启动目标活动
startActivity(i);

القصد الضمني

القصد من هذه الأهداف لا اسم، اسم مكون مجال فارغ. وغالبا ما تستخدم النوايا الضمنية لتفعيل مكونات التطبيقات الأخرى. على سبيل المثال:

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

رمز أعلاه سيتم إعطاء النتائج التالية:

صورة

يتلقى عنصر الهدف نية، يمكنك استخدام طريقة getExtras () للحصول على بيانات إضافية تنتقل عن طريق المكون المصدر. على سبيل المثال:

// 在代码中的合适位置获取包对象
Bundle extras = getIntent().getExtras();

// 通过键解压数据
String value1 = extras.getString("Key1");
String value2 = extras.getString("Key2");

أمثلة

يوضح المثال التالي استخدام نية الروبوت لإطلاق مجموعة متنوعة من ميزات Android التطبيقات المضمنة.

خطوة وصف
1 باستخدام الروبوت ستوديو IDE لإنشاء تطبيق الروبوت، واسمه تصفية النوايا، حزمة المسمى cn.uprogrammer.intentfilter. عند إنشاء المشروع، تأكد من أن SDK الهدف وترجمة مع أحدث نسخة من الروبوت SDK استخدام API متقدمة.
2 تعديل SRC ملف / cn.uprogrammer.intentfilter / MainActivity.java وإضافة رمز يحدد اثنين من المستمعين لاثنين من الأزرار المقابلة "تشغيل متصفح" و "بدء المكالمة"
3 تعديل RES / تخطيط / ملفات تخطيط activity_main.xml، والتخطيط عبر الإنترنت إضافة ثلاثة أزرار.
4 إطلاق محاكي أندرويد لتشغيل التطبيق والتحقق من نتائج التغييرات التي أدخلت على التطبيق.

ما يلي هو مضمون ملف SRC / cn.uprogrammer.intentfilter / MainActivity.java:

package cn.uprogrammer.intentfilter;

import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;


public class MainActivity extends ActionBarActivity {
    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.uprogrammer.cn"));
                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);
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.

        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

هنا هو مضمون RES / تخطيط / ملف activity_main.xml:

<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="意图实例"
        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="www.uprogrammer.cn"
        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/ic_launcher"
        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="启动浏览器"
        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="启动电话"
        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 / القيم / سلاسل / أكس، وتحديد اثنين من ثوابت جديدة.

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string name="app_name">Intent filter</string>
   <string name="action_settings">Settings</string>
</resources>

ما يلي هو المحتوى AndroidManifest.xml على الافتراضي:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cn.uprogrammer.intentfilter"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="22" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Base.Theme.AppCompat" >

        <activity
            android:name="cn.uprogrammer.intentfilter.MainActivity"
            android:label="@string/app_name" >

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

        </activity>

    </application>
</manifest>

دعونا فقط تشغيل التطبيقات المعدلة تصفية النوايا. أفترض أنك قمت بإنشائها AVD خلال بيئة التثبيت. فتح مشروعك في الملف النشط، انقر على شريط الأدوات صور رمز لتشغيل التطبيق في الروبوت الاستوديو. الروبوت ستوديو تثبيت التطبيق على AVD وبدء تشغيله. إذا سارت الامور بشكل جيد، وسوف يتم عرضها على نافذة المحاكي على النحو التالي:

صورة

الآن انقر على زر "ابدأ متصفح"، والتي سوف إطلاق متصفح، اعتمادا على تكوين وعرض http://www.uprogrammer.cn على النحو التالي:

صورة

بطريقة مماثلة، يمكنك النقر على زر "ابدأ المكالمات" لفتح واجهة الهاتف، والتي سوف تسمح لك لطلب أعطيت أرقام الهواتف.


مرشحات عازمة

لقد رأينا كيف أن استخدام نية لاستدعاء نشاط آخر. يستخدم نظام التشغيل أندرويد الفلاتر لتحديد مجموعة من الأنشطة والخدمات واستقبال البث التعامل مع عازمة، في حاجة إلى مساعدة من نية محددة فئة العمل، ونمط البيانات. استخدام <نية تصفية> العنصر في ملف البيان المدرجة في العمل، والفئات، وأنواع البيانات المناظرة في الأنشطة والخدمات، واستقبال البث.

يظهر المثال التالي جزء من ملف AndroidManifest.xml على يحددها العمل من cn.uprogrammer.intentfilter.CustomActivity نشطة يمكن أن يحدد فئات ومكالمات البيانات:

<activity android:name=".CustomActivity"
   android:label="@string/app_name">

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

</activity>

عندما يتم تعريف النشاط فوق مرشح، والأنشطة الأخرى يمكنك استخدام الطريقة التالية لاستدعاء هذا الحدث. استخدام android.intent.action.VIEW، استخدام العمل cn.uprogrammer.intentfilter.LAUNCH وتوفير فئة android.intent.category.DEFAULT.

يحدد عنصر الأنشطة ليتم استدعاؤها نوع البيانات المتوقعة. ومن الأمثلة على ما سبق، المطلوب للنشاط مخصص البيانات من كلمة "http: //" في البداية.

هذا هو الحال، من خلال تصفية، الغرض منه هو أن يتم تسليمها إلى أنشطة أو خدمات متعددة التي سيطلب من المستخدم لبدء التجمع. إذا كنت لا تجد العنصر المستهدف، يحدث استثناء.

قبل استدعاء الحدث، سلسلة من الروبوت تحقق الاختبار:

  • تصفية <نية تصفية> بحاجة لقائمة واحدة أو أكثر من العمل، لا يمكن أن تكون فارغة، تضم مرشح واحد على الأقل عنصر، وإلا فإنه سيتم منع جميع المقاصد. إذا ذكر إجراءات متعددة، الروبوت قبل استدعاء إجراء محاولة لتتناسب مع الأنشطة المذكورة فيه.
  • مرشح قد يتم سرد <نية تصفية> 0، واحد أو أكثر الفئات. وإذا ذكرت أي فئة، الروبوت من خلال هذا الاختبار، إذا كان هناك فئات متعددة المذكورة، ويقصد بها نوع من الاختبار، وتصنيف كل كائن النوايا يجب أن تطابق مرشح في الفئة.
  • كل عنصر يمكن تحديد URI ونوع البيانات (عنصر أنواع وسائل الإعلام). هناك ملكية منفصلة، ​​حيث أن كل جزء من URI: مخطط، المضيف، والميناء، والمسار. ونوع نوايا يتضمن URI، فقط نوع يتطابق مع نوع معين من أنواع تصفية البيانات المدرجة من خلال قسم الاختبار.

أمثلة

الأمثلة التالية هي بعض التعديلات من الأمثلة المذكورة أعلاه. هنا سوف نرى إذا كانت نية محددة لاستدعاء اثنين من الأحداث، الروبوت كيفية حل الصراع، وكيفية استخدام المرشحات لاستدعاء النشاط مخصص؛ إذا لم يكن هناك نية لتحديد الأنشطة المناسبة سوف يكون غير طبيعي.

خطوة تفسير
1 باستخدام الروبوت ستوديو IDE لإنشاء تطبيق الروبوت، واسمه تصفية النوايا، حزمة المسمى cn.uprogrammer.intentfilter. عند إنشاء المشروع، تأكد من أن SDK الهدف وترجمة مع أحدث نسخة من الروبوت SDK استخدام API متقدمة.
2 تعديل ملف SRC / cn.uprogrammer.intentfilter / MainActivity.java، إضافة رمز لتحديد ثلاثة المستمعين إلى ثلاثة أزرار المقابلة لتخطيط المحددة في الوثيقة.
3 إضافة ملف SRC / cn.uprogrammer.intentfilter / CustomActivity.java لتشمل النشاط الذي يمكن أن يكون المكالمات نية مختلفة.
4 تعديل RES / تخطيط / activity_main.xml ملف التخطيط الخطي إضافة ثلاثة أزرار.
5 إضافة RES / lauout / custom_view.xml ملف التخطيط، ببساطة إضافة لعرض البيانات المرسلة من قبل النية.
6 تعديل AndroidManifest.xml على الملف، إضافة <نية تصفية> تعريف قواعد تهدف إلى الاحتجاج الأنشطة المخصصة.
7 إطلاق محاكي أندرويد لتشغيل التطبيق والتحقق من نتائج التغييرات التي أدخلت على التطبيق.

ما يلي هو مضمون SRC / cn.uprogrammer.intentfilter / MainActivity.java من:

package cn.uprogrammer.intentfilter;

import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;


public class MainActivity extends ActionBarActivity {
    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.uprogrammer.cn"));
                startActivity(i);
            }
        });

        b2=(Button)findViewById(R.id.button2);
        b2.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent i = new Intent("cn.uprogrammer.intentfilter.LAUNCH",Uri.parse("http://www.uprogrammer.cn"));
                startActivity(i);
            }
        });

        b3=(Button)findViewById(R.id.button3);
        b3.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent i = new Intent("cn.uprogrammer.intentfilter.LAUNCH",Uri.parse("https://www.uprogrammer.cn"));
                startActivity(i);
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.

        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

وهنا ما SRC / cn.uprogrammer.intentfilter / CustomActivity.java من:

package cn.uprogrammer.intentfilter;

import android.app.Activity;
        import android.net.Uri;
        import android.os.Bundle;
        import android.widget.TextView;

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 / تخطيط / activity_main.xml من:

<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="意图实例"
        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="www.uprogrammer.cn"
        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/ic_launcher"
        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="通过View动作启动浏览器"
        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="通过Launch动作启动浏览器"
        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" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="异常情况"
        android:id="@+id/button3"
        android:layout_below="@+id/button2"
        android:layout_alignLeft="@+id/button2"
        android:layout_alignStart="@+id/button2"
        android:layout_alignRight="@+id/textView2"
        android:layout_alignEnd="@+id/textView2" />

</RelativeLayout>

هنا هو مضمون RES / تخطيط / ملف 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="fill_parent"
   android:layout_height="fill_parent">

   <TextView android:id="@+id/show_data"
      android:layout_width="fill_parent"
      android:layout_height="400dp"/>

</LinearLayout>

هنا هو مضمون RES / القيم / ملف strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string name="app_name">My Application</string>
   <string name="action_settings">Settings</string>
</resources>

هنا هو محتوى ملف AndroidManifest.xml على:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cn.uprogrammer.intentfilter"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="22" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Base.Theme.AppCompat" >

        <activity
            android:name="cn.uprogrammer.intentfilter.MainActivity"
            android:label="@string/app_name" >

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

        </activity>

        <activity android:name="cn.uprogrammer.intentfilter.CustomActivity"
            android:label="@string/app_name">

        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <action android:name="cn.uprogrammer.intentfilter.LAUNCH" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="http" />
        </intent-filter>

        </activity>

    </application>
</manifest>

دعونا فقط تشغيل التطبيقات المعدلة تصفية النوايا. أفترض أنك قمت بإنشائها AVD خلال بيئة التثبيت. فتح مشروعك في الملف النشط، انقر على شريط الأدوات صور رمز لتشغيل التطبيق في الروبوت الاستوديو. الروبوت ستوديو تثبيت التطبيق على AVD وبدء تشغيله. إذا سارت الامور بشكل جيد، وسوف يتم عرضها على نافذة المحاكي على النحو التالي:

صورة

انقر على الزر الأول، "عن طريق عرض العمل لبدء المتصفح." نحن هنا تعريف النشاط عادتنا يحتوي على "android.intent.action.VIEW"، وكان قد تم تحديد نظام أندرويد لتتوافق مع الإجراء الافتراضي جهة نظر نشط لبدء مستعرض ويب، يعرض الروبوت الخيارات التالية لاختيار ما تريد لبدء النشاط:

صورة

إذا اخترت المتصفح، وسوف الروبوت إطلاق متصفح الويب وفتح موقع www.uprogrammer.cn. إذا اخترت الخيار IntentDemo، الروبوت سوف تبدأ CustomActivity، حال لم تفعل أي شيء، فقط التقاط وعرض البيانات التي تم تمريرها في TextView.

صورة

الآن، من خلال الزر الخلف ثم انقر على "العمل لاطلاق قبل بدء تشغيل متصفح" زر، حيث الروبوت تطبيق المرشحات لتحديد الأنشطة المحددة، وببساطة بدء الأنشطة المخصصة.

مرة أخرى استخدام الزر مرة أخرى للعودة وانقر على زر "الظروف الاستثنائية"، في محاولة لايجاد واحد حيث القصد الروبوت التي قدمها مرشحات فعالة، ولكن لا يمكن العثور على تعريف النشاط الفعال. لأننا استخدام https بدلا من البيانات المتشعب، ونظرا للعمل الصحيح، مرة واحدة الروبوت إنشاء استثناء. على النحو التالي:

صورة