16 April 2013

การใช้ Intent เพื่อเปิด URL ด้วยแอปอื่นๆ

Updated on

        ต่อด้วยบทความเรื่อง Intent อยู่เหมือนเดิม แต่คราวนี้เปลี่ยนบ้าง จากเดิมที่เป็นการส่งไปยังแอพอื่นเพื่อแชร์หรือส่งเป็นหลัก (Send) คราวนี้ก็เปลี่ยนมาเป็นการเปิดดูข้อมูลด้วยแอพอื่นๆกันบ้าง (View) ซึ่งเป็นการนำ Intent มาใช้งานในรูปแบบของการ View นั่นเอง จะมีข้อดีคือเวลาที่ต้องการแก้ไขหรือจัดการไฟล์ใดๆก็ตาม ผู้ที่หลงเข้ามาอ่านไม่จำเป็นต้องเขียนโค๊ดเพื่อจัดการเรื่องนั้นๆ เพียงแค่ใช้คำสั่ง Intent แล้วส่งไปให้แอพอื่นๆจัดการแทน เช่น การเปิดดูไฟล์เอกสาร การเปิดดูภาพ หรือการเปิดดูแผนที่ เป็นต้น

        สำหรับบทความคราวนี้ก็จะเป็นการเปิด URL โดยส่งไปยัง Intent เพื่อให้เปิด URL นั้นๆ โดยใช้แอพอื่นๆ แทนนั่นเอง

        ส่วนการประกาศและกำหนดค่าให้กับตัวแปรของคลาส Intent ก็จะเป็น

Intent intent = new Intent(Intent.ACTION_VIEW);


        และการส่ง URL ด้วย Intent ก็จะใช้คำสั่งง่ายๆดังนี้

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData("URL Address");
startActivity(Intent.createChooser(intent, "Open with"));

        สำหรับช่อง "URL Address" ก็ให้ใส่ URL ที่ต้องการลงไป

        จะเห็นว่าคำสั่งไม่ค่อยมีอะไรมาก ดังนั้นมาดูตัวอย่างโค๊ดเลยดีกว่า


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" >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="30dp"
        android:orientation="horizontal"
        android:gravity="center" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="www."
            android:textSize="20sp" />
    
        <EditText
            android:id="@+id/editText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="google"
            android:layout_weight="1"
            android:ems="10"
     android:hint="URL" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=".com"
            android:textSize="20sp" />
    
    </LinearLayout>

    <Button
        android:id="@+id/buttonIntent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="View" />
    
</LinearLayout>


        หน้า Layout ก็จะมีช่องให้ใส่ URL ของเว็ปที่ต้องการ

Main.java
package app.akexorcist.intentviewurl;

import android.net.Uri;
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) {
                String url = "https://www." 
                        + editText.getText().toString() + ".com";
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse(url));
                startActivity(Intent.createChooser(intent, "Open with"));
            }
        });
    }
}

        เมื่อผู้ใช้กดปุ่ม ก็จะนำข้อความใน editText มาเติมข้างหน้าด้วย "www." และเติมข้อความต่อท้ายด้วย ".com" เพื่อให้เป็น URL ของเว็ปนั้นๆ แล้วกำหนดให้กับตัวแปรของคลาส Uri แล้วนำไปกำหนดให้กับ Intent

AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="app.akexorcist.intentviewurl"
    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.intentviewurl.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>



        สำหรับผู้ที่หลงเข้ามาอ่านคนใดต้องการไฟล์ตัวอย่างสามารถดาวน์โหลดได้จาก Intent View URL [Google Drive]



บทความที่เกี่ยวข้อง

        การใช้ 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]