เจตนาใน Android คืออะไร?


347
  • คืออะไรเจตจำนงใน Android?
  • ใครบางคนสามารถอธิบายรายละเอียดด้วยตัวอย่างได้หรือไม่?
  • ประเภทของความตั้งใจคืออะไรและทำไมเราถึงใช้มัน
  • เหตุใด Intent จึงมีความสำคัญใน Android

เช่น Windows ที่เป็นระบบปฏิบัติการแบบข้อความและแจ้งให้ผู้ใช้ป้อนโปรแกรมด้วยการส่งข้อความถึงพวกเขาโดยใช้เจตนาที่จะทำเช่นนั้น!
AminM

คำตอบ:


486

เจตนาเป็น "ความตั้งใจ" เพื่อดำเนินการ; กล่าวอีกนัยหนึ่ง

ออบเจ็กต์การส่งข้อความที่คุณสามารถใช้เพื่อร้องขอการดำเนินการจากส่วนประกอบแอปอื่น

ความตั้งใจนั้นเป็นข้อความที่จะบอกว่าคุณทำหรือต้องการบางสิ่งที่จะเกิดขึ้น แอพหรือระบบปฏิบัติการอาจฟังและขึ้นอยู่กับเจตนา คิดว่ามันเป็นอีเมลที่ส่งถึงเพื่อนหลายคนซึ่งคุณบอกให้ John รู้จักเพื่อนของคุณเพื่อทำบางสิ่งบางอย่างหรือให้เพื่อนที่สามารถทำ X ( "ตัวกรองเจตนา" ) เพื่อทำ X คนอื่น ๆ จะไม่สนใจอีเมล แต่จอห์น (หรือเพื่อนที่สามารถทำได้ X) จะตอบสนองต่อมัน

ในการรับฟังความตั้งใจในการออกอากาศ (เช่นรับโทรศัพท์หรือได้รับ SMS) คุณต้องใช้ตัวรับสัญญาณออกอากาศซึ่งจะถูกส่งผ่านจุดประสงค์ ที่จะประกาศว่าคุณสามารถจัดการอื่น app เจตนาเช่น "การถ่ายภาพ" คุณประกาศตัวกรองความตั้งใจในไฟล์ Manifest ของแอป

หากคุณต้องการที่จะดับความตั้งใจที่จะทำบางสิ่งบางอย่างเช่นผุดขึ้น Dialer คุณดับความตั้งใจที่จะบอกว่าคุณจะ


1
@Chirag Raval อะไรคือความแตกต่างระหว่างเจตนาและผู้ฟังการกระทำ?
Mayooran

1
โปรดอธิบายประโยคสุดท้ายอีกครั้งได้ไหม ถ้าคุณต้องการยิงออกไป ..
Shafizadeh

1
คล้ายกับตัวแทน C #?
พอล

การกระทำจริงหมายถึงคุณสามารถเริ่มองค์ประกอบหนึ่งจากส่วนประกอบอื่นโดยใช้เจตนา นั่นคือสิ่งที่มันถูกใช้เป็นหลักสำหรับ
Sreekanth Karumanaghat

นอกจากนี้เมื่อต้องการเพิ่มในสิ่งนี้ ... เจตนาคือแบบอะซิงโครนัส
Sreekanth Karumanaghat

165

เจตนาคืออะไร

เจตนานั้นเป็นข้อความที่ถูกส่งผ่านระหว่างส่วนประกอบ (เช่นกิจกรรม , บริการออกอากาศรับและเครื่องรับและผู้ให้บริการเนื้อหา ) ดังนั้นมันเกือบเทียบเท่ากับพารามิเตอร์ที่ส่งผ่านไปยังการเรียก API ความแตกต่างพื้นฐานระหว่างการเรียก API และส่วนประกอบที่เรียกใช้ผ่าน intents คือ:

  • การเรียก API นั้นซิงโครนัสในขณะที่การร้องขอตามเจตนานั้นไม่ตรงกัน
  • การเรียก API เป็นการรวมเวลาคอมไพล์ขณะที่การโทรตามเจตนาเป็นการรวมรันไทม์

