Sunday, August 12, 2012

Android : Application เติมเงินออนไลน์

       
       หน่วยเติมเงินออนไลน์ของ 1-2-call ทั้งหลาย คุณเคยเกิดอาการแบบนี้หรือปล่าว ต้องเติมเงินในขณะที่กำลังวุ่นวาย ต้องกดตัวเลขเยอะแยะมากมาย เบื่อไหมที่ต้องคอยกด 

*123*CODE*หมายเลขโทรศัพท์*จำนวนเงิน#



สามารถทดสอบแอพพลิเคชั่นดังกล่าวได้ที่นี่ครับ https://play.google.com/store/apps/details?id=com.mondaro.easytopup
ในแอพพลิเคชั่นนี้สามารถเติมได้ทั้งระบบ 1-2-Call , DTAC และ Truemove-H นะครับ

       บทความนี้ต้องบอกว่าคงถูกใจใครหลายๆคนที่รับเติมเงินออนไลน์ของค่าย 1-2-call โดยเฉพาะผู้ที่ใช้มือถือระบบปฏิบัติการ Android เป็นอย่างแน่นอนเพราะวันนี้เราจะมาทำ แอพพลิเคชั่นระบบเติมเงินออนไลน์กัน


       สำหรับเครื่องมือที่เราจะใช้กันวันนี้ก็มีดังต่อไปนี้

1.  โทรศัพท์มือถือระบบปฏิบัติการ Android จะเวอร์ชั่นไหนก็ได้ขอให้มี ซิมการ์ดที่เราได้ลงทะเบียนเป็นหน่วยเติมเงินออนไลน์ไว้ก็พอ

2.  โปรแกรม Eclipse สำหรับผมใช้ Eclipse : โค้ดเนม JUNO for Java EE ก็ไปหาดาวน์โหลดมาใช้กันเองได้ ที่นี่

3.  Android SDK สำหรับไว้ทำ Emulator จำลองโทรศัพท์เพื่อที่เราจะได้ทดสอบโปรแกรมเบื้องต้นก่อน ไปหามาได้ ที่นี่

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

     เรามาเริ่มกันเลยนะครับก่อนอื่นก็ขอให้ทุกท่านบรรจงเปิดโปรแกรม Eclipse ขึ้นมาก่อนจากนั้นก็ทำตามขั้นตอนดังต่อไปนี้



1.  ทำการสร้างงานโปรเจคใหม่ กดที่ File > New > Project ตามตัวอย่างดังภาพ



2.  ทำการเลือกประเภทงานของเรา โดยในที่นี้เราจะทำ Android Apps ก็ให้เราเลือกเป็น Android Application Project จากนั้นก็กดปุ่ม Next ต่อไป



3.  ทำการตั้งชื่องานของเราซึ่งจะมีส่วนที่เราต้องใส่ดังนี้

       Application Name     หมายถึงชื่อแอพพลิเคชั่นของเรา
       Project Name            หมายถึงชื่อโปรเจคงานของเรา
       Package Name         หมายถึงชื่อ Package โดยเราจะต้องใช้ไม่ซ้ำกันกับโปรเจคอื่นๆ
       Build SDK                  หมายถึง รุ่นของระบบปฏิบัติการที่เราต้องการให้ทำงานได้ (ผมเลือกเป็น Android 2.3.3 API:10 เพราะผมใช้มือถือ HTC Desire ซึ่งเป็นระบบปฏิบัติการนี้ครับ อาจแตกต่างกันตามระบบปฏิบัติการบนมือถือของท่านนะครับ)

      เมื่อพิมพ์เสร็จแล้วก็กด Next ได้เลย



4.  ปรับตั้งค่าต่างๆ เช่น สีพื้นหน้า พื้นหลัง ไอค่อน ฯ ซึ่งในที่นี้ผมยังไม่ปรับใดๆก็กด Next ไปเลย



5.  เลือกเป็น BlankActivity แล้วกด Next ครับ เพื่อให้มันสร้างงานเปล่ามาให้เรา



