บทความนี้จะเป็นตัวอย่างการใช้ Intent นอกเหนือจากการเปิด Activity ใหม่ เพราะ Intent เป็นคลาสที่สามารถใช้งานได้มากกว่านั้นมากมาย เจ้าของบล็อกจึงขอทำเป็นตัวอย่างให้ผู้ที่หลงเข้ามาอ่านได้รู้ ว่าทำอะไรได้อีก
สำหรับบทความนี้ก็จะเป็นการใช้ Intent สำหรับแชร์ข้อความที่เป็น Text ไปยังแอพต่างๆ ซึ่งระบบแอนดรอยด์มีการรองรับเรื่องการแชร์แล้ว ทำให้ไม่ต้องมานั่งทำเป็นรายชื่อแอพที่ต้องการมีให้เลือกเพื่อที่จะแชร์ แต่ระบบจะดึงรายชื่อแอพในเครื่องที่รองรับการแชร์ข้อความแบบ Text ดังนั้นที่ต้องทำก็จะมีแค่กำหนดข้อความที่จะแชร์ แล้วส่งไปด้วย Intent
Intent intent = new Intent(Main.this, Target.class);
วิธีนี้สำหรับใช้ Intent เพื่อไปยังอีก Activity ที่เป็นของแอพนั้นๆ แต่ในการกำหนดเพื่อให้ทำงานเป็น Send จะต้องกำหนดดังนี้
Intent intent = new Inten(Intent.ACTION_SEND);
และนอกจากกำหนดเป็น Send แล้ว สามารถกำหนดค่าต่างๆได้ด้วย
intent.setType("text/plain");
คำสั่งดังกล่าวนี้เป็นการกำหนดประเภทของข้อมูลที่เก็บใน Intent จากตัวอย่างข้างบนนี้เป็นการกำหนดว่าเป็นข้อมูลแบบ Text นั่นเอง ดังนั้นเวลาที่ทำการแชร์ข้อมูล ระบบก็จะกรองรายชื่อตามรูปแบบข้อมูล แล้วแสดงขึ้นมาเฉพาะแอพที่สามารถรับข้อมูลแบบ Text ได้
intent.putExtra(Intent.EXTRA_TEXT, "ข้อความ");
ในช่องข้อความให้กำหนดข้อมูล String ที่เป็นข้อความที่ต้องการแชร์ เมื่อกำหนดข้อมูลคร่าวๆครบแล้วก็เริ่มแชร์ได้เลยด้วยคำสั่ง
startActivity(Intent.createChooser(intent, "ชื่อหัวข้อ");
ข้อความในคำสั่งนี้ก็คือ String ที่จะกำหนดข้อความตอนแชร์ (ดูรูปล่าง)
ดังนั้น คำสั่งสำหรับแชร์ข้อความก็จะมีเท่านี้เอง รวมทั้งหมดได้ดังนี้
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, "ข้อความที่จะแชร์");
startActivity(Intent.createChooser(intent, "ชื่อหัวข้อ"));
นอกจากนี้ยังสามารถกำหนดอย่างอื่นเพิ่มเติมได้เช่นกันนะ เช่น กำหนด Subject หรือชื่อเรื่อง สำหรับเวลาที่แชร์ไปยังแอพที่เป็นอีเมลล์
intent.putExtra(Intent.EXTRA_SUBJECT, "ชื่อเรื่อง");
ทีนี้ก็มาดูโค๊ดตัวอย่างของบทความนี้เลยดีกว่า
main.xml
<LinearLayout 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:orientation="vertical"
android:gravity="center" >
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="30dp"
android:hint="Type to share"
android:ems="10" />
<Button
android:id="@+id/buttonIntent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Share" />
</LinearLayout>
สำหรับ Layout ของตัวอย่างนี้ก็มีแค่ Edit Text สำหรับใส่ข้อความที่จะแชร์ และ Button หนึ่งตัวที่กดแล้วนำข้อความใน Edit Text ไปแชร์ด้วย Intent
Main.java
package app.akexorcist.intentsharetext;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class Main extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final EditText editText = (EditText)findViewById(R.id.editText);
Button buttonIntent = (Button)findViewById(R.id.buttonIntent);
buttonIntent.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT
, editText.getText().toString());
startActivity(Intent.createChooser(intent, "Intent"));
}
});
}
}
โค๊ดตัวอย่างนี้คงไม่ต้องอธิบายละเอียดมากนัก เพราะแค่เป็นการนำข้อความใน Edit Text ไปแชร์
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="app.akexorcist.intentsharetext"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="8" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="app.akexorcist.intentsharetext.Main"
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>
ตอนทดสอบแอพก็ให้ใส่ข้อความที่ต้องการแล้วกดปุ่ม Share พอเลือกแอพที่ต้องการ ก็จะเปิดแอพนั้นๆ โดยมีข้อความที่ส่งไปด้วย ซึ่งข้อความที่ส่งมาก็กรอกลงในช่องข้อความที่แอพนั้นๆได้กำหนดไว้
แอพ Facebook จะพิเศษหน่อย เพราะเมื่อเลือกเป็น Facebook จะพบว่าข้อความที่แชร์ไปไม่แสดง อันนี้ไม่ได้ผิดพลาดแต่อย่างใด แต่ทางผู้พัฒนาแอพของ Facebook ไม่ได้ทำให้รองรับอยู่แล้ว ซึ่งบังคับให้ใช้ Facebook SDK แทน (แต่ FB Messenger แชร์ได้ซะงั้น)
บทความที่เกี่ยวข้อง
การใช้ Intent สำหรับแชร์ข้อความ String [Send]
การใช้ Intent สำหรับแชร์ข้อความสำหรับ Email [Send]
การใช้ Intent เพื่อเปิด URL [View]
การใช้ Intent เพื่อเปิดแผนที่ [View]
การใช้ Intent เพื่อเปิดไฟล์ใดๆ [View]
การเรียกเปิดแอพฯอื่นๆ ด้วย Intent
การใช้ Intent สำหรับแชร์ไฟล์ใดๆ [Send]
การเลือกไฟล์ภาพจาก Gallery ด้วย Intent [Result]
การใช้งานกล้องเพื่อถ่ายภาพแบบง่ายๆด้วย Intent [Result]
การใช้งานกล้องเพื่อบันทึกวีดีโอแบบง่ายๆด้วย Intent [Result]
การอ่าน QR Code และ Barcode ด้วย Intent [Result]
การรับข้อมูล Intent จากแอพฯอื่นๆ [Get Content]
การรับข้อมูล Intent จากแอพฯอื่นแล้วส่งข้อมูลกลับไป [Result Content]