twitter
    Find out what I'm doing, Follow Me :)

Android Programlama Bundle Kullanımı


Android programlamada activiyler arası data geçişi için bundle kullanılır. Bundle yardımıyla bir activitye de mevcut olan data başka bir activitye gönderilebilir. Bir önceki yazımda edittext ten alınan numaranın aranması örnek uygulamasını yapmıştık . Bundle kullanımını öğrenmek için bu uygulama üzerinden değişiklik yapacağız. 

Örnek uygulamamız çalıştığında edittexte bir numara gireceğiz . Butona tıkladığımızda başka bir activity açılacak ve buradaki call butonuna tıkladığımızda bir önceki activityden gelen ve buradaki textviewda görünen numarayı arayacak. Bunun için öncelikle yeni bir xml ve java classı oluşturacağız . Bunlara other.xml ve other.java isimlerini verdim.

other.xml de bir adet textview ve butonumuzu ekliyoruz. Gerekli isimlendirmeleri yaptıktan sonra other.xml içeriği şu şekilde olur :

other.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:id="@+id/tvNumber"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

    <Button
        android:id="@+id/btnCall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Dial" />

    </LinearLayout>


Bu işlemden sonra MainActiviy.java classımızda da aşağıdaki değişiklikleri yapıyoruz :

MainActivity.java :


package com.example.dialnumber;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {

     EditText edtNumber ;
     Button btnDial ;
     private Intent intent;
     private Bundle bundle;

     @Override
     protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);        
        setContentView(R.layout.activity_main); 

        edtNumber = (EditText)findViewById(R.id.edtNumber);
  btnDial = (Button)findViewById(R.id.btnDial);      


        btnDial.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
     intent = new Intent("com.example.dialnumber.OTHER");
             bundle = new Bundle();
     bundle.putString("number",edtNumber.getText().toString());
     intent.putExtras(bundle);
     startActivity(intent);
}
});
     }

}



Other.java içeriği ise şu şekildedir :


package com.example.dialnumber;

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

public class other  extends Activity {
TextView tvNumber ;
Button btnCall ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.other);
tvNumber = (TextView)findViewById(R.id.tvNumber);
btnCall = (Button)findViewById(R.id.btnCall);
Bundle datas = getIntent().getExtras();
tvNumber.setText(datas.getString("number"));
btnCall.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialNumber();
}
});
}
public void dialNumber(){
if (!tvNumber.getText().toString().equals("")){
try {
    Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:"+tvNumber.getText().toString()));
startActivity(callIntent);
} catch (ActivityNotFoundException activityException) {
Log.e("Dialing Example", "Call failed");
}
}else {
Toast.makeText(getApplicationContext(),"Numara Giriniz",Toast.LENGTH_SHORT).show();
}
}
}




Örneğin mainactivityden other acitivitye bir data göndereceğiz . Bunun için Bundle değişkeni ve datanın gönderileceği bir intent oluşturulur. Daha sonra data herhangi bir keyword ile birlikte , örneğin datanın String türde olmasına göre putString komutuyla bundle a konulur. Bundle putExtras ile birlikte intente geçirilir. StartActivity ile de activity başlatılır. Gönderilecek datanın türüne göre String dışında birçok put komutu vardır.(ArrayList, Double ...)

Datanın alınacağı activityde ise intente aktarılan data get komutu ile alınır.

AndroidManifest.xml içeriği :

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

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.dialnumber.MainActivity"
            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=".other"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="com.example.dialnumber.OTHER" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
    </application>

</manifest>


Bu şekilde bundle ile activityler arası geçiş yapılmaktadır. Uygulamamızı çalıştırırsak görüntüleri şu şekilde olur :
                  

MainActivitydeki Edittextten diğer activitydeki textview a numaranın aktarılması. ilk ekranda dial butonuna tıklandıgında diğer activitye geçiş yapılır. ikinci activityde dial butonuna tıklandıgında ise textviewda görülen numarayı arar.

