How to understand Intents (2)

Android Component

คือส่วนประกอบรวมกันเพื่อสร้าง Android Application มีด้วยกัน 4 ประเภทดังนี้

  1. Activity หรือที่เราเรียกว่า User Interface ที่ติดต่อกับผู้ใช้งาน ซึ่งในหนึ่ง Application สามารถมีได้หลาย ๆ หน้า ในแต่ละ Activity อาจประกอบไปด้วย View หรือ Controls ต่าง ๆ เช่น button, check box หรือ textbox โดยเราสามารถเปิดหน้า Activity หรือส่งข้อมูลที่จำเป็นผ่าน Intent
  2. Service Provider ไม่มีส่วน User Interface ที่ติดต่อกับผู้ใช้งาน แต่สามารถประมวลได้อย่าง Activity หรือประมวลผลลักษณะของ background process หรือสร้างเป็น Job schedule โดยเราสามารถ Start Service หรือส่งข้อมูลที่จำเป็นผ่าน Intent
  3. Broadcast receiver ไม่มีส่วน User Interface เช่นเดียวกับ Service แต่มีคุณลักษณะพิเศษที่คอยรับและตอบสนองกับเหตุการณ์ต่าง ๆ กับ ระบบ Android ได้ทันที เช่น แบตเตอรี่ใกล้หมด  หรือมีข้อความเข้า เครื่องกำลัง Boots โดยทุก Application สามารถรับ Message ฺBoardcast ได้ผ่าน Intent
  4. Content provider คือส่วนติดต่อเกี่ยวกับฐานข้อมูลภายในเครื่อง Android เพื่อให้แอปพลิเคชันอื่นๆ ได้นำไปใช้ได้

โดยถ้าเราจะใช้ Android Component ใดจะต้องประกาศไว้ใน Android Manifest สามารถติดตามบบทความสำหรับการตรวจสอบ Android Manifest จาก

Intent

คือส่วนที่ช่วยให้ Android Component สามารถส่งผ่านข้อมูลระหว่างกัน ทั้ง Application เดียวกันหรือต่าง Application กันในเครื่อง Android เดียวกัน ได้ดังนี้

  1. Activity A เปิดใช้งานหรือส่งข้อมูลไปหา Activity B จาก Application เดียวกัน
  2. Activity A เปิดใช้งานหรือส่งข้อมูลไปหา Activity B จาก Application ต่างกัน
  3. Activity A เปิดใช้งานเชื่อมต่อหรือส่งข้อมูลไปหา Service A จาก Application ต่างกัน
  4. Activity A ส่งข้อมูลไปหา Receiver A จาก Application ต่างกัน
  5. เราจะไม่สามารถส่ง Intent ตรงไปยัง Content provider แต่สามารถทำได้ผ่าน Activity, Receiver และ Service

จากคำอธิบายข้างต้นจึงสามารถสรุปได้ว่า Intent มี 2 แบบ คือ

  1. Explicit Intent คือการใช้งาน Intent ที่มีการระบุ Android Component หรือ Class ปลายทางได้อย่างตรง ๆ ดังนั้นนิยมใช้งานภายใน Application เดียวกัน หรือ Application ต่างกันแต่อยู่ภายใต้บริษัทเดียวกัน แต่ก็สามารถใช้งาน Explicit Intent เพื่อเรียกข้าม Application ได้เช่นกัน
  2. Implicit Intent คือการใช้งาน Intent โดยไม่มีการระบุ Android Component หรือ Class ตรง ๆ แต่จะมีการตรวจสอบ parameter ที่ร้องขอและค้นหาโดย Android System ก่อนจะเรียกใช้งาน Android Component ที่ตรงกับการร้องขอ ดังนั้นจึงนิยมใช้งานต่าง Application กัน

Explicit Intent

เรียกใช้งาน

  1. Activity นั้น เราสามารถใช้งาน Intent จาก Activity A  ไปยัง Activity B ดังนี้
    Intent intent = new Intent(ActicityA.this, ActicityB.class);
    startActivity(intent);
    
  2. Service Provider นั้น เราสามารถใช้งาน Intent จาก Activity A  ไปยัง Service B ดังนี้
    Intent intent = new Intent(ActivityA.this, ServiceA.class);
    startService(intent);
    
  3. Broadcast receiver นั้น เราสามารถใช้งาน Intent จาก Activity A  ไปยัง Receive B ดังนี้
    Intent intent = new Intent(ActivityA.this, ReceiverA.class);
    sendBroadcast(intent);
    

ส่งข้อมูล

ทั้ง 3 Android Component ข้างต้นเราสามารถส่งข้อมูลระหว่างกันได้ โดยใช้คำสั่ง putExtra ซึ่งมีโครงสร้างแบบ Key และ value ดังนี้

