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:

Blowfish Algoritması

Kullandığımız ağda verilerin gizliliğin sağlanması için veriler şifrelenmektedir. İki uç sistem arasında veri iletimi yapılacaksa veriyi gönderen tarafta veri şifrelenir , şifrelenen veri iletilir ve alan tarafta deşifreleme işlemi yapılarak veriye ulaşılır. 2 çeşit şifreleme yöntemi vardır : simetrik ve asimetrik şifreleme yöntemleri . (Şifreleme ile ilgili olarak önceki yazıya buradan ulaşabilirsiniz.)

Simetrik şifreleme yöntemlerinden biri olan Blowfish algoritmasının başlıca özellikleri şunlardır :

  1. Simetrik şifreleme kullanılır.
  2. Veri 64 bitlik bloklarar ayrılır.
  3. Her biri 32 bitlik olan 18 alt anahtardan oluşmaktadır.
  4. 4 adet S boxtan oluşan fonksiyon kullanılır.
  5. 16 kez tekrarlanır , bu adımlardan alt anahtarlarla XOR işlemi yapılır.

Şifreleme (Kriptoloji) Nedir ?

Bilgisayar kullanımının artmasıyla birlikte internet kullanımı ve güvenliğinin önemi de artmaktadır. Kullandığımız ağın güvenliği denildiğinde gönderdiğimiz verilerin gizliliği , bütünlüğü yanında bilgilerin alındığı sistemin bilinmesi gibi faktörler ortaya çıkmaktadır. 

Günlük hayatta internet ortamında birçok bilgilerimizi paylaşımda bulunuruz . Email , chatleşme , online alışveriş gibi birçok etkileşimde bulunup bilgilerimizi aslında güvenli olmayan ortamda paylaşırız. Bilgilerimizin güvenli biçimde istenilen sisteme ulaşması için verileri şifrelemek gerekir. Şifreleme sayesinde gönderdiğimiz bu verilerin gizliliği sağlanmış olunur. Verilerin şifrelenmesini içeren bu bilim dalına Kriptoloji denilmektektedir. Şifreleme ; verilerin güvenliğinin sağlanması amacıyla yapılmaktadır .

Android Google Maps Apide Overlay Ekleme

Androidde Google Maps Apide istediğimiz yere overlay koymak isteyebiliriz. Örneğin maps.google.com da müze , şehir  gibi lokasyonlar girdiğimizde cevap olarak overlay ile gösterilirler. Buna benzer olarak istedğimiz yere overlay koyarak bu yerleri gösterme imkanımız vardır . Bunun için yeni bir proje oluşturalım.

Burada bir önceki yazıdaki işlemler yapılır. activity_main.xml de mapview elemanı  aldıgımız key ile birlikte tanımlanır.


Androidde Arayüz Tasarım Programları

Her yazılım geliştirme aşamasında olduğu gibi anroidde de arayüz tasarımının etkileyici ve kullanışlı olması çok önemlidir. Ancak androidde arayüz tasarımı yapmak pek de kolay değil. Arayüz tasarımının daha kolay yapılabilmesi için yardımcı programlar bulunmaktadır . Bu programlardan en tanınmışları MotoDev ve DroidDraw 'dur. Bize sağlanan bu yardımcı programlar da ücretsizdir.

Peki Bu Yardımcı Programlar Nasıl Kullanılır ?
Örneğin DroidDraw programını ele alalım.Öncelikle bu programı indirmemiz gerekir. Bunun için www.droiddraw.org sitesinden işletim sistemimize uygun sürümü indirelim. Bilgisayarımızda  indirdiğimiz dizin içersinde bu droiddraw kurulumunu yapalım. Kurulumu oldukça basittir.


Androidde Google Maps Uygulaması

Androidde Google Maps uygulaması yapabilmemiz için Maps Api Key alınması gerketiğini önceki yazımda anlatmıstım. Önceki yazıya buradan ulaşabilirsiniz. Google'da kaydımızı oluşturup fingerprint işlemini oluşturduktan sonra map uygulaması oluşturalım. Bunun için yeni bir android applicationı oluşturalım.

New  -->   Project  --> Android Application Project yolu izlendikten sonra proje bir isim verilir. Projeye uygun bir isim verildikten sonra Build SDK kısmının Google Api yi içerecek şekilde seçilmesi gerekmektedir.


Google Maps Uygulamaları İçin Map Api Key Alma

Android uygulamalarımızda google maps ' ten yararlanabiliriz. Android uygulamalarında google maps kullanabilmemiz için yapmamız gereken bazı işlemler bulunmaktadır. Uygulamalarımızda Google Maps kullanabilmek için MD5 certificate yani parmak izi sertifikamızı Google'a onaylatmamız gerekiyor.

Maps Api Key Nasıl Alınır ?


          1.  İlk olarak Java'yı kurduğumuz yerin yolunu alalım. Örneğin benim bilgisayarımda bu yol şöyle :                                   
               "C:\Program Files\Java\jdk1.7.0_13\bin"

          2.  Daha sonra Eclipse 'te Window -> Preferences->Android ->Build  e tıklayıp Default debug   keystore bölümündeki yolu alalım : "C:\Users\elvan\.android\debug.keystore"

Java ile Arkadaş Sayılar

Programlamaya başlandığında verilen iki sayının arkadaş sayı olup olmadığının kontrolü karşılaşılan sorulardan biridir.

İki sayı birbirinin kendisi hariç bölenleri toplamına eşitse bu sayılara arkadaş sayılar denir.
Örnek: 220 ve 284
220 : 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284 
284 : 1 + 2 + 4 + 71 + 142 = 220

Bu basit problemin kod parçacığı şu şekildedir :

Java ile Faktöriyel Hesaplama

Programlamaya yeni başlayanlar için sık sorulardan bir tanesi verilen sayının faktöriyelinin hesaplanmasıdır. Bunu recursive ve var olan döngülerden birini kullanarak yapabiliriz . 

Recursive fonksiyon özyinelemeli fonksiyondur. Bu fonksiyon kendi kendini çağırarak sonuca ulaşılır.

Döngülerle de verilen aralık , maximum , minumum değere göre sonuç bulunur.

Bu her iki işlemi de yapan , dışarıdan alınan sayının faktöiryelini veren basit kod parçacığı şu şekildedir :

Go Back N ve Selective Repeat Protokollerine Giriş

Networkte güvenilir veri iletimi en önemli konulardan biridir.Gönderici tarafındaki uygulama katmanındaki gönderici süreç ile alıcı tarafındaki alıcı süreç arasında veri iletimi gerçekleşir. Gönderici tarafındaki data oluşturulan process ile taşıma katmanına geçilir. Buradan da alttaki diğer katmanlara aktarılır. Alıcı tarafta fiziksel ortamdan alınan sinyaller bitlere çevirilerek alt katmanlardan üst katmanlara doğru iletilir. 

Güvenilir veri iletimi için gereken kontroller taşıma katmanında gerçekleşmektedir. Taşıma katmanında 2 protocol bulunmaktadır : TCP ve UDP. Alıcı ve gönderici uç sistemler arasında verilerin güvenilir bir şekilde iletilmesini istiyorsak TCP protokolü kullanılır. Bu protokol veri iletimiyle ilgili gerekli kontrolleri içermektedir. Akış kontrolü , tıkanıklık kontrolü bulunmaktadır. Bu protokol bağlantı yönelimli servis kullanır.