- คืออะไรเจตจำนงใน Android?
- ใครบางคนสามารถอธิบายรายละเอียดด้วยตัวอย่างได้หรือไม่?
- ประเภทของความตั้งใจคืออะไรและทำไมเราถึงใช้มัน
- เหตุใด Intent จึงมีความสำคัญใน Android
คำตอบ:
เจตนาเป็น "ความตั้งใจ" เพื่อดำเนินการ; กล่าวอีกนัยหนึ่ง
ออบเจ็กต์การส่งข้อความที่คุณสามารถใช้เพื่อร้องขอการดำเนินการจากส่วนประกอบแอปอื่น
ความตั้งใจนั้นเป็นข้อความที่จะบอกว่าคุณทำหรือต้องการบางสิ่งที่จะเกิดขึ้น แอพหรือระบบปฏิบัติการอาจฟังและขึ้นอยู่กับเจตนา คิดว่ามันเป็นอีเมลที่ส่งถึงเพื่อนหลายคนซึ่งคุณบอกให้ John รู้จักเพื่อนของคุณเพื่อทำบางสิ่งบางอย่างหรือให้เพื่อนที่สามารถทำ X ( "ตัวกรองเจตนา" ) เพื่อทำ X คนอื่น ๆ จะไม่สนใจอีเมล แต่จอห์น (หรือเพื่อนที่สามารถทำได้ X) จะตอบสนองต่อมัน
ในการรับฟังความตั้งใจในการออกอากาศ (เช่นรับโทรศัพท์หรือได้รับ SMS) คุณต้องใช้ตัวรับสัญญาณออกอากาศซึ่งจะถูกส่งผ่านจุดประสงค์ ที่จะประกาศว่าคุณสามารถจัดการอื่น app เจตนาเช่น "การถ่ายภาพ" คุณประกาศตัวกรองความตั้งใจในไฟล์ Manifest ของแอป
หากคุณต้องการที่จะดับความตั้งใจที่จะทำบางสิ่งบางอย่างเช่นผุดขึ้น Dialer คุณดับความตั้งใจที่จะบอกว่าคุณจะ
เจตนานั้นเป็นข้อความที่ถูกส่งผ่านระหว่างส่วนประกอบ (เช่นกิจกรรม , บริการออกอากาศรับและเครื่องรับและผู้ให้บริการเนื้อหา ) ดังนั้นมันเกือบเทียบเท่ากับพารามิเตอร์ที่ส่งผ่านไปยังการเรียก API ความแตกต่างพื้นฐานระหว่างการเรียก API และส่วนประกอบที่เรียกใช้ผ่าน intents คือ:
แน่นอนว่า Intent สามารถทำงานได้เหมือนกับการเรียก API โดยใช้สิ่งที่เรียกว่าintents ชัดเจนซึ่งจะอธิบายในภายหลัง แต่บ่อยครั้งที่ความตั้งใจโดยนัยเป็นวิธีที่จะไปและนั่นคือสิ่งที่อธิบายไว้ที่นี่
องค์ประกอบหนึ่งที่ต้องการเรียกใช้ส่วนประกอบอื่นจะต้องแสดงความตั้งใจที่จะทำงานเท่านั้น และส่วนประกอบอื่น ๆ ที่มีอยู่และอ้างว่ามันสามารถทำงานผ่านตัวกรองความตั้งใจได้ถูกเรียกใช้โดยแพลตฟอร์ม Android เพื่อให้งานสำเร็จ ซึ่งหมายความว่าส่วนประกอบทั้งสองไม่ได้ตระหนักถึงการมีอยู่ของกันและกัน แต่ยังสามารถทำงานร่วมกันเพื่อให้ผลลัพธ์ที่ต้องการสำหรับผู้ใช้ปลายทาง
การเชื่อมต่อที่มองไม่เห็นระหว่างส่วนประกอบนี้เกิดขึ้นได้จากการผสมผสานของ intent, ตัวกรองเจตนาและแพลตฟอร์ม Android
สิ่งนี้นำไปสู่ความเป็นไปได้อย่างมากเช่น:
นี่คือรายละเอียดทางเทคนิคเพิ่มเติมเกี่ยวกับเจตจำนงจากเอกสาร Android
เจตนาคือคำอธิบายที่เป็นนามธรรมของการดำเนินการที่จะดำเนินการ สามารถใช้กับstartActivityเพื่อเรียกใช้กิจกรรม BroadcastIntentเพื่อส่งไปยังคอมโพเนนต์BroadcastReceiver ที่สนใจและstartService (Intent)หรือbindService (Intent, ServiceConnection, int)เพื่อสื่อสารกับ Background Service
Intent จัดเตรียมสิ่งอำนวยความสะดวกสำหรับการดำเนินการรันไทม์ปลายล่าช้าระหว่างรหัสในแอปพลิเคชันต่างๆ การใช้งานที่สำคัญที่สุดคือการเปิดตัวของกิจกรรมซึ่งสามารถคิดได้ว่าเป็นกาวระหว่างกิจกรรม มันเป็นโครงสร้างข้อมูลแบบพาสซีฟที่เก็บคำอธิบายนามธรรมของการกระทำที่จะดำเนินการ ข้อมูลหลักในเจตนาคือ:
- การดำเนินการการกระทำ ทั่วไปที่จะดำเนินการเช่น ACTION_VIEW, ACTION_EDIT, ACTION_MAIN เป็นต้น
- data ข้อมูลที่จะทำงานเช่นบันทึกข้อมูลบุคคลในฐานข้อมูลผู้ติดต่อซึ่งแสดงเป็น Uri
เจตนาเป็นวิธีการบอก Android สิ่งที่คุณต้องการจะทำ คุณอธิบายความตั้งใจของคุณ Intents สามารถใช้เพื่อส่งสัญญาณไปยังระบบ Android ที่มีเหตุการณ์บางอย่างเกิดขึ้น ส่วนประกอบอื่น ๆ ใน Android สามารถลงทะเบียนกับกิจกรรมนี้ผ่านตัวกรองการแสดงเจตนา
ต่อไปนี้เป็นความตั้งใจ 2 ประเภท
ใช้ในการเรียกองค์ประกอบที่เฉพาะเจาะจง เมื่อคุณรู้ว่าองค์ประกอบใดที่คุณต้องการเปิดใช้และคุณไม่ต้องการให้ผู้ใช้สามารถควบคุมองค์ประกอบที่จะใช้ฟรี ตัวอย่างเช่นคุณมีแอปพลิเคชันที่มี 2 กิจกรรม กิจกรรม A และกิจกรรม B คุณต้องการเปิดกิจกรรม B จากกิจกรรม A ในกรณีนี้คุณกำหนดเจตนาที่ชัดเจนที่กำหนดเป้าหมายไว้ที่กิจกรรม B จากนั้นใช้กิจกรรมนี้เพื่อโทรโดยตรง
ใช้เมื่อคุณมีความคิดว่าคุณต้องการทำอะไร แต่คุณไม่ทราบว่าควรเปิดตัวองค์ประกอบใด หรือถ้าคุณต้องการให้ผู้ใช้มีตัวเลือกให้เลือกระหว่างรายการส่วนประกอบที่จะใช้ หาก Intent เหล่านี้ถูกส่งไปยังระบบ Android จะทำการค้นหาส่วนประกอบทั้งหมดที่ลงทะเบียนสำหรับการกระทำที่เฉพาะเจาะจงและชนิดข้อมูล หากพบเพียงองค์ประกอบเดียว Android จะเริ่มองค์ประกอบโดยตรง ตัวอย่างเช่นคุณมีแอปพลิเคชันที่ใช้กล้องในการถ่ายภาพ หนึ่งในคุณสมบัติของแอปพลิเคชันของคุณคือคุณให้ผู้ใช้สามารถส่งรูปถ่ายที่เขาถ่ายได้ คุณไม่ทราบว่าแอปพลิเคชันประเภทใดที่ผู้ใช้สามารถส่งรูปถ่ายและคุณต้องการให้ผู้ใช้มีตัวเลือกในการเลือกแอปพลิเคชันภายนอกที่จะใช้หากเขามีมากกว่าหนึ่ง ในกรณีนี้คุณจะไม่ใช้ความตั้งใจที่ชัดเจน
เจตนาชัดเจนจะถูกส่งไปยังเป้าหมายเสมอไม่ว่าจะมีอะไร ตัวกรองไม่ได้รับการพิจารณา แต่ความตั้งใจโดยนัยจะถูกส่งไปยังองค์ประกอบเฉพาะในกรณีที่มันสามารถผ่านหนึ่งในตัวกรองขององค์ประกอบ
หากมีการส่ง Intent ไปยังระบบ Android ระบบจะพิจารณาแอปพลิเคชันที่เหมาะสมสำหรับ Intent นี้ หากมีการลงทะเบียนส่วนประกอบหลายรายการสำหรับ Intent ประเภทนี้ Android จะเสนอตัวเลือกให้ผู้ใช้เปิดหนึ่งในนั้น
การกำหนดนี้อิงตาม IntentFilters IntentFilters ระบุประเภทของ Intent ที่กิจกรรมบริการหรือตัวรับสัญญาณออกอากาศสามารถตอบสนองได้ ตัวกรองเจตนาแจ้งความสามารถของส่วนประกอบ มันระบุว่าการกระทำหรือบริการสามารถทำอะไรได้บ้างและประเภทของการออกอากาศที่ผู้รับสามารถจัดการได้ จะช่วยให้องค์ประกอบที่สอดคล้องกันได้รับความตั้งใจของประเภทที่ประกาศ โดยทั่วไปแล้ว IntentFilters จะถูกกำหนดผ่านไฟล์ AndroidManifest.xml สำหรับ BroadcastReceiver ก็เป็นไปได้ที่จะกำหนดไว้ในการเข้ารหัส IntentFilters ถูกกำหนดโดยหมวดหมู่การกระทำและตัวกรองข้อมูล นอกจากนี้ยังสามารถมีข้อมูลเมตาเพิ่มเติม
หากส่วนประกอบไม่ได้กำหนดตัวกรองเจตนาคุณสามารถเรียกมันได้โดยเจตนาอย่างชัดเจนเท่านั้น
ต่อไปนี้เป็น2 วิธีในการกำหนดตัวกรอง
หากคุณกำหนดตัวกรองความตั้งใจในรายการของแอปพลิเคชันของคุณไม่จำเป็นต้องทำงานเพื่อตอบสนองต่อการกำหนดที่ระบุไว้ในตัวกรองมัน Android ลงทะเบียนตัวกรองเมื่อแอปพลิเคชันของคุณได้รับการติดตั้ง
หากคุณต้องการให้เครื่องรับสัญญาณออกอากาศของคุณได้รับเจตนาเมื่อแอปพลิเคชันของคุณทำงาน จากนั้นคุณควรกำหนดตัวกรองเจตนาของคุณในช่วงเวลาทำงาน (โดยทางโปรแกรม) โปรดทราบว่าสิ่งนี้ใช้ได้กับเครื่องรับสัญญาณออกอากาศเท่านั้น
หลังจากเขียนกิจกรรมเดียวแล้วก็จำเป็นต้องเปลี่ยนไปทำกิจกรรมอื่นเพื่อทำงานอื่นไม่ว่าจะมีหรือไม่มีข้อมูลจากกิจกรรมแรก
แพลตฟอร์ม Android ช่วยให้การเปลี่ยนแปลงผ่านทางอินเทอร์เฟซเจตนา
มีการนำคำมาจากที่นี่: การใช้การสาธิตเจตนาและฉันขอแนะนำให้คุณดูตัวอย่างนี้เพราะพวกเขายังได้จัดเตรียมไฟล์โค้ดไว้ด้วย เพื่อให้คุณสามารถใช้และเข้าใจได้ง่ายเหมือนกัน
Android Intent ให้คุณนำทางจากกิจกรรม Android หนึ่งไปยังกิจกรรมอื่น ด้วยตัวอย่างบทช่วยสอนนี้ยังพูดถึงความตั้งใจต่าง ๆ ของ Android
Android Intent สามารถกำหนดเป็นวัตถุข้อความอย่างง่ายซึ่งใช้ในการสื่อสารจากกิจกรรมหนึ่งไปอีกกิจกรรมหนึ่ง
เจตนากำหนดเจตนาของแอปพลิเคชัน พวกเขายังใช้ในการถ่ายโอนข้อมูลระหว่างกิจกรรม
สามารถใช้ Android Intent เพื่อทำงาน 3 อย่างต่อไปนี้:
เจตจำนงสามารถจำแนกได้เป็น 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
ตามเอกสารของพวกเขา:
เจตนาคือวัตถุที่ให้การเชื่อมโยงรันไทม์ระหว่างคอมโพเนนต์ที่แยกต่างหาก (เช่นสองกิจกรรม) 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);
}
เจตนาคือคำอธิบายที่เป็นนามธรรมของการดำเนินการที่จะดำเนินการ สามารถใช้กับ 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
มีบทความอีกมากมายที่พร้อมใช้งาน
เจตนาคืออะไร
มันเป็นชนิดของข้อความหรือข้อมูลที่ส่งผ่านไปยังส่วนประกอบ มันถูกใช้เพื่อเริ่มกิจกรรมแสดงหน้าเว็บส่ง 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
เจตนาคือคลาสที่ผูกข้อมูลสำหรับการดำเนินการบางอย่าง
ตัวอย่าง: การส่งข้อมูลกิจกรรมหนึ่งไปยังอีกแรงโน้มถ่วงเมื่อผู้ใช้ดำเนินการดังกล่าว
กิจกรรมปัจจุบัน
ในมุมมองกว้างเราสามารถกำหนดเจตนาเป็น
เมื่อกิจกรรมหนึ่งต้องการเริ่มกิจกรรมอื่นมันจะสร้างวัตถุที่เรียกว่าเจตนาที่ระบุว่าต้องการเริ่มกิจกรรมใด
แอปพลิเคชัน Android สามารถมีกิจกรรมเป็นศูนย์หรือมากกว่านั้น เมื่อแอปพลิเคชันของคุณมีมากกว่าหนึ่งกิจกรรมคุณมักต้องเลื่อนจากกิจกรรมหนึ่งไปอีกกิจกรรมหนึ่ง ใน Android คุณนำทางระหว่างกิจกรรมผ่านสิ่งที่เรียกว่าเจตนา คุณสามารถส่งข้อมูลบางอย่างไปยังกิจกรรมที่คุณต้องการเริ่มต้นด้วยความตั้งใจโดยใช้ putExtra ()
จากลิงค์กระดาษDeep Dive into Android IPC/Binder Framework atAndroid Builders Summit 2013
ความตั้งใจนั้นเป็นที่เข้าใจกันในสายเล็ก ๆ แต่มีประสิทธิภาพ
จากกระทู้นี้คำตอบง่ายๆของสถาปนิก Dianne Hackborn ระบุว่ามันเป็นแบบdata container
นั้นจริงๆ
จากมุมมองสถาปัตยกรรม android :
เจตนาเป็นที่เก็บข้อมูลที่ใช้สำหรับการสื่อสารระหว่างกระบวนการ มันถูกสร้างขึ้นBinder
จากมุมมองสถาปัตยกรรม Android
ความตั้งใจใช้เพื่อเริ่มต้นกิจกรรมอื่นจากกิจกรรมหนึ่งโดยทั่วไปจะใช้เพื่อวัตถุประสงค์หลายอย่างเช่นการส่งข้อมูลไปยังกิจกรรมอื่นจากกิจกรรมหนึ่งและเพื่อจุดประสงค์
พวกมันมีสองประเภท
เจตนาโดยนัย
เจตจำนงที่ชัดเจน
ในฐานะผู้เริ่มต้นฉันรู้เรื่องนี้มากฉันคิดว่านี่จะให้ความคิดพื้นฐานบางอย่างเกี่ยวกับเจตนาของ Android