Uygulamayı buradan indirebilirsiniz.



EditTextten Girilen Numarayı Arama

Bu yazımda yaptığım lokasyon uygulamasında öğrendiğim bir uygulamayı anlatacağım . Bilindiği üzere android programlamada yaptığımız uygulamaları direkt olarak akıllı telefonlarımızda çalıştırabiliriz ve test edebiliriz. Bu yapacağımız uygulama bunun en güzel örneklerinden biri olacak. 

Şimdi uygulamamızı yapmak için bir proje oluşturalım : File --> New --> Project sekmesinden New Android Application seçilir ,Next butonuna tıklanır.


 Proje ismi verilir , daha sonraki çıkan ekranlardan Next diyerek en son finish butonuna tıklanır ve projemiz oluşturulur.

Örnek uygulamamızda EditText ten bir numara girilecek ve butona tıklandıgında bu numara aranacak. Bunun için öncelikle arayüze bir EditText ve Button elemanları ekleyelim.  Daha sonra kodlama kısmına başlayalım. Öncelikle arama yapmamız için gerekli olan permissionı ekleyelim :


AndroidManifest.xml içeriği : 
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.dialnumber"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.dialnumber.MainActivity"
            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>


MainActivity.java classımız içerisinde kodlama kısmına geçelim . Arayüz elemanlarımızı oluşturup arama yapacak DialNumber methodumuzu ekleyelim :

MainActivity.java Classı içeriği :
package com.example.dialnumber;
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.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
EditText edtNumber ;
Button btnDial ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edtNumber = (EditText)findViewById(R.id.edtNumber);
btnDial = (Button)findViewById(R.id.btnDial);
btnDial.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialNumber();
}
});
}
public void dialNumber(){
if (!edtNumber.getText().toString().equals("")){
try {
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:"+edtNumber.getText().toString()));
startActivity(callIntent);
} catch (ActivityNotFoundException activityException) {
Log.e("Dialing Example", "Call failed");
}
}else {
Toast.makeText(getApplicationContext(),"NumaraGiriniz",Toast.LENGTH_SHORT).sho w();
}
}
}


Bu işlemlerden sonra örnek uygulamamızı tamamlamış olduk. Uygulamayı çalıştırdıgımızda ekran görüntüleri şu şekilde olur :

                       


Numara girmeden butona tıkladıgımızda Numara giriniz uyarısını verir. Herhangi bir numara girip butona tıkladıgımızda ise arama yapar.

Örnek Uygulamayı buradan indirebilirsiniz.



Android Programlama Google Places Api Kullanımı


Yapılan lokasyon uygulamalarında çevrede bulunan restaurant, cafe, atm gibi günlük hayatta yer bilgilerine ihtiyaç duyduğumuz yerler listelenmekte , bunların haritada gösterilmesi ,detaylarının getirilmesi gibi işlevler bulunmaktadır. Bunları yapılabilmesi için google gerekli apileri sağlamaktadır. Daha önce Google Maps ile ilgili pi key alımı ve kullanımından bahsetmiştim. Şimdi ise restaurant ,cafe gibi yerlerin getirilmesini sağlayan Google Places Api den bahsedeceğim. Bu api ile Google'ın desteklediği birçok lokasyon türü ile arama işlemi gerçekleştirilmektedir.

Desteklenen lokasyon türlerinin listesi :
https://developers.google.com/places/documentation/supported_types

Ayrıca bu api ile birlikte çevrede bulunan yerler , bu yerlerin detay bilgileri gibi ek özellikler de getirilebilmektedir. (Bu yerler ile ilgili yönlerin çizilebilmesi için Google Maps in en az Version2 ile birlikte Google Directions Apinin kullanılması gerekmektedir.)

Lokasyonların getirilmesi için https://code.google.com/apis/console/# adresinden Places Api keyi alınır.Bu alınan key uygulamada kullanacaktır.

Şimdi Projemizi Oluşturalım: