Archive for the ‘ Android ’ Category

Ubuntu kullanıyorsanız Sun JDK consoldan yüklemek için aşağıdaki adımları takip edin. Linux Mint 10 da depoda var zaten.

sudo add-apt-repository "deb http://archive.canonical.com/lucid partner"
sudo apt-get update
sudo apt-get install sun-java6-jdk

Linux‘a Sun JDK‘yı yükledikten sonra eğer bilgisayarınız 64 bit ise buna benzer bir hata alırsınız: Failed to get the adb version: Cannot run program “/home/osatek/android-sdk-linux_x86/tools/adb”: java.io.IOException: error=2, No such file or directory solved

64 bit bilgisayarlarda Android SDK hata veriyor. Çözüm 32 bitlik paketi yüklemektir:

 sudo apt-get install ia32-libs 

Android ile Notification oluşturmaya çalıştım. Start buttonuna basınca create ediyor ve stop buttonuna basınca kapatiyor.

Bir de açılırken titreşim(vibrate) olmasını istiyorum. Bunun için AndroidManifest.xml içinde izin vermeniz gerekiyor.

 <uses-permission android:name="android.permission.VIBRATE"></uses-permission> 

Bir uygulamanın multi language olmasını sağlamak için values folderlarını eklemeniz lazım. Default olarak ingilizcedir. Aşağıdaki resimde ben Türkçe ekledim. values-tr şeklinde. Buttonların text değerleri atanırken Android cihazınızın dili Türkçe ise Türkçe olan values-tr altındaki strings.xml içindeki değerler atanıyor ama diğer dillerden biri ise Ingilizce ataniyor. Mesela Japonca eklemek için de values-ja altında values-tr ve values altındaki strings.xml içindeki değerlerin japoncalarını yazmanız lazım.

NotificationBarActivity.java

package com.notification.sample;

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class NotificationBarActivity extends Activity {
    
	private Button button_start, button_stop;
	private  int notifi_id=17;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        button_start=(Button) findViewById(R.id.button1_start);
        button_stop=(Button) findViewById(R.id.button2_stop);
        button_start.setOnClickListener(start);
        button_stop.setOnClickListener(stop);
    }
    OnClickListener stop=new OnClickListener() {
		
		@Override
		public void onClick(View v) {
			close_notify();
			
		}
	};
    OnClickListener start=new OnClickListener() {
		
		@Override
		public void onClick(View v) {
//Start tıklandiginda bir notification cikartiyor.
			create_notify();
			
		}

	};

	
	private void create_notify() {
		String ns=Context.NOTIFICATION_SERVICE;
		NotificationManager notMan=(NotificationManager) getSystemService(ns);
		int icon=R.drawable.icon;
		CharSequence tickerText="Android Notificaion";
		long when=java.lang.System.currentTimeMillis();
		Notification notification=new Notification(icon, tickerText, when);
		Context context=getApplicationContext();
		CharSequence contentTitle="Android";
		CharSequence contentText="I want to learn Android";
//Notification NotificationBarActivity activityde goruntulenir
		Intent notifiaction_intent=new Intent(getBaseContext(), NotificationBarActivity.class);
//PendingIntent android içinde uygun bir bileşen tarafından alınmayana kadar saklanılırlar. 
//Normal intentlerde böyle bir şey yok. Intenti karşılayan bir alıcı olmadığında kaydedilmezler.
		PendingIntent contentIntent=PendingIntent.getActivity(this, 0, notifiaction_intent, 0);
		notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
//Titreşim oluşturuyor. Bunun için AndroidManifest.xml içinde izin vermeniz lazım.
		notification.vibrate=new long[]{200,300};
		notMan.notify(notifi_id, notification);
		
	}
	
	
	private void close_notify()
	{
		NotificationManager notificationManager=(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
//Bu id ye ait olan notificationu kapatiyor.
		notificationManager.cancel(notifi_id);
	}

}

