Android 4.0 UDP bilgi gönderme?

Başlatan Veli B., 23 Haziran 2012, 15:04:32

Veli B.

Android konusunda bilgim yok ve yeni başlayacağım.
Yapmak istediğim ekrana basit bir ikon yerleştirmek ve bu ikona basılınca UDP üzerinden bir byte bilgi göndermek.

Bunu yapabilmek için nereden başlamalıyım?
Hangi IDE vb ortamları kurmalı, nelere dikkat etmeliyim?

İnternette android üzerine yazılım geliştirme için bir çok kaynak mevcut lakin birbirinden çok farklı anlatım ve yollar dan bahsedilmiş.
En kısa ve elektronikçi için en doğru yoldan bunu yapmayı öğrenmek istiyorum!


teknikelektronikci

Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

Veli B.

App Inventor' da Socket konusunda çözüm bulamamıştım, yakın zamanda bakmadım ama bu kadar kısa sürede ekleyeceklerinden umudum yok. Yinede de tekrar bakayım.

Engineer Jr.

Hocam ben bitirme projesinde Android üzerinden mikrodenetleyiciye UDP ile paketler yollamıştım. Öncelikle Android uygulaması geliştirmek için Eclipse geliştirme ortamını ve Android SDK kurmanız gerekli. Şu an yurtdışında olduğum için kodlara ulaşabileceğimden emin değilim, evimdeki bilgisayara ulaşabilirsem kodları da yollarım.

MC_Skywalker

Developer.Android.com.  eclipse Ide si ile kullanılıyor.  Kaynak mevcut.

Engineer Jr.

Tezin kendisini buldum  :) UDP paketi göndermek için şöyle bir metot yazmıştım. İşinizi görür sanırım. Yalnız sıfırdan başlıyorsanız temel noktaları öğrenmeniz gerek. "developer.android.com" en büyük yardımcı.


public void sendPacket(String IP, int port, String message) 
     {    	 
   	  try    	  
   	  	{
   		  byte[] bytes = null;	
              // Komutu bayt dizisine dönüştür   		  	  
   		  bytes = message.getBytes("ASCII");
   		  
    
       	   InetAddress address;
   		  
   		   try 
   		  	{
   			  // IP numarasını InetAddress nesnesine dönüştür
   			  address = InetAddress.getByName(IP);			 
   			}
   		   
   		   catch (Exception e) 
   		  	{
   			   // Hata yakalanırsa uyarı ver
       		  	   Log.e("Error","IP Adresi Cozumlenemedi");	    			
               		   return;
   		  	}
   		  
   		  /* DatagramPacket ve DatagramSocket nesnesi oluştur, paketi soketten                              
            	      gönder ve soketi kapat     */
   		  DatagramPacket packet = new DatagramPacket(bytes, bytes.length,
     								          address, port);
   		  DatagramSocket socket = new DatagramSocket();    		
   		  socket.send(packet);
   		  socket.close();
   	  	} 	  	
   	  
   	  catch (Exception e) 
   	  	{
   		// Hata yakalanırsa uyarı ver
       		Log.e("Error","Exception");				    		
       		return;
       	}
  	}

Veli B.

Alıntı yapılan: Engineer Jr. - 23 Haziran 2012, 21:10:41
Tezin kendisini buldum  :) UDP paketi göndermek için şöyle bir metot yazmıştım. İşinizi görür sanırım. Yalnız sıfırdan başlıyorsanız temel noktaları öğrenmeniz gerek. "developer.android.com" en büyük yardımcı.


İlginize teşekkür ederim.
Sanırım amacımı ifade edemedim. Koddan ziyade nasıl yapacağım kısmını öğrenmek istiyorum. Örneğin bir buton nesnesi oluşturdum ekranda, buna tıkladığımda event oluşmasını nasıl sağlayacağım ve metodu nasıl yönlendireceğim. Veya 3-5 tane ikon koydum, bu ikonlardan o metodu nasıl çağıracağım veya gideceğim gibi konular sorun. Kod kısmı ondan sonra. Olayın mantığını anlamaya çalışıyorum.

Mahsuru yok ise tezinizi paylaşabilir misiniz?

Veli B.

Android üzerinde kullanabileceğim bir numerik klavye ihtiyacım var. 0-9 * # ve enter. Örnek uygulama kodu önerebilecek var  mı?

meliksah

hocam bana da boyle bır proje lazmda yardımcı olabılırmsınıznasıl kod yazmam lazım pic ile haberleşmem için

engerex

#9
Delphi XE5 kullanın.

olemiss

Alıntı yapılan: katana - 23 Haziran 2012, 15:04:32
Android konusunda bilgim yok ve yeni başlayacağım.
Yapmak istediğim ekrana basit bir ikon yerleştirmek ve bu ikona basılınca UDP üzerinden bir byte bilgi göndermek.
Sadece güzel bir başlangıç olduğunu söylemek istiyorum.  Yeni bir platforma başlangıç yapan biri için basit olmamasına rağmen, sınırları güzel belirtilmiş bir problem.
Yazılım Mühendisi, Çevirmen.

X-Fi

Daha önce hazır bir proje üzerinden buna benzer bir çalışma yapmıştım fikir vermesi açısından paylaşıyorum.

Burada benim için önemli olan şey static-ip alamadığım için cihazları eşleştirmek sorun oldu. Bunuda kendi web sayfamı kullanarak aştım. Android yazılımında bir ip sorgulayan bir web sayfasına bağlanıp ip adresini coskunergan.com/ip.txt içerisine atıyorum. Bağlanmak isteyen client cihaz da bu ip adresini kullanıp soket bağlantısı kuruyor idi. Amacım basit bir robot kontrolü yapmaktı ama bitiremedim. Başlıca sebebi tuş gecikmesiydi. 2sn'leri bulabiliyor ve gprs bağlantısının askıya alınması engellemek (sanıyorum telefonların güç tasarrufu yönetimi ile ilgili bir durum) gerekiyordu bu yüzden client tarafından saniyede bir dummy byte göndermiştim umarım başlangıç için işinize yarar.


package roman10.tutorial.tcpcommserver;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.MalformedURLException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.URI;
import java.net.URL;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.ToggleButton;

public class TcpServer extends Activity 
{
    /** Called when the activity is first created. */
	   ServerSocket ss = null;
	    Socket s = null;
	   String mClientMsg = "";
	   Thread myCommsThread = null;
	   protected static final int MSG_ID = 0x1337;
	   public static int SERVERPORT;
	   private Button Ileri;
	   private Button Geri;
	   private Button Sag;
	   private Button Sol;
	   private ToggleButton Baglan;
	   boolean bagli =false;

	   @Override
	  public void onCreate(Bundle savedInstanceState) {
	   super.onCreate(savedInstanceState);
	   setContentView(R.layout.main);
	   final TextView Ekran = (TextView) findViewById(R.id.LogEkran);
	   final EditText IpEkran = (EditText) findViewById(R.id.IpText);
	   final EditText PortEkran = (EditText) findViewById(R.id.PortText);
	    Ileri = (Button) findViewById(R.id.IleriButon);
	    Geri = (Button) findViewById(R.id.GeriButon);
	    Sag = (Button) findViewById(R.id.SagButon);
	    Sol = (Button) findViewById(R.id.SolButon);
		Baglan = (ToggleButton) findViewById(R.id.BaglanToggle);
 
	      
	   PortEkran.setText("50933");
	       
	
	   try{ // kendi ip adresini internetten sorgular ve coskunergan.com/ip.txt içine yazar
		   IpEkran.setText(getIpAddress());	 
       } catch (IOException e) {
           e.printStackTrace();
       }    	
 
	   
	   Baglan.setOnClickListener(new OnClickListener()  
       {
           @Override
           public void onClick(View v) {
        	
        	   
        	   if((Baglan.isChecked()))
        	    {
        		   
        		   Ekran.setText("Bağlanılıyor...");
        		   String str = PortEkran.getText().toString();
        		   SERVERPORT = Integer.parseInt(str);
        		   myCommsThread = new Thread(new CommsThread());
        		   myCommsThread.start();
        		    
        		   
        	    }
        	    else
        	    {
        	    	Ekran.setText("Server Kapatildi...");
        	    	onStop();
        	    	bagli=false;
        	    }        	    
           	
           	
           }
       });	   
	   Ileri.setOnClickListener(new OnClickListener()  
       {
           @Override
           public void onClick(View v) {
        	  
        	 if(bagli == false)return;
           	Ekran.setText("İleri"  );
           	
            try {
	          
	          BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));           	
	          out.write("\nILERI\r" );
	          out.flush();
 
	        } catch (IOException e) {
	            e.printStackTrace();
	        }
           }
       });
       Geri.setOnClickListener(new OnClickListener()  
       {
           @Override
           public void onClick(View v) {
        	   if(bagli == false)return;
           	Ekran.setText("Geri" );
            try {
  	          
	          BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));           	
	          out.write("\nGERI\r" );
	          out.flush();
 
	        } catch (IOException e) {
	            e.printStackTrace();
	        }    	
           }
       });
       Sag.setOnClickListener(new OnClickListener()  
       {
           @Override
           public void onClick(View v) {
        	   if(bagli == false)return;
           	Ekran.setText("Sag" );
            try {
    	          
	          BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));           	
	          out.write("\nSAG\r");
	          out.flush();
 
	        } catch (IOException e) {
	            e.printStackTrace();
	        }    	
           }
       });
       Sol.setOnClickListener(new OnClickListener()  
       {
           @Override
           public void onClick(View v) {
        	   if(bagli == false)return;
           	Ekran.setText("Sol" );
            try {
    	          
	          BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));           	
	          out.write("\nSOL\r" );
	          out.flush();
 
	        } catch (IOException e) {
	            e.printStackTrace();
	        }    	
           }
       });        
	   

	   }
	   private void HttpGet(URI myURI) {
		// TODO Auto-generated method stub
		
	}
	////////////////////////////////////////////////////////////////////////////
	   
	   public String getIpAddress() throws MalformedURLException, IOException {
		   	  String ip=null;
	    	  URL myIP = new URL("http://api.externalip.net/ip/");
	    	  
	    	  BufferedReader in = new BufferedReader(
	    	                       new InputStreamReader(myIP.openStream())
	    	                      );
	    	  
	    	  ip=in.readLine();
	    	  myIP = new URL("http://www.coskunergan.com/yukleyici.php?ip=" + ip );
	    	  myIP.openStream();
	    	  return ip;
	    	  }
	   @Override
	   protected void onStop() {
	   super.onStop();
	   try {
	        // make sure you close the socket upon exiting
	       s.close();
	    } catch (IOException e) {
	       e.printStackTrace();
	    }
	   }

	   Handler myUpdateHandler = new Handler() {
	    public void handleMessage(Message msg) {

	        switch (msg.what) {
	         case MSG_ID:
	             TextView Ekran = (TextView) findViewById(R.id.LogEkran);
	             Ekran.setText(mClientMsg);
	            break;
	         default:
	            break;
	         }
	        super.handleMessage(msg);
	    }
	  };
	   class CommsThread implements Runnable {
	    public void run() {
	     
	        try {
	        ss = new ServerSocket(SERVERPORT);
	    } catch (IOException e) {
	        e.printStackTrace();
	    }
	    while (!Thread.currentThread().isInterrupted()) {
	        Message m = new Message();
	        String incomingMsg;
	        m.what = MSG_ID;

	        try {
	            if (s == null)
	                s = ss.accept();
	            BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream()));
	            BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));   	
	   
	            			incomingMsg = input.readLine();
							
	                        mClientMsg=null;
	                      	if(bagli ==false)
	                    	{
	                     	   bagli=true;
	                     	  mClientMsg="Bağlandı...";
	                    	}	                        
	                      	else
	                        mClientMsg=incomingMsg;
	                      	
	                        myUpdateHandler.sendMessage(m);
	              
	              	     	  
	        } catch (IOException e) {
	            e.printStackTrace();
	        }
	        

	    }
	}
  }
}




http://www.coskunergan.com/wp-content/uploads/2013/12/coskun_androidserver.rar
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

meliksah

Engineer Jr. hocam tezinizi örnek olarak gönderebilirmsiniz