6.  ต่อไปก็เป็นการเลือกตั้งค่าให้กับงานที่เราจะทำโดยที่มีส่วนที่เราต้องใส่ดังนี้

     Activity Name    คือชื่อของส่วนงานของเรา
     Layout Name     คือชื่อของส่วนแสดงผล
     Title                     คือชื่อ แอพลิเคชั่นที่จะให้แสดงผลออกมา (ส่วนนี้จะแสดงผลออกมาเป็นชื่อ แอพพลิเคชั่นที่เมนูในโทรศัพท์เรา)

เมื่อคิดชื่อออกแล้วก็กด Next สถานีต่อไปเลยครับ อิอิ



7.  เมื่อเสร็จแล้วมันก็จะขึ้นหน้าต่างงานมาให้เราโดย

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

1.  ไฟล์ MainActivity.java ซึ่งจะเป็นไฟล์ที่เราจะใช้เขียนโปรแกรมกัน จะอยู่ภายใน Package ที่ชื่อว่า com.example.topup ตามที่เราตั้งไว้ ซึ่งส่วนนี้จะอยู่ใน โฟล์เดอร์ ./src/ ภายในโปรเจคงานที่เราเซฟไว้

2.  ไฟล์ activity_main.xml เป็นไฟล์ที่ใช้สำหรับทำการตกแต่งหน้าจอแอพพลิเคชั่นของเราว่าเราจะทำรูปแบบไหน มีปุ่มกี่ปุ่ม ใส่อะไรไปบ้าง จะอยู่ที่ตำแหน่งโฟล์เดอร์ ./res/layout/ ภายในโปรเจคงานนั้นของเรา

3.  ไฟล์ AndroidManifest.xml เป็นไฟล์ที่ใช้สำหรับการตั้งค่าระบบต่างๆภายในแอพพลิเคชั่นของเรา เช่น ตั้งค่า Permission ว่าจะให้ทำการโทรออกได้ไหม ตั้งค่า Theme ของระบบ เป็นต้น จะอยู่ที่ตำแหน่ง ./res/



8.  จากนั้นเรามาทำการออกแบบหน้าตาแอพพลิเคชั่นของเราดีกว่าโดยเลือกไฟล์ activity_main ที่ layout มาใช้งานซึ่งขั้นแรกเราจะมาอยู่ที่แถบของ Graphic Layout ซึ่งเป็นหน้าในการออกแบบแบบ GUI ลากวางๆ แต่เราไม่ใช้ให้เราไปที่แถบ activity_main.xml เลือกที่ด้านล่างข้างๆกัน



9.  ส่วนนี้เราจะทำการสร้างส่วนแสดงผลโปรแกรม โดยให้คุณๆ คัดลอกโค้ดโปรแกรมทั้งหมดไปวางไว้แทนที่ของเดิมทั้งหมดเลยนะครับ

โค้ดส่วนแสดงผล activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
 <linearlayout 
     android:background="#000099" 
     android:layout_height="fill_parent" 
     android:layout_width="fill_parent" 
     android:orientation="vertical" 
     android:weightsum="1" 
     xmlns:android="http://schemas.android.com/apk/res/android">        
  <linearlayout 
            android:layout_height="wrap_content" 
            android:layout_width="fill_parent">
    <textview 
                       android:id="@+id/widget35" 
                       android:layout_height="wrap_content" 
                       android:layout_marginleft="20dp" 
                       android:layout_margintop="10dp" 
                       android:layout_width="wrap_content" 
                       android:text="หมายเลข :" 
                       android:textsize="22sp">
    </textview>        
    <edittext 
                      android:id="@+id/get_phone" 
                      android:layout_height="wrap_content" 
                      android:layout_marginleft="10dp" 
                      android:layout_margintop="10dp" 
                      android:layout_width="170dp" 
                      android:phonenumber="true" 
                      android:textsize="22sp">
              <requestfocus></requestfocus>
                </edittext>
  </linearlayout>          
  <linearlayout 
                     android:layout_height="wrap_content" 
                     android:layout_width="fill_parent">
    <textview 
                     android:id="@+id/widget38" 
                     android:layout_height="wrap_content" 
                     android:layout_marginleft="20dp" 
                     android:layout_margintop="20dp" 
                     android:layout_width="wrap_content" 
                     android:text="จำนวน :" 
                     android:textsize="22sp">
    </textview>         
    <edittext 
                     android:id="@+id/get_topupcost" 
                     android:layout_height="wrap_content" 
                     android:layout_marginleft="30dp" 
                     android:layout_margintop="20dp" 
                     android:layout_width="170dp" 
                     android:phonenumber="true" 
                     android:textsize="22sp">
    </edittext>         
  </linearlayout>
  <button 
           android:id="@+id/btn_topup" 
           android:layout_gravity="center_horizontal" 
           android:layout_height="wrap_content" 
           android:layout_margintop="20dp" 
           android:layout_weight="0.05" 
           android:layout_width="162dp" 
           android:text="เติมเงิน" 
           android:textsize="22sp">
  </button>            
 </linearlayout>