แน่นอนว่า Intent สามารถทำงานได้เหมือนกับการเรียก API โดยใช้สิ่งที่เรียกว่าintents ชัดเจนซึ่งจะอธิบายในภายหลัง แต่บ่อยครั้งที่ความตั้งใจโดยนัยเป็นวิธีที่จะไปและนั่นคือสิ่งที่อธิบายไว้ที่นี่

องค์ประกอบหนึ่งที่ต้องการเรียกใช้ส่วนประกอบอื่นจะต้องแสดงความตั้งใจที่จะทำงานเท่านั้น และส่วนประกอบอื่น ๆ ที่มีอยู่และอ้างว่ามันสามารถทำงานผ่านตัวกรองความตั้งใจได้ถูกเรียกใช้โดยแพลตฟอร์ม Android เพื่อให้งานสำเร็จ ซึ่งหมายความว่าส่วนประกอบทั้งสองไม่ได้ตระหนักถึงการมีอยู่ของกันและกัน แต่ยังสามารถทำงานร่วมกันเพื่อให้ผลลัพธ์ที่ต้องการสำหรับผู้ใช้ปลายทาง

การเชื่อมต่อที่มองไม่เห็นระหว่างส่วนประกอบนี้เกิดขึ้นได้จากการผสมผสานของ intent, ตัวกรองเจตนาและแพลตฟอร์ม Android

สิ่งนี้นำไปสู่ความเป็นไปได้อย่างมากเช่น:

  • มิกซ์แอนด์แมทช์หรือมากกว่าการเสียบและเล่นส่วนประกอบที่รันไทม์
  • การแทนที่แอปพลิเคชัน inbuilt Android ด้วยแอปพลิเคชันที่พัฒนาขึ้นเอง
  • ระดับคอมโพเนนต์จะใช้ซ้ำภายในและระหว่างแอปพลิเคชัน
  • บริการปฐมนิเทศในระดับละเอียดที่สุดถ้าฉันจะพูด

นี่คือรายละเอียดทางเทคนิคเพิ่มเติมเกี่ยวกับเจตจำนงจากเอกสาร Android

เจตนาคือคำอธิบายที่เป็นนามธรรมของการดำเนินการที่จะดำเนินการ สามารถใช้กับstartActivityเพื่อเรียกใช้กิจกรรม BroadcastIntentเพื่อส่งไปยังคอมโพเนนต์BroadcastReceiver ที่สนใจและstartService (Intent)หรือbindService (Intent, ServiceConnection, int)เพื่อสื่อสารกับ Background Service

Intent จัดเตรียมสิ่งอำนวยความสะดวกสำหรับการดำเนินการรันไทม์ปลายล่าช้าระหว่างรหัสในแอปพลิเคชันต่างๆ การใช้งานที่สำคัญที่สุดคือการเปิดตัวของกิจกรรมซึ่งสามารถคิดได้ว่าเป็นกาวระหว่างกิจกรรม มันเป็นโครงสร้างข้อมูลแบบพาสซีฟที่เก็บคำอธิบายนามธรรมของการกระทำที่จะดำเนินการ ข้อมูลหลักในเจตนาคือ:

  • การดำเนินการการกระทำ ทั่วไปที่จะดำเนินการเช่น ACTION_VIEW, ACTION_EDIT, ACTION_MAIN เป็นต้น
  • data ข้อมูลที่จะทำงานเช่นบันทึกข้อมูลบุคคลในฐานข้อมูลผู้ติดต่อซึ่งแสดงเป็น Uri

เรียนรู้เพิ่มเติม


4
ฉันซาบซึ้งในการใช้แนวคิดวิทยาการคอมพิวเตอร์ในคำอธิบายนี้ สิ่งนี้ทำให้การอภิปรายมีความเป็นรูปธรรมมากขึ้นและเป็นประโยชน์อย่างยิ่งต่อผู้อ่านที่มีความรู้ทางด้านวิทยาศาสตร์คอมพิวเตอร์เป็นอย่างดี
Donal Lafferty

49