android:text=”@string/start” ve android:text=”@string/stop” ile telefonuzun dili ne ise o dildeki text değerini buttona atiyor.

Bunun yerine

notification.vibrate=new long[]{200,300}; 

aşağıdaki kod satırını yazarsanız da olur. Yani bu satırı silip aşağıdaki kod satırını yazarsanız aynı işlevi görür.

 ((Vibrator)getSystemService(VIBRATOR_SERVICE)).vibrate(600); 

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <Button 
    android:id="@+id/button1_start" 
    android:layout_height="wrap_content" 
    android:text="@string/start" 
    android:layout_width="match_parent">
    </Button>
    <Button 
    android:id="@+id/button2_stop" 
    android:layout_height="wrap_content" 
    android:text="@string/stop" 
    android:layout_width="match_parent">
    </Button>
</LinearLayout>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.notification.sample"
      android:versionCode="1"
      android:versionName="1.0">
      
<uses-permission android:name="android.permission.VIBRATE"></uses-permission>


    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".NotificationBarActivity"
                  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>

values–>strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">NotificationBar</string>
    <string name="start">Start Notification</string>
    <string name="stop">Stop Notification</string>
</resources>

values-tr–>strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="start">Bildirimi Baslat</string>
    <string name="stop">Bildirimi Durdur</string>
    
</resources>

Download NotificationBar.tar.gz

AndroidManifest.xml içinde tanımlanan android:versionCode, android:versionName ve paketimizin ismini package com.information.manifest; texviewe yazmaya çalıştım.
Manifest içindeki değerlere

getPackageManager().getPackageInfo() 

hazır metodlarla erişiyoruz.

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.information.manifest"
      android:versionCode="2"
      android:versionName="1.1.4">


    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".ManifestInformationActivity"
                  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>

ManifestInformationActivity.java

package com.information.manifest;

import android.app.Activity;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;

public class ManifestInformationActivity extends Activity {
    private String vName, pName;
    private TextView textView_info;
	int vCode;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        textView_info=(TextView) findViewById(R.id.textView1_info);
        try {
//AndroidManifest.xml içinde tanımlanan versionCode, versionName ve paket ismini textview yazdim.
			vName=getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
			vCode=getPackageManager().getPackageInfo(getPackageName(), 0).versionCode;
			pName=getPackageManager().getPackageInfo(getPackageName(), 0).packageName;
		} catch (NameNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		textView_info.setText("Version Name: "+vName+"  Version Code: "+vCode+"  Package Name:"+pName);
    }
}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <TextView android:textAppearance="?android:attr/textAppearanceLarge" android:id="@+id/textView1_info" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView"></TextView>
</LinearLayout>

Download ManifestInformation.tar.gz

Android ile AlertDialog kullanmaya çalıştım. AlertDialog kullanıcıya seçenek sunmak için kullanılır.


AlertDialogActivity.java

package com.dialog.alert;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class AlertDialogActivity extends Activity {
    private Button show_builder_dialog;
    private Button button_start;
    private AlertDialog.Builder alBuilder;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        show_builder_dialog=(Button) findViewById(R.id.button1_builder);
        button_start=(Button) findViewById(R.id.button1_activity);
        show_builder_dialog.setOnClickListener(builder_alert);
        button_start.setOnClickListener(dialog_alert);
//Builder create ediyoruz.
        create_builder();
        
        
    }