จะได้ดังภาพ ยืดยาวมากมันคืออะไรเรามาอธิบายให้ฟังกัน



อธิบายโค้ดส่วนแสดงผล activity_main.xml            สำหรับส่วนโค้ดแสดงผลนั้นรายละเอียดมีเยอะมากครับ อธิบายคร่าวๆละกันนะครับเพื่อความกระชับ รวดเร็ว

โค้ดส่วนนี้จะเป็นการกล่าวให้แสดงผลโดยให้มีสีพื้นหลังเป็น สีน้ำเงิน(#000099) และแสดงแบบเต็มทั้งด้านสูงและด้านกว้างของส่วนแสดงผล linearlayout


<linearlayout 
     android:background="#000099" 
     android:layout_height="fill_parent" 
     android:layout_width="fill_parent" 
     android:orientation="vertical" 
     android:weightsum="1" 
     xmlns:android="http://schemas.android.com/apk/res/android"> 



เป็นส่วนที่จะแสดงให้เห็นทางหน้าจอ เรียกว่า textview ซึ่งกำหนดให้แสดงผล
ห่างจากด้านซ้าย 20dp
ห่างจากด้านบน 10dp
มีข้อความว่า "หมายเลข"
ขนาดตัวอักษร 22sp


<textview 
    android:id="@+id/widget35" 
    android:layout_height="wrap_content" 
    android:layout_marginleft="20dp" 
    android:layout_margintop="10dp" 
    android:layout_width="wrap_content" 
    android:text="หมายเลข :" 
    android:textsize="22sp">
</textview>



ต่อมาเป็นส่วนของการรับข้อมูลโดยที่เรากำหนดให้ว่า
   ส่วนรับข้อมูลนี้มี id ชื่อว่า get_phone จะนำเอาไปใช้อ้างอิงในการเข้าถึงข้อมูลส่วนนี้ คือการนำค่านี้ไปใช้นั่นเอง
   ส่วน android:phonenumber ="true" นั้นหมายถึงให้รับค่าข้อมูลเป็นแบบตัวเลขนั่นเอง
   สำหรับ <requestfocus></requestfocus>  นั้นหมายถึงการใช้เริ่มต้นรับข้อมูลที่ส่วนนี้เป็นการ focus ให้เราสามารถที่จะพิมพ์ข้อความได้เลยโดยไม่ต้องกดที่ช่องนี้ก่อนแต่อย่างใด
   ส่วนอื่นๆก็คล้ายๆกับที่กล่าวมาข้างต้น


<edittext 
 android:id="@+id/get_phone" 
 android:layout_height="wrap_content" 
 android:layout_marginleft="10dp" 
 android:layout_margintop="10dp" 
 android:layout_width="170dp" 
 android:phonenumber="true" 
 android:textsize="22sp">
 <requestfocus></requestfocus>
</edittext>



สำหรับการใช้งานปุ่มกดเพื่อที่จะให้แอพพลิเคชั่นของเราสามารถทำงานได้เราสามารถกำหนดได้ดังนี้
   กำหนดให้มี id ชื่อว่า btn_topup เพื่อใช้ในการตรวจสอบ event ที่เกิดขึ้นนั่นเอง
   กำหนดให้ปุ่มมีความกว้าง 162dp
   มีชื่อปุ่มแสดงว่า "เติมเงิน"
   มีขนาดตัวอักษรเท่ากับ 22sp


<button 
           android:id="@+id/btn_topup" 
           android:layout_gravity="center_horizontal" 
           android:layout_height="wrap_content" 
           android:layout_margintop="20dp" 
           android:layout_weight="0.05" 
           android:layout_width="162dp" 
           android:text="เติมเงิน" 
           android:textsize="22sp">
</button>   



10.  คลิกมาที่แถบ Graphic Layout ด้านล่างข้างๆกันจะปรากฏหน้าตาประมาณนี้ (ตัวกล่องสี่เหลี่ยมเป็นเพราะแสดงภาษาไทยไม่ได้ ไม่ต้องสนใจครับเครื่องจริงๆแสดงได้)



11.  ต่อมาเราก็มาวุ่นวายกับโค้ดการทำงานของแอพลิเคชั่นต่อ คัดลอกไปวางที่ไฟล์ MainActivity.java ทั้งหมดเลย

โค้ดส่วนการทำงาน MainActivity.java

package com.example.topup;

import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {
 public EditText txtPhone,txtTopupCost;
    private Button btnTopUp;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        txtPhone = (EditText)findViewById(R.id.get_phone);
     txtTopupCost =(EditText)findViewById(R.id.get_topupcost);
     btnTopUp = (Button)findViewById(R.id.btn_topup);
      
     btnTopUp.setOnClickListener(new OnClickListener(){
      
      public void onClick(View v) {
    if(txtPhone.getText().toString().equals("") || txtTopupCost.getText().toString().equals("")){
     Toast.makeText(MainActivity.this, "ผิดพลาด :\r\nกรุณากรอกหมายเลขโทรศัพท์และจำนวนเงินที่ต้องการเติมเงินด้วยค่ะ", Toast.LENGTH_LONG).show();      
    }else if(txtPhone.getText().length()>10 || txtPhone.getText().length()<10){    
     Toast.makeText(MainActivity.this, "ผิดพลาด :\r\nกรุณากรอกหมายเลขโทรศัพท์ให้ครบ 10 หลักด้วยค่ะ", Toast.LENGTH_LONG).show();
    }else{
     call();
     txtTopupCost.setText("");
     txtPhone.setText("");
    }   
   }
     });
 }
 public void call() {
     try {          
         String dial = "*123*CODE*"+txtPhone.getText().toString().trim()+"*"+txtTopupCost.getText().toString().trim()+"%23";
         Intent callIntent = new Intent(Intent.ACTION_CALL);
         callIntent.setData(Uri.parse("tel:"+dial));
         callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
         startActivity(callIntent);
     } catch (ActivityNotFoundException activityException) {
         Log.e("Top Up", "Failed", activityException);
     }
 }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}