เจตนาเป็นวิธีการบอก Android สิ่งที่คุณต้องการจะทำ คุณอธิบายความตั้งใจของคุณ Intents สามารถใช้เพื่อส่งสัญญาณไปยังระบบ Android ที่มีเหตุการณ์บางอย่างเกิดขึ้น ส่วนประกอบอื่น ๆ ใน Android สามารถลงทะเบียนกับกิจกรรมนี้ผ่านตัวกรองการแสดงเจตนา

ต่อไปนี้เป็นความตั้งใจ 2 ประเภท

1. เจตนาชัดเจน

ใช้ในการเรียกองค์ประกอบที่เฉพาะเจาะจง เมื่อคุณรู้ว่าองค์ประกอบใดที่คุณต้องการเปิดใช้และคุณไม่ต้องการให้ผู้ใช้สามารถควบคุมองค์ประกอบที่จะใช้ฟรี ตัวอย่างเช่นคุณมีแอปพลิเคชันที่มี 2 กิจกรรม กิจกรรม A และกิจกรรม B คุณต้องการเปิดกิจกรรม B จากกิจกรรม A ในกรณีนี้คุณกำหนดเจตนาที่ชัดเจนที่กำหนดเป้าหมายไว้ที่กิจกรรม B จากนั้นใช้กิจกรรมนี้เพื่อโทรโดยตรง

2. เจตนาโดยนัย

ใช้เมื่อคุณมีความคิดว่าคุณต้องการทำอะไร แต่คุณไม่ทราบว่าควรเปิดตัวองค์ประกอบใด หรือถ้าคุณต้องการให้ผู้ใช้มีตัวเลือกให้เลือกระหว่างรายการส่วนประกอบที่จะใช้ หาก Intent เหล่านี้ถูกส่งไปยังระบบ Android จะทำการค้นหาส่วนประกอบทั้งหมดที่ลงทะเบียนสำหรับการกระทำที่เฉพาะเจาะจงและชนิดข้อมูล หากพบเพียงองค์ประกอบเดียว Android จะเริ่มองค์ประกอบโดยตรง ตัวอย่างเช่นคุณมีแอปพลิเคชันที่ใช้กล้องในการถ่ายภาพ หนึ่งในคุณสมบัติของแอปพลิเคชันของคุณคือคุณให้ผู้ใช้สามารถส่งรูปถ่ายที่เขาถ่ายได้ คุณไม่ทราบว่าแอปพลิเคชันประเภทใดที่ผู้ใช้สามารถส่งรูปถ่ายและคุณต้องการให้ผู้ใช้มีตัวเลือกในการเลือกแอปพลิเคชันภายนอกที่จะใช้หากเขามีมากกว่าหนึ่ง ในกรณีนี้คุณจะไม่ใช้ความตั้งใจที่ชัดเจน

เจตนาชัดเจนจะถูกส่งไปยังเป้าหมายเสมอไม่ว่าจะมีอะไร ตัวกรองไม่ได้รับการพิจารณา แต่ความตั้งใจโดยนัยจะถูกส่งไปยังองค์ประกอบเฉพาะในกรณีที่มันสามารถผ่านหนึ่งในตัวกรองขององค์ประกอบ

ตัวกรองเจตนา

หากมีการส่ง Intent ไปยังระบบ Android ระบบจะพิจารณาแอปพลิเคชันที่เหมาะสมสำหรับ Intent นี้ หากมีการลงทะเบียนส่วนประกอบหลายรายการสำหรับ Intent ประเภทนี้ Android จะเสนอตัวเลือกให้ผู้ใช้เปิดหนึ่งในนั้น

การกำหนดนี้อิงตาม IntentFilters IntentFilters ระบุประเภทของ Intent ที่กิจกรรมบริการหรือตัวรับสัญญาณออกอากาศสามารถตอบสนองได้ ตัวกรองเจตนาแจ้งความสามารถของส่วนประกอบ มันระบุว่าการกระทำหรือบริการสามารถทำอะไรได้บ้างและประเภทของการออกอากาศที่ผู้รับสามารถจัดการได้ จะช่วยให้องค์ประกอบที่สอดคล้องกันได้รับความตั้งใจของประเภทที่ประกาศ โดยทั่วไปแล้ว IntentFilters จะถูกกำหนดผ่านไฟล์ AndroidManifest.xml สำหรับ BroadcastReceiver ก็เป็นไปได้ที่จะกำหนดไว้ในการเข้ารหัส IntentFilters ถูกกำหนดโดยหมวดหมู่การกระทำและตัวกรองข้อมูล นอกจากนี้ยังสามารถมีข้อมูลเมตาเพิ่มเติม