//Evet tiklandiginda activityi sonlandiriyor. Hayir tiklandiginda ise dialogu kapatiyor
	private void create_builder() {
		alBuilder=new AlertDialog.Builder(this);
        alBuilder.setMessage("Do you want to close this window?")
        .setCancelable(false)
        .setPositiveButton("Evet", new DialogInterface.OnClickListener() {
			
			@Override
			public void onClick(DialogInterface dialog, int which) {
				finish();
				
			}
		})
		.setNegativeButton("No", new DialogInterface.OnClickListener() {
			
			@Override
			public void onClick(DialogInterface dialog, int which) {
				dialog.cancel();
				
			}
		});
	}
    OnClickListener builder_alert=new OnClickListener() {
		
		@Override
		public void onClick(View v) {
//BUrada builder create ediliyor ve gosteriliyor.
			AlertDialog alertDialog=alBuilder.create();
			alertDialog.setIcon(R.drawable.icon);
			alertDialog.show();
			
		}
	};
	
	OnClickListener dialog_alert=new OnClickListener() {
		
		@Override
		public void onClick(View v) {

			Intent intent=new Intent(getApplicationContext(), Dialog.class);
			startActivity(intent);
			
		}
	};
}

Dialog.java

package com.dialog.alert;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.widget.Toast;

public class Dialog extends Activity {
	private AlertDialog alertDialog;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		//Her tiklandidiginda dialog create ediytor.
		create_dialog();
		
	}
	
	//Dilaog ile uc secenek sunuyor
	private void create_dialog() {
		alertDialog=new AlertDialog.Builder(this).create();
        alertDialog.setMessage("This is alert dialog without builder");
        alertDialog.setButton("Tamam", new DialogInterface.OnClickListener() {
			
			@Override
			public void onClick(DialogInterface dialog, int which) {
				Toast.makeText(getApplicationContext(), "Tamam tiklandi", Toast.LENGTH_SHORT).show();
				return;
				
			}
		});
        alertDialog.setButton2("Iptal", new DialogInterface.OnClickListener() {
			
			@Override
			public void onClick(DialogInterface dialog, int which) {
				Toast.makeText(getApplicationContext(), "Iptal tiklandi", Toast.LENGTH_SHORT).show();
				return;
				
			}
		});
        alertDialog.setButton3("Close Activity", new DialogInterface.OnClickListener() {
			
			@Override
			public void onClick(DialogInterface dialog, int which) {
				finish();
				return;
				
			}
		});
//dialogu gosteriyor
        alertDialog.show();
	}

}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Show Builder" android:id="@+id/button1_builder"></Button>
    <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Start Activity" android:id="@+id/button1_activity"></Button>
</LinearLayout>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.dialog.alert"
      android:versionCode="1"
      android:versionName="1.0">


    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".AlertDialogActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="Dialog"></activity>

    </application>
</manifest>

Dwonload AlertDialog.tar.gz

Android ile home buttonun click olayını algılanmadığını açıklamaya çalışacağım. Diğer hangi tuş için onKeyDown() metouduna bir şey yazarsanız çalışır ama home buttonu istisnadır.
Çünkü home buttonu tıklanırken activity sırayla onPause() -> onStop(); metodlarını çalıştırıyor.
Siz aşağıdaki gibi home buttonun tıklanma olayında activityi sonlandırsanız dahil sonlanmaz.

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
	        switch (keyCode) {
	        case KeyEvent.KEYCODE_HOME:
	        	onDestroy();
	        	Log.d(">>>", "home buttonu tiklanarak activity sonlandi");
	            finish();
	            break;
	        	}
		return super.onKeyDown(keyCode, event);
	}

Dikkat bu logu atmadi:

 Log.d(">>>", "home buttonu tiklanarak activity sonlandi");  


HomeClickSampleActivity.java

package com.homeclick;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.widget.Toast;

public class HomeClickSampleActivity extends Activity {
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
    }

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
	        switch (keyCode) {
	        case KeyEvent.KEYCODE_HOME:
	        	onDestroy();
	        	Log.d(">>>", "home buttonu tiklanarak activity sonlandi");
	            finish();
	            break;
	        	}
		return super.onKeyDown(keyCode, event);
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
	}