เยอะแยะจนตาลายตามภาพเลย เดี๋ยวเรามาอธิบายให้ฟังกัน ก่อนอื่นผมจะบอกให้แก้ส่วนหนึ่งก่อนนั่นคือในส่วนนี้


String dial = "*123*CODE*"+txtPhone.getText().toString().trim()+"*"+txtTopupCost.getText().toString().trim()+"%23";

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


String dial = "*123*0000*"+txtPhone.getText().toString().trim()+"*"+txtTopupCost.getText().toString().trim()+"%23";





อธิบายการทำงานของส่วนการทำงาน MainActivity.java          และก็เช่นเคยครับการทำงานด้วยภาษา java นั้นผมไม่ขออธิบายเพิ่มให้ไปศึกษาเอาเอง แต่ผมจะอธิบายในส่วนสำคัญของโปรแกรม 2 ส่วนนั่นก็คือ


ส่วนการประกาศตัวแปรต่างๆ

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


txtPhone = (EditText)findViewById(R.id.get_phone);
txtTopupCost =(EditText)findViewById(R.id.get_topupcost);
btnTopUp = (Button)findViewById(R.id.btn_topup);



จากนั้นเมื่อผมกดปุ่ม เติมเงิน ก็จะเป็นการเรียกการทำงาน event ในส่วนของ OnClickListener