หากส่วนประกอบไม่ได้กำหนดตัวกรองเจตนาคุณสามารถเรียกมันได้โดยเจตนาอย่างชัดเจนเท่านั้น

ต่อไปนี้เป็น2 วิธีในการกำหนดตัวกรอง

1. ไฟล์ Manifest

หากคุณกำหนดตัวกรองความตั้งใจในรายการของแอปพลิเคชันของคุณไม่จำเป็นต้องทำงานเพื่อตอบสนองต่อการกำหนดที่ระบุไว้ในตัวกรองมัน Android ลงทะเบียนตัวกรองเมื่อแอปพลิเคชันของคุณได้รับการติดตั้ง

2.BastCast รับสัญญาณ

หากคุณต้องการให้เครื่องรับสัญญาณออกอากาศของคุณได้รับเจตนาเมื่อแอปพลิเคชันของคุณทำงาน จากนั้นคุณควรกำหนดตัวกรองเจตนาของคุณในช่วงเวลาทำงาน (โดยทางโปรแกรม) โปรดทราบว่าสิ่งนี้ใช้ได้กับเครื่องรับสัญญาณออกอากาศเท่านั้น


12

หลังจากเขียนกิจกรรมเดียวแล้วก็จำเป็นต้องเปลี่ยนไปทำกิจกรรมอื่นเพื่อทำงานอื่นไม่ว่าจะมีหรือไม่มีข้อมูลจากกิจกรรมแรก

แพลตฟอร์ม Android ช่วยให้การเปลี่ยนแปลงผ่านทางอินเทอร์เฟซเจตนา

มีการนำคำมาจากที่นี่: การใช้การสาธิตเจตนาและฉันขอแนะนำให้คุณดูตัวอย่างนี้เพราะพวกเขายังได้จัดเตรียมไฟล์โค้ดไว้ด้วย เพื่อให้คุณสามารถใช้และเข้าใจได้ง่ายเหมือนกัน


จุดประสงค์มีไว้สำหรับการเปลี่ยนแปลงมากกว่าระหว่างกิจกรรม มันจะมีประโยชน์มากขึ้นในการให้ภาพรวม
Vaddadi Kartick

@KartickVaddadi เห็นด้วยกับจุดของคุณ นี่คือคำตอบของฉันสำหรับการใช้งานเจตนาหนึ่งครั้ง!
Paresh Mayani

Paresh ลิงก์ blog.vimviv.com/android/intent-androidไม่ทำงานอีกต่อไป :(
user2060383

9

เจตนา Android

Android Intent ให้คุณนำทางจากกิจกรรม Android หนึ่งไปยังกิจกรรมอื่น ด้วยตัวอย่างบทช่วยสอนนี้ยังพูดถึงความตั้งใจต่าง ๆ ของ Android

Android Intent สามารถกำหนดเป็นวัตถุข้อความอย่างง่ายซึ่งใช้ในการสื่อสารจากกิจกรรมหนึ่งไปอีกกิจกรรมหนึ่ง

เจตนากำหนดเจตนาของแอปพลิเคชัน พวกเขายังใช้ในการถ่ายโอนข้อมูลระหว่างกิจกรรม

สามารถใช้ Android Intent เพื่อทำงาน 3 อย่างต่อไปนี้:

  1. เปิดกิจกรรมหรือบริการอื่นจากกิจกรรมปัจจุบัน
  2. ส่งผ่านข้อมูลระหว่างกิจกรรมและบริการ
  3. มอบหมายความรับผิดชอบให้กับแอปพลิเคชันอื่น ตัวอย่างเช่นคุณสามารถใช้ Intents เพื่อเปิดแอปพลิเคชันเบราว์เซอร์เพื่อแสดง URL

เจตจำนงสามารถจำแนกได้เป็น 2 ประเภท ไม่มีคำหลักสำหรับหมวดหมู่นี้และเป็นเพียงการจัดหมวดหมู่กว้าง ๆ ของวิธีการใช้ intents ของ Android

Android Intent อย่างชัดเจน

Android Intent อย่างชัดเจนเป็นเจตนาที่คุณกำหนดองค์ประกอบที่จะต้องถูกเรียกโดยระบบ Android อย่างชัดเจน

 Intent MoveToNext = new Intent (getApplicationContext(), SecondActivity.class);

เจตนาของ Android โดยนัย

แอนดรอยด์แอนดรอยด์ Intent เป็นเจตนาที่แทนที่จะกำหนดส่วนประกอบที่แน่นอนคุณต้องกำหนดการกระทำที่คุณต้องการ การตัดสินใจที่จะจัดการการกระทำนี้จะถูกทิ้งไว้ที่ระบบปฏิบัติการ ระบบปฏิบัติการจะตัดสินใจว่าองค์ประกอบใดดีที่สุดที่จะเรียกใช้สำหรับเจตนาโดยนัย ให้เราดูตัวอย่าง:

    Intent sendIntent = new Intent();
    sendIntent.setAction(Intent.ACTION_SEND);

สำหรับข้อมูลเพิ่มเติมคุณสามารถเยี่ยมชมด้านล่าง

http://developer.android.com/reference/android/content/Intent.html


9

ตามเอกสารของพวกเขา:

เจตนาคือวัตถุที่ให้การเชื่อมโยงรันไทม์ระหว่างคอมโพเนนต์ที่แยกต่างหาก (เช่นสองกิจกรรม) The Intent แสดงถึง "เจตนาที่จะทำอะไรบางอย่าง" คุณสามารถใช้ intents สำหรับงานที่หลากหลาย แต่ส่วนใหญ่มักจะใช้เพื่อเริ่มต้นกิจกรรมอื่น

นี่คือลิงค์พร้อมตัวอย่าง: http://developer.android.com/training/basics/firstapp/starting-activity.html#BuildIntent

ตามที่อธิบายในเอกสารเพื่อเริ่มกิจกรรม (คุณต้องเข้าใจว่ากิจกรรมคืออะไร) ใช้จุดประสงค์ดังต่อไปนี้

/** Called when the user clicks the Send button */
public void sendMessage(View view) {
    Intent intent = new Intent(this, DisplayMessageActivity.class);
    EditText editText = (EditText) findViewById(R.id.edit_message);
    String message = editText.getText().toString();
    intent.putExtra(EXTRA_MESSAGE, message);
    startActivity(intent);
}

8

เจตนาคือคำอธิบายที่เป็นนามธรรมของการดำเนินการที่จะดำเนินการ สามารถใช้กับ startActivity เพื่อเรียกใช้กิจกรรม BroadcastIntent เพื่อส่งไปยังคอมโพเนนต์ BroadcastReceiver ที่สนใจและ startService (Intent) หรือ bindService (Intent, ServiceConnection, int) เพื่อสื่อสารกับบริการพื้นหลัง

สำหรับรายละเอียดเพิ่มเติมดูลิงค์เหล่านี้:

1) http://developer.android.com/reference/android/content/Intent.html

2) http://developer.android.com/guide/topics/intents/intents-filters.html

3) http://www.vogella.de/articles/AndroidIntent/article.html

มีบทความอีกมากมายที่พร้อมใช้งาน


5

เจตนาคืออะไร

มันเป็นชนิดของข้อความหรือข้อมูลที่ส่งผ่านไปยังส่วนประกอบ มันถูกใช้เพื่อเริ่มกิจกรรมแสดงหน้าเว็บส่ง sms ส่งอีเมล ฯลฯ

Android มีความตั้งใจอยู่สองประเภท:

ส่อเจตนา
เจตนาที่ชัดเจน

ความตั้งใจโดยนัยใช้เพื่อเรียกใช้ส่วนประกอบของระบบ

ตัวอย่าง