//Home buttonuna tıklanınca önce bu sonra onStop() metodu çalışıyor
	@Override
	protected void onPause() {
		super.onPause();
		onDestroy();
		Log.d(">>>>>>>>>>>>>>>", "activity finished");
		finish();
	}
	@Override
	protected void onStop() {
		super.onStop();
		Log.d("onStop calisti", "onStop() metodu");
	}
	
	
}

Sırayla onPause() -> onStop(); metodlarındaki atılan loglara DDMS’den bakabilirsiniz.
Download HomeClickSample.tar.gz

Eclipse açıkken windows–>Android SDK and AVD Manager–>Available packages–>Android Repository tıklayıınca fetch url hatasını alıyorsanız:
Failed to fetch URL https://dl-ssl.google.com/android/repository/repository.xml, reason: java.security.cert.CertificateException: No name matching dl-ssl.google.com found

Düzeltmek için android-sdk-linux_x86–>tools çift tıklayıp run seçeneğini tıklayın

Force https://… sources to be fetched using http://… seçeneğini seçmek yeterlidir.

Aşağıdaki resimde seçmeniz sorunu çözüyor.

Ben de Android 3.1 yüklü olduğundan görünmüyor. Istediğiniz Android SDK versiyonunu yükleyebilsiniz.

Android ile arkaplana atılan resme dokunduğumuz zaman bir dikdörtgen çiziyor

canvas.drawRect(left, top, left + 30, top + 50, paint);

ve MediaPlayer ile draw resourcenin altında bir telefon zili çalıyor

mediaPlayer=MediaPlayer.create(context, R.raw.phone_ring);



CustomDrawable.java

package com.custom.drawable;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.WindowManager;

public class CustomDrawable extends Activity {

    private DrawView drawView;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        
        drawView = new DrawView(this);
        drawView.setBackgroundResource(R.drawable.wallpaper);
        setContentView(drawView);
        drawView.requestFocus();
    }

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if(keyCode==event.KEYCODE_BACK){
			this.finish();
		}
		return super.onKeyDown(keyCode, event);
	}

	
}

DrawView.java

package com.custom.drawable;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.media.MediaPlayer;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;


public class DrawView extends View implements OnTouchListener {
	private Paint paint = new Paint();
	private float left;
	private float top;
	private boolean is_clicked = false;
	private MediaPlayer mediaPlayer;


	public DrawView(Context context) {
		super(context);
		setFocusable(true);
		setFocusableInTouchMode(true);

		this.setOnTouchListener(this);

		paint.setColor(Color.RED);
		paint.setAntiAlias(true);
		mediaPlayer=MediaPlayer.create(context, R.raw.phone_ring);
	}

	@Override
	public void onDraw(Canvas canvas) {
		if (is_clicked) {
			canvas.drawRect(left, top, left + 30, top + 50, paint);
		}
	}

	public boolean onTouch(View view, MotionEvent event) {
		is_clicked = true;
//Tiklanan kordinatlar
		left = event.getX();
		top = event.getY();
		// Tasinmayi sagliyor
		invalidate();
		mediaPlayer.start();
		return true;
	}
	


}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/wallpaper"
    >    
</LinearLayout>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.custom.drawable"
      android:versionCode="1"
      android:versionName="1.0">


    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".CustomDrawable"
                  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>

Download CustomDrawableSample.tar.gz

Android telefona Factory Reset nasıl atılacağını açıklayacağım. Factory reset isminden de anlaşıldığı gibi fabrika ayarlarına döndürmek için yapılır. Yani içinde size ait ne varsa hepsi silinir veya sıfırlanır. Aşağıdaki adımları takip edin.
1. Menu button tıklayın–>Settings tıklayın

settings

2. Privacy seçeneğini tıklayın

3. Factory data reset seçeneğini tıklayın

4. Reset phone buttonunu tıklayın

5. Erase everything buttonunu tıklayın

6. Telefon yeniden başlatılıyor

