Երկրորդ մասում ներկայացրեցինք սերվերային մասի իրակացանումը, այս մասում կներկայացնենք կլիենտային մասի կոդը: Java լեզվով գրված այս կոդը անմիջապես պետք է աշխատի մեր Android համակարգում, որը կարող է տեղակայված լինել սմարթ-ֆոնում կամ պլանշետում: Այսպիսով սկսեցինք, բացում ենք eclipse -ը գնում ենք File -> New -> Other -> Android -> Android Project
Project Name: դաշտում գրում ենք ցանկացած անուն, օրինակ client, տալիս ենք next: Բացվում է մի նոր պատուհան, որտեղ պետք է ընտրենք Android օհ -ի այն տարբերակը, որում պետք է աշխատի կլիենտային կոդը: Իմ հեռախոսում տեղակայված է 2.2 տարբերակը, հետևաբար ես ընտրել եմ Android 2.2 տարբերակը, դուք էլ պետք է ընտրեք ձեր դիվայսում տեղակայված Android -ի տարբերակը:
Դրանից հետո Application Name: դաշտում գրում ենք ցանկացած անուն, օրինակ Client: Package Name: դաշտում գրում ենք package-ի անունը, որը պետք է բաղկացած լինի երկու կամ ավելի մասերից, իսկ մասերը միմյանցից բաժանվում են կետերով, օրինակ client.project: Եվ տալիս ենք finish և այժմ արդեն պրոյեկտը ստեղված է:
Eclipse– ում ձախ կողմում Package Explorer -ից սեղմում ենք src -ի վրա և բացում ենք դրա լրիվ ենթածառը (սեղմում ենք src -ի ու նրան պատկանող բոլոր ճյուղերից առաջ գտնվող “+” նշանի վրա): Բացում ենք ClientActivity.java ֆայլը: Այն ամենասկզբում, երբ մենք դեռ ոչինչ չենք փոխել ունի հետևյալ տեսքը.
Այժմ կարող ենք ավելացնել մեր կոդը ClientActivity կլասսի մարմնում:
(/** Called when the activity is first created. */ մեկնաբանությունից առաջ հայտարարում ենք մեր փոփոխականները ):
Ահա կլիենտային մասի ամբողջական կոդը.
package client.project; import android.app.Activity; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import java.lang.Throwable; public class ClientActivity extends Activity { EditText textOut, ip_in; TextView textIn; Button button, connect; String address; boolean state = true; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); textOut = (EditText)findViewById(R.id.textout); button = (Button)findViewById(R.id.send); connect = (Button)findViewById(R.id.connect_ip); textIn = (TextView)findViewById(R.id.View); ip_in = (EditText)findViewById(R.id.ip_in); button.setOnClickListener(buttonSendOnClickListener); connect.setOnClickListener(connectOnClickListener); } Button.OnClickListener connectOnClickListener = new Button.OnClickListener() { public void onClick(View arg1) { if(state == false && textOut.length() == 0) connect.setText("Connect"); if(ip_in.getText()!= null) { address = (String) ip_in.getText().toString(); state = ! state; ip_in.setEnabled(state); connect.setText("New connection"); } }; }; Button.OnClickListener buttonSendOnClickListener = new Button.OnClickListener() { public void onClick(View arg0) { Socket socket = null; DataOutputStream dataOutputStream = null; DataInputStream dataInputStream = null; try { InetAddress ipAddress = InetAddress.getByName(address); socket = new Socket(ipAddress, 11000); dataOutputStream = new DataOutputStream(socket.getOutputStream()); dataInputStream = new DataInputStream(socket.getInputStream()); dataOutputStream.writeUTF(textOut.getText().toString()); textIn.setText(dataInputStream.readUTF()); textOut.setText(""); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); e.getMessage(); } finally { if (socket != null) { try { socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (dataOutputStream != null) { try { dataOutputStream.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (dataInputStream != null) { try { dataInputStream.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }; }
Package Explorer -ից բացում ենք client -> res -> layout -> main.xml ֆայլը Ջնջում ենք նկարում պատկերված ուղղանկյունու մեջ վերցրած հատվածը
Դրանից հետո գրում ենք .xml կոդի մի հատված, որը պատասխանատու է մեր փոքրիկ android-application -ի արտաքին տեսքի համար. Բերենք main.xml– ֆայլի ամբողջական տարբերակը.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <!-- Ահա այստեղ փոխարինում ենք ուղղանկյան մեջ նշված կոդը հետևյալ կոդով --> <TextView android:id="@+id/textIn" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <!-- Այստեղից հետո ավելացնում ենք կոդի մնացած հատվածը --> <EditText android:id="@+id/textout" android:layout_width="match_parent" android:layout_height="wrap_content" > <requestFocus /> </EditText> <EditText android:id="@+id/ip_in" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/View" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="" /> <Button android:id="@+id/send" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Send" /> <Button android:id="@+id/connect_ip" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Connect" /> <TableLayout android:id="@+id/tableLayout1" android:layout_width="match_parent" android:layout_height="wrap_content" > <TableRow android:id="@+id/tableRow1" android:layout_width="wrap_content" android:layout_height="wrap_content" > </TableRow> <TableRow android:id="@+id/tableRow2" android:layout_width="wrap_content" android:layout_height="wrap_content" > </TableRow> <TableRow android:id="@+id/tableRow3" android:layout_width="wrap_content" android:layout_height="wrap_content" > </TableRow> </TableLayout> </LinearLayout>
Package Explorer -ից բացում ենք client – > AndroidManifest.xml ֆայլը ու ավելացնում հետևյալ մեկ տողը.
<uses-permission android:name="android.permission.INTERNET"/>
AndroidManifest.xml ֆայլի ամբողջական տարբերակը.
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="client.project" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <uses-permission android:name="android.permission.INTERNET"/> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".ClientActivity" 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>
Այժմ արդեն պրոյեկտը ամբողջապես պատրաստ է, մնում է այն կոմպիլացնել և աշխատեցնել: Դրա համար Eclipse -ում գնում ենք Run -> Run, կամ ուղղակի Ctrl + F11: Մի քիչ սպասում ենք, մինչ Android emulator -ը կբեռնվի, բացում ենք ծրագրերի բաժինը ու 2 անգամ սեղմում մեր կողմից ստեղծված Client ծրագրի վրա.
Մեր ծրագիրը բացվելուց հետո պետք է սկզբից վերևից երկրորդ տեքստային դաշտում մուտքագրել սերվերի IP հասցեն, սեղմել connect և հետո նոր արդեն կարելի կլինի ամենավերևի տեքստային դաշտում հրամաններ գրել և send անել.
Երբ արդեն connect ենք եղել, արդեն կարող ենք հրամաններ ուղարկել սերվերին: Ամենավերևի տեքստային դաշտում գրում ենք հրամանը ու սեղմում send.
Ցանկանում եմ հիշեցնել, որ այս հոդվածաշարը նախատեսված է ուսուցողական ` Android + Pc + Arduino ինտերֆեյսի իրականացման նպատակների համար և այդ պատճառով ծրագրերի արտաքին տեսքին (GUI -ին) մեծ ուշադրություն չի դարձվել. ամեն դեպքում դուք ինքներդ, եթե կցանկանաք, կարող եք բարելավել այն ( GUI -ին):
4– մասում կներկայացնենք Arduino էլեկտրոնային պլատայի ծրագրավորման գործընթացը:
Շարունակելի…
Pingback:Android + PC + Arduino: Տնային սարքերի կառավարում անդրոիդ օհ -ով սմարթ ֆոնից/պլանշետից: Մաս 4, Arduino -ի ծրագրավորում: : ՀայIT.org
[…] Երրորդ մասում գրեցինք կլիենտային մասը: Այժմ, արդեն հասանք Arduino պլատայի ծրագրավորմանը: Arduino -ի ծրագրավորման լեզուն կոչվում է Processing/Wiring, որը շատ պարզ լեզու է ու ունի C-անման syntax: Շատերը գիտեն, օգտվում են և ծրագրավորում են իրենց Android դիվայսները, էլ չեմ խոսում անձնական օգտագործման համակարգիչների մասին: Բայց երևի թե Հայաստանում քչերը գիտեն, թե ինչ է Arduino էլեկտրոնային պլատֆորմը և ինչի համար է նախատեսված: Համառոտ անդրադառնանք, թե ինչ է այն իրենից ներկայացնում: […]