Intent i = newIntent(android.content.Intent.ACTION_VIEW,Uri.parse(“http://www.amazon.com”));

startActivity(i);

ความตั้งใจที่ชัดเจนถูกใช้เพื่อเรียกคลาสกิจกรรม

ตัวอย่าง

เจตนาเจตนา = newIntent (นี่ SecondActivity.class);

startActivity(intent);

คุณสามารถอ่านเพิ่มเติม

http://www.vogella.com/tutorials/AndroidIntent/article.html#intents_overview http://developer.android.com/reference/android/content/Intent.html


2

เจตนาคือคลาสที่ผูกข้อมูลสำหรับการดำเนินการบางอย่าง

ตัวอย่าง: การส่งข้อมูลกิจกรรมหนึ่งไปยังอีกแรงโน้มถ่วงเมื่อผู้ใช้ดำเนินการดังกล่าว

กิจกรรมปัจจุบัน


1

ในมุมมองกว้างเราสามารถกำหนดเจตนาเป็น

เมื่อกิจกรรมหนึ่งต้องการเริ่มกิจกรรมอื่นมันจะสร้างวัตถุที่เรียกว่าเจตนาที่ระบุว่าต้องการเริ่มกิจกรรมใด


0

แอปพลิเคชัน Android สามารถมีกิจกรรมเป็นศูนย์หรือมากกว่านั้น เมื่อแอปพลิเคชันของคุณมีมากกว่าหนึ่งกิจกรรมคุณมักต้องเลื่อนจากกิจกรรมหนึ่งไปอีกกิจกรรมหนึ่ง ใน Android คุณนำทางระหว่างกิจกรรมผ่านสิ่งที่เรียกว่าเจตนา คุณสามารถส่งข้อมูลบางอย่างไปยังกิจกรรมที่คุณต้องการเริ่มต้นด้วยความตั้งใจโดยใช้ putExtra ()


0

จากลิงค์กระดาษDeep Dive into Android IPC/Binder Framework atAndroid Builders Summit 2013

ความตั้งใจนั้นเป็นที่เข้าใจกันในสายเล็ก ๆ แต่มีประสิทธิภาพ

  1. Android รองรับรูปแบบที่เรียบง่ายของ IPC (การสื่อสารระหว่างกระบวนการ) ผ่านทาง Intents
  2. การส่งข้อความแสดงเจตนาเป็นกรอบสำหรับการสื่อสารแบบอะซิงโครนัสระหว่างส่วนประกอบ Android (กิจกรรมบริการผู้ให้บริการเนื้อหาผู้รับสัญญาณออกอากาศ)
  3. ส่วนประกอบเหล่านั้นอาจทำงานในแอพเดียวกันหรือต่างกัน (เช่นกระบวนการ)
  4. เปิดใช้งานทั้งแบบจุดต่อจุดและเผยแพร่โดเมนการส่งข้อความสมัครสมาชิก
  5. เจตนาแสดงถึงข้อความที่มีคำอธิบายของการดำเนินการที่จะดำเนินการเช่นเดียวกับข้อมูลที่จะส่งผ่านไปยังผู้รับ

จากกระทู้นี้คำตอบง่ายๆของสถาปนิก Dianne Hackborn ระบุว่ามันเป็นแบบdata containerนั้นจริงๆ

จากมุมมองสถาปัตยกรรม android :

เจตนาเป็นที่เก็บข้อมูลที่ใช้สำหรับการสื่อสารระหว่างกระบวนการ มันถูกสร้างขึ้นBinderจากมุมมองสถาปัตยกรรม Android


0

ความตั้งใจใช้เพื่อเริ่มต้นกิจกรรมอื่นจากกิจกรรมหนึ่งโดยทั่วไปจะใช้เพื่อวัตถุประสงค์หลายอย่างเช่นการส่งข้อมูลไปยังกิจกรรมอื่นจากกิจกรรมหนึ่งและเพื่อจุดประสงค์

พวกมันมีสองประเภท

  1. เจตนาโดยนัย

  2. เจตจำนงที่ชัดเจน

ในฐานะผู้เริ่มต้นฉันรู้เรื่องนี้มากฉันคิดว่านี่จะให้ความคิดพื้นฐานบางอย่างเกี่ยวกับเจตนาของ Android


2
โปรดอ่านลิงค์นี้เกี่ยวกับวิธีการตอบคำถาม
Bonatti
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.