Intent intent = new Intent(ActivityA.this, ActivityB.class);
intent.putExtra("password", "p@ssw0rd");
startActivity(intent);

Implicit Intent

Function เรียกใช้งาน เพื่อส่งไปกรอง Intent โดยเครื่อง Android

  1. Activity นั้น เราสามารถใช้งาน Intent จาก Activity A  ไปยัง Activity ของ Application อื่น ๆ ในเครื่อง Android ดังนี้
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://itselectlab.com"));
    startActivity(intent); //method นี้จะใช้สำหรับส่ง Intent เพื่อเปิด Activity ใหม่ หรือสั่งให้ Activity ที่เปิดอยู่แล้วทำงานบางอย่าง
    
  2. Broadcast receiver นั้น เราสามารถใช้งาน Intent จาก Activity A  ไปยัง Broadcast  ดังนี้
    Intent intent = new Intent();
    intent.setAction("com.example.SendBroadcast");
    sendBroadcast(intent); //method นี้จะใช้สำหรับส่ง Intent ไปยังทุก ๆ Receiver ที่มีอยู่ในเครื่อง
    
  3. Service Provider นั้น ไม่นิยมใช้งาน Implicit Intent ส่วนมากใช้งานแบบ Explicit แต่ถ้าจะใช้งานจะทำการเรียกผ่าน Activity หรือ Receiver

Parameter ที่ต้องกำหนดเพื่อช่วยกรอง Intent ให้ตรงกับ Application ในเครื่อง Android (Intent Filter)

  1. Action เป็น Parameter ของ Implicit Intent ที่ทั้งโปรแกรมต้นทางเรียกใช้งาน และโปรแกรมปลายทางต้องกำหนดไว้ อย่างน้อย 1 action เพื่อที่จะเรียกใช้งานหรือส่งข้อมูลได้อย่างได้ถูกต้อง หรือสั่งให้ทำงานตาม  โดย Action สามารถรับหรือสั่งให้ทำงานได้ทั้ง Activity และ Receiver ดังตัวอย่างดังนี้
    1. Default Action สำหรับ Activity (โดยมากใช้งานที่โปรแกรมต้นทาง)
      1. ACTION_ALL_APPS แสดงรายชื่อ Application ทั้งหมดในเครื่อง
      2. ACTION_DATE_CHANGED เปลี่ยนวันที่
      3. ACTION_SEND เพื่อส่งข้อมูล
      4. ACTION_EDIT เพื่อใช้แก้ไขข้อมูล
      5. ACTION_DEFAULT หรืออีกชื่อคือ ACTION_VIEW เพื่อแสดงข้อมูล
    2. Default Action สำหรับ Receiver (โดยมากใช้งานที่โปรแกรมปลายทาง เพราะ System จะส่งมายัง Receiver ที่เรากำหนดไว้ที่ Android Manifest)
      1. ACTION_BATTERY_LOW เพื่อรับ Broadcast จากระบบ ว่าแบตเตอรี่ใกล้หมด
      2. ACTION_BOOT_COMPLETED เพื่อรับ Broadcast จากระบบ ว่าเครื่อง Android ได้ Boot ระบบเสร็จสิ้น
      3. ACTION_DEVICE_STORAGE_LOW เพื่อรับ Broadcast จากระบบ ว่าเครื่อง Android มีหน่วยความจำใกล้หมด
  2. Data เป็น Parameter ของ Implicit Intent  ที่จะต้องระบุสำหรับบาง Action ข้างต้น โดยข้อมูลมีรูปแบบที่เรียกว่า URI โดยใช้ฟังก์ชัน sertData() ดังต่อไปนี้
    1. ACTION_VIEW tel:0886554466 แสดงเบอร์โทรตามหมายเลขที่กำหนด
    2. ACTION_DIAL tel:0886554466 โทรออกตามหมายเลขที่กำหนด
  3. Type เป็น Parameter ของ Implicit Intent ที่โปรแกรมปลายทางต้องกำหนดไว้ เพื่อบอกว่าส่งและรับข้อมูลประเภทใด โดยใช้ฟังก์ชัน setType()
    1. สำหรับผู้ส่ง
      Intent intent = new Intent(Intent.ACTION_CALL);
      intent.setData(Uri.parse("tel:0886554433"));
      startActivity(intent);
      
    2. สำหรับผู้รับอาจกำหนดได้ดังนี้
      <activity android:name=".TestActivity">
          <intent-filter>
              <action android:name="android.intent.action.SEND"/>
              <category android:name="android.intent.category.DEFAULT"/>
              <data android:mimeType="text/plain"/>
              <data android:mimeType="image/*"/>
          </intent-filter>
      </activity>
      
      
  4. Category เป็น Parameter ของ Implicit Intent หมวดหมู่ของ Component ปลายทาง

อ้างอิง

 

 

ใส่ความเห็น