7. Yeniden başlatılınca ekranda Language seçtikten sonra Welcome to Liquid Metal(Sizin telefon ismi farklı olabilir) yazısının hemen altında
Touch the Android to begin yazısı var ve bir el Android iconunu tıklamanız için işaret ediyor.
Kısaca dil seçimi yaptıktan sonra ekrandaki Android iconunu tıklıyoruz.

8. Sonra skip veya begin /next ile adımları takip edip Set up yoru google acount hesabınızı girip en sonunda Finish Setup buttonu tıklayıp bitirin.

Telefonunuza gmail bilgilerinizi girdiğiniz için direkt marketi çalıştırıp applications install edebilirisniz.

Yazdığım basit uygulamaları download etmek için tıklayın.

Android ile image click edildiğinde istenen websiteyi açmaya çalıştım.

android click image


Android Load Image From URL in Gallery Example örneğine bakarsanız daha iyi analrsınız.
public void onClick(View v){} metodu OnClickListener interfacesinde tanimlidir. imageView.setOnClickListener(this); ile listener ekliyorsunuz.
OpenUrlActivity.java

package com.open.website;

import java.io.InputStream;
import java.net.URL;

import android.app.Activity;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;

public class OpenUrlActivity extends Activity implements OnClickListener{
    
	private ImageView imageView;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        imageView=(ImageView) findViewById(R.id.imageView1_url);
        imageView.setOnClickListener(this);

    }
    
	@Override
	protected void onResume() {
		super.onResume();
		String url="http://www.ethemsulan.com/wp-content/themes/mahinhin/images/kelime.png";
		imageView.setBackgroundDrawable(loadImageFromURL(url));
		
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.imageView1_url:
//Image tiklandiginda ethemsulan.com sitesini aciyor tarayicidan.
    		Intent intent_website=new Intent(Intent.ACTION_VIEW);
    		intent_website.setData(Uri.parse("http://www.ethemsulan.com/"));
    		startActivity(intent_website);
			break;
		}
		
	}

	 private Drawable loadImageFromURL(String url)
	    {
	    try
	    {
	    InputStream is = (InputStream) new URL(url).getContent();
	    Drawable d = Drawable.createFromStream(is, "src");
	    return d;
	    }catch (Exception e) {
	    System.out.println(e);
	    return null;
	    }
	 }

    
}

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="horizontal">
    <ImageView android:id="@+id/imageView1_url" android:layout_height="180dip" android:layout_gravity="center_vertical" android:layout_width="match_parent"></ImageView>
</LinearLayout>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.open.website"
      android:versionCode="1"
      android:versionName="1.0">
<uses-permission android:name="android.permission.INTERNET"></uses-permission>


    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".OpenUrlActivity"
                  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>

Downlaod OpenUrl.tar.gz

Android ile Contact Form oluşturmaya çalıştım. Bu örnekte önemli olan

android:lines="4" android:singleLine="false"

ile textarea oluşturuyoruz.

android:singleLine="true"

bu da girilen değerin tek satırda yazılmasını sağlar.
Internette genelde email kontrolü için güzel bir tane RE kullanılmış. Düzenli ifadeler örneklerine bakmak için Regular Expression linkini tıklayın. How to Find or Validate an Email Address Java Example linkinde daha önce yazdığım email kontrolü yapan kod örneğine bakabilirisniz.
Daha önceki activityleri sonlandırmak için aşağıdaki kod kullanılır. Android bilmediğimden bugların neyden kaynaklandığını kestiremiyorum. Uygulama geliştiriken karşılaştığım bir bugı 3-4 gün çözemedim. Tesadüfen dün okuduğum bir makeleden çözümü buldum. Çözüm aşağıdaki tek satırlık kodmuş:)

intent_contact.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

Android Option Menu and Submenu Sample bakmayı unutmayın.

option menu

Android contact form