btnTopUp.setOnClickListener(new OnClickListener(){
      
      public void onClick(View v) {
.
.
.



เมื่อตรวจสอบข้อผิดพลาดต่างๆผ่าน (ส่วนนี้สามารถพัฒนาเพิ่มเติมได้ ผมยังทำไม่สมบรูณ์ ครับ)  ก็จะมาทำการเรียกใช้งานฟังก์ชั่น call() เพื่อเรียกการทำงานในการเติมเงิน จากนั้นก็ Clear ค่าที่เราใส่มาทั้งเบอร์โทรศัพท์ และจำนวนเงิน


call();
txtTopupCost.setText("");
txtPhone.setText("");





ส่วนการเติมเงิน

ในฟังก์ชั่น call() นั้นเราให้การทำงานทั้งหมดถูกต้องโดยเราตรวจสอบเพื่อจับข้อผิดพลาดโดยใช้ try-catch ถ้าถูกต้องก็ทำต่อไป ถ้าผิดก็ไปทำงานที่ catch


try {          
.
.
.
} catch (ActivityNotFoundException activityException) {
.
.
.
 }




การที่เราจะส่งค่า *123*CODE*เบอร์โทรศัพท์*จำนวนเงิน# นั้นผมได้เก็บใส่ในตัวแปรไว้ก่อน ("%23" คือเครื่องหมาย '#' เราใช้ '#' ตรงๆไม่ได้เพราะโปรแกรมจะเห็นว่าเป็นส่วนของ header อื่นๆทำให้แอพพลิเคชั่นไม่สามารถทำงานได้)


String dial = "*123*CODE*"+txtPhone.getText().toString().trim()+"*"+txtTopupCost.getText().toString().trim()+"%23";



เมื่อเก็บค่าที่ต้องการใส่ตัวแปรได้แล้ว ผมก็จับมันมาใช้งานโดยผ่าน  Intent ซึ่งทำหน้าที่ในการจัดการการโทรอยู่แล้วโดยใช้เป็น Intent.ACTION_CALL (ไม่ใช้ Intent.ACTION_DIAL เพราะต้องการให้การทำงานเป็นแบบปกติที่ต้องใช้ USSD CODE นั่นเอง) จากนั้นก็มากำหนดต่อให้กำหนดว่าเราจะโทรผ่านหมายเลข dial ซึ่งก็คือตัวแปรที่เราเก็บไว้นั่นเอง จากนั้นก็สั่งทำการทำงานด้วย startActivity(callIntent)


Intent callIntent = new Intent(Intent.ACTION_CALL);
         callIntent.setData(Uri.parse("tel:"+dial));
         callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
         startActivity(callIntent);




12.  ต่อไปเป็นคิวของไฟล์สุดท้ายที่เราต้องแก้ไข นั่นก็คือไฟล์ AndroidMenifest.xml ให้เราเพิ่มคำสั่งเพิ่มเติมเข้าไปดังภาพ



13.  เมื่อลงโค้ดเสร็จครบทั้ง 3 ไฟล์แล้วให้กดปุ่มเขียวๆ เพื่อทำการรันโปรแกรม จากนั้นจะมีหน้าต่างขึ้นมา ให้เลือก Android Application กด OK ดังภาพเลย



14.  จะมีหน้าต่างใหม่ขึ้นมานั่นก็คือ Emulator ที่เราได้สร้างไว้ก่อนแล้ว



15.  เมื่อ Emulator ทำการเตรียมความพร้อมเสร็จแล้วก็จะได้หน้าตาดังแบบนี้ ก็ปลดล็อคมันซะ สไลด์แบบมือถือด้วยเมาส์ อย่างเท่ห์ ฮ่าๆๆๆ



16.  ก็จะพบกับหน้าตาแบบนี้ ตามที่เราได้ออกแบบไว้ ทดลองพิมพ์หมายเลขโทรศัพท์ จำนวนเงิน และลองกด เติมเงิน ดูซะ เราจะพบว่ามันเติมเงินไม่ได้ ก็มันเป็น Emulator นี่นา อิอิ



17.  ทดสอบตามที่เราได้เขียนไว้ หากกรอกหมายเลขโทรศัพท์ไม่ครบ 10 ตัว จะมีหน้าต่างขึ้นมาบอกความผิดพลาด



18.  หรือถ้าหากเราลืมกรอก หมายเลขโทรศัพท์ และหรือ จำนวนเงิน ก็จะมีหน้าต่างแจ้งเตือนความผิดพลาดจากเราอีก



19.  ขั้นตอนนี้เป็นการปรับแต่งแอพพลิเคชั่นของเราให้สวยงามด้วยการใส่ไอคอนให้มันนะครับ ซึ่งไอคอนของเรานั้นจะอยู่ที่ ./res/drawable-mdpi ลองคลิกขวาที่ โฟล์เดอร์ drawable-mdpi ที่ Explorer สิครับแล้วเลือก Properties จะได้ดังภาพต่อไป



20. สังเกตุที่ผมทำกรอบสีแดงไว้นั่นคือตำแหน่งที่อยู่ของไฟล์ไอคอนเรา



21.  จากนั้นให้เรานำภาพที่เราต้องการคัดลอกมาวางไว้ที่โฟล์เดอร์ของไอคอนที่แล้ว ดังภาพ



22.  ไปที่ส่วนของ AndroidMenifest.xml แล้วเข้าไปที่แถบ Application เลือก Browse.. ที่ช่อง Icon จากนั้นก็เลือกไฟล์ ไอคอนใหม่ของเรา กด OK ดังภาพ



23.  ลองรันแอพพลิเคชั่นใหม่อีกครั้งจะสังเกตเห็นไอคอนใหม่ของเราแล้วพร้อมชื่อแอพพลิเคชั่นของเรา (ชื่อที่ได้มาจากการตั้งค่าของเราในข้อ 6)



       สำหรับการนำแอพพลิเคชั่นของเราไปใช้ในโทรศัพท์ก็เพียงแค่คุณเข้าไปเอาไฟล์ .apk ของเราที่ที่อยู่ ./bin/ ในโฟล์เดอร์งานของเรา แล้วคัดลอกมาไว้ในโทรศัพท์จากนั้นก็ไปตั้งค่าที่ Setting > Application > ติ๊กถูกที่ Unkhown sources แค่นี้เราก็ไปทำการติดตั้งแอพพลิเคชั่นของเราได้เลยโดยการกดที่ไฟล์ [ชื่อไฟล์].apk ในโทรศัพท์ก็จะเข้าสู่หน้าการติดตั้งแล้ว เมื่อติดตั้งเสร็จก็พร้อมสู่การเติมเงินได้ทันที อ่ออย่าลืมนะว่า เติมเงินมาให้ผมบ้าง อิอิ

เปิดการใช้งาน Unkhown Source
แสดงการติดตั้งแอพพลิเคชั่น

หน้าต่างแสดงผลการใช้งานแอพพลิเคชั่นจริงบนมือถือ Android

การแสดงผลลัพธ์จากการทำงานของแอพพลิเคชั่น




สำหรับไฟล์โปรเจค Topup           ดาวน์โหลดได้ที่นี่





**************************************************************************

10 comments:

  1. สุดอดมากครับ ลองแล้วเจ่ม

    อยากให้พี่เขียนเพิ่มอีกได้ไหมครับ คือ สมุดมีโทรศัพท์สองเครื่อง ให้เครื่องที่สองเติมได้เช่นกัน โดยการดึงยอดเงินจากเครื่องแรก(เครื่องแม่) ทั้งสองเครื่องเชื่อมต่อ wifi Router ทั้งคู่

    ReplyDelete
    Replies
    1. เชื่อมต่อได้อยู่แล้วครับเพียงแต่ต้องเขียนโค้ดเพิ่ม 2 ส่วนคือ
      1. ส่วนเครื่องลูก (Client) ต้องทำหน้าที่เป็น Client จากนั้นก็ส่งข้อมูลไป Connect กับเครื่อง Host เพื่อทำรายการเติมเงิน
      2. ส่วนเครื่องแม่ (Host) ต้องทำหน้าที่เปิดการเชื่อมต่อเอาไว้พร้อมรับข้อมูลที่ถูกต้องมาทำรายการ
      แต่ปัญหาของงานระบบนี้คือ ..
      1.ส่วนเครื่องลูกจะรู้ได้อย่างไรว่าเครื่องแม่เติมเงินสำเร็จหรือไม่ การอ่านค่า Header ของ USSD มีปัญหาอยู่ครับ และในกรณีนี้การ Remote ไปที่เครื่อง Host แทนก็ใช้การไม่ได้ด้วย
      2.กรณีการเชื่อมต่อผ่านวงแลนเดียวกัน Router คุณปลอดภัยแค่ไหน การที่จะป้องกันไม่ให้คนเข้ามาใช้ หรือ Connect กับระบบของเราทำได้ดีแค่ไหน และการส่งข้อมูลผ่านระบบแบบนี้งานแบบนี้ไม่คุ้มที่จะทำครับ งานที่ทำกับงานที่ได้ ไม่คุ้มกัน

      สรุป ทำได้ครับ แต่ทำได้ไม่สมบูรณ์ ทำได้ไม่คุ้ม ตามที่กล่าวมาแล้วนั้น

      Delete
    2. ขอบคุณมากครับ

      Delete
  2. เราต้องการเพิ่ม scrip auto complete ได้ไหมครับ.
    แล้วก็ให้บอกว่าเติมไปกี่ครั้งแล้ว(ไม่รู้ศัพท์)

    ReplyDelete
    Replies
    1. ทำได้ครับ แค่เก็บเบอร์โทรศัพท์และจำนวนครั้งไว้ที่ shared preference เวลาเราพิมพ์หมายเลขโทรศัพท์ก็ให้ไปอ่านเปรียบเทียบที่ shared preference แล้วค่อยทำ auto complete ครับ แต่ ... ไม่แนะนำสำหรับข้อมูลที่มีปริมาณเยอะๆครับ

      Delete
  3. แล้วถ้าเป็น 2 ซิมหละครับทำไง

    ReplyDelete
    Replies
    1. ปกติถ้าเรา Active ซิมใดซิมหนึ่งเป็นหลักในการโทรออก มันก็ได้ปกติครับ แแต่หากเราตั้งค่าเป็นให้เลือกซิมใดๆในการโทรออกแต่ละครั้งเวลากดเติมเงินมันก็จะเด้ง Dialog เลือกซิมในการใช้งานให้ครับ เป็นที่ระบบนั้นๆ ไม่เกี่ยวกับโค้ดเลยครับ

      Delete
    2. ในตัวโค็ดกำหนดไปเลยไม่ได้หลอครับ เห็นมาจากเว็บนอก แต่ผมยังทำไม่ได้
      เช่น
      intent.putExtra("simSlot", 0); //For sim 1

      intent.putExtra("simSlot", 1); //For sim 2

      Delete
    3. ยังไม่เคยลองครับ ถ้าเลือกโดยการกำหนด intent แบบนั้นโดยตรงได้ ก็ได้อยู่ครับ เพียงแต่เวลาเรารับข้อมูล Extra มาเราต้องกำหนด If statement ให้มันครับ แค่นั้นเองครับ

      Delete
  4. ผมสนใจจะทำตู้เติมเงินระบบserverควรเริ่มตรงไหนก่อนดีครับ

    ReplyDelete