form android

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" android:orientation="vertical">
<TextView android:text="First-last Name:*" android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
<EditText android:id="@+id/editText1_name" android:layout_height="wrap_content" android:layout_width="match_parent" android:text="" android:maxLength="50" android:singleLine="true"></EditText>
<TextView android:text="E-mail Address:*" android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
<EditText android:id="@+id/editText2_mail" android:layout_height="wrap_content" android:layout_width="match_parent" android:text="" android:maxLength="50" android:singleLine="true"></EditText>
<TextView android:text="Message:*" android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
<EditText android:id="@+id/editText3_message" android:layout_height="wrap_content" android:layout_width="match_parent" android:text="" android:maxLength="250" android:lines="4" android:singleLine="false"></EditText>
<Button android:text="Send" android:id="@+id/button1_send" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
</LinearLayout> 

MyStartActivity.java

package com.form.contact;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;

public class MyStartActivity extends Activity {
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
    }
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		MenuInflater menuInflater=getMenuInflater();
		menuInflater.inflate(R.menu.menu, menu);
		return super.onCreateOptionsMenu(menu);
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case R.id.item1_contact:
			Intent intent_contact=new Intent(getApplicationContext(), ContactFormAnd.class);
//Daha önceki activityler sonlandırılır ve bu başlatılır.
			intent_contact.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
			startActivity(intent_contact);
			break;
		}

		return super.onOptionsItemSelected(item);
	}
}

ContactFormAnd.java

package com.form.contact;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class ContactFormAnd extends Activity{
    private EditText editText_name;
    private EditText editText_mail;
    private EditText editText_message;
    private Button button_send;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        editText_name=(EditText) findViewById(R.id.editText1_name);
        editText_mail=(EditText) findViewById(R.id.editText2_mail);
        editText_message=(EditText) findViewById(R.id.editText3_message);
        button_send=(Button) findViewById(R.id.button1_send);
	}
		
	@Override
	protected void onResume() {
		super.onResume();
			button_send.setOnClickListener(new Button.OnClickListener() {
				
				@Override
				public void onClick(View v) {
					String name=editText_name.getText().toString();
					String mail=editText_mail.getText().toString();
					String message=editText_message.getText().toString();
					
					if(name.length()>3 && mail.length()>3 && message.length()>6)
					{
						if(ContactConfig.checkEmail(mail))
						{
	//Tabi toast mesajı göstermek yerine girilen bilgileri now() sql functionu ile şuanki tarih te eklenerek database kayedilir genelde.
							Toast.makeText(getApplicationContext(), "Send your message", Toast.LENGTH_SHORT).show();
							editText_name.setText("");
							editText_mail.setText("");
							editText_message.setText("");
						}else{
							Toast.makeText(getApplicationContext(), "Invalid e-mail address", Toast.LENGTH_SHORT).show();
						}
					}else
					{
						Toast.makeText(getApplicationContext(), "Invalid field data", Toast.LENGTH_SHORT).show();
					}
					
				}
			});
		}

}

ContactConfig.java

package com.form.contact;

import java.util.regex.Pattern;

public class ContactConfig {

    public final static Pattern EMAIL_ADDRESS_PATTERN = 
    	Pattern.compile(
              "[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]{1,256}" +
              "\\@" +
              "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}" +
              "(" +
              "\\." +
              "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25}" +
              ")+"
          );
    
    public static boolean checkEmail(String email) {
        return EMAIL_ADDRESS_PATTERN.matcher(email).matches();
    }

}

strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, ContactFormAnd!</string>
    <string name="app_name">Contact Form</string>
    <string name="contact">Contact Form</string>
</resources>

menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu
  xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:showAsAction="ifRoom" android:id="@+id/item1_contact" android:title="@string/contact"></item>
</menu>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.form.contact"
      android:versionCode="1"
      android:versionName="1.0">


    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".MyStartActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="ContactFormAnd"></activity>

    </application>
</manifest>

Download ContactFormSample.tar.gz