Android Programlama Ders 34: URI Nedir Araştırıyoruz

In Mobil, Pratik by Victor Cuiumju1 Comment

Android Programlama Ders 34’te URI projeyi kullanarak ne olduğunu öğreneceğiz.

Geçen derslerde Intent’in ne olduğunu öğrendik. Intent’in action parametresi mevcut. Bu özelliği etkileşime (Activity) birden fazla faaliyet (eylem) yapma imkanı sunuyor. Tabii bir faaliyet (action) yapmak için nesneye ihtiyacımız vardır. Bunun için Intent’te bir parametre (data-veri) mevcut.

Data’ya değeri atamak için setData (Uri data) metodunu kullanabiliriz. Bu metoda giriş olarak Uri nesneyi gönderiyoruz. Uri – nesne bir karakter diziyi alıp bölüyor ve bölen parçaları içeriyor. Uri’nin amacı soyut veya fiziksel kaynağı belirlemek. En basit örnek olarak web sayfası kullanalım. http://developer.android.com/reference/android/net/Uri.html

Bu adresi birkaç parçaya bölebiliriz:

  • Scheme – http
  • Scheme-specific part – // developer.android.com/reference/android/net/Uri.html
  • Path – /reference/android/net/Uri.html

http protokolünde başka parametreler de mevcut ancak şu anda onlara bakmayacağız. Mesela ftp protokolünün de farklı parametreleri vardır. Önemli olan burada verileri kullanarak kaynağı belirtmek. Diziyi oluşturmak için RFC 2396 belgeyi kullanabiliriz.

Mesela VideoView’e bir video indirmek istiyoruz. Video programda veya SD kartta olabilir. Uri kullanarak programa videoyu nereden indirmesi gerektiğini söyleyebiliriz.

Mesela video playcat.3gp /res/raw adresinde bulunsun. Video’ya ulaşmak için aşağıdaki verdiğim kodu kullanabiliriz:

Uri catURI;
catURI = Uri.parse("android.resource://your.app.package/" + R.raw.playcat);

Eğer dosya SD kartta bulunuyorsa

Uri catURI;
catURI = Uri.parse("file:///sdcard/playcat.3gp");

komutu kullanabiliriz.

VideoView kullanmak için setVideoURI(URI uri) metodunu kullanmamız gerekiyor. Bu metoda uri nesneyi belirtmemiz gerekecek.

Uri catURI,  
//  URI kaynaktan aliyoruz
catURI = Uri.parse("android.resource://your.app.package/" + R.raw.playcat);  

// eger URI sdcarda bulunuyorsa   

catURI = Uri.parse("file:///sdcard/playcat.3gp");  
VideoView videoView;  

//...kodumuz 

videoView.setURI(catURI);

Başka örneklere bakalım:

Koordinatlar.

Uri uri = Uri.parse("geo:54.354183,37.34011");

uri.getScheme() metodu  geo’yu verecek ve uri.getSchemeSpecificPart() metodu  – 54.354183,37.34011 verecek.

Telefon numarası.

Uri uri = Uri.parse("tel:1234578");

Bu durumda uri.getScheme() metodu tel ve uri.getSchemeSpecificPart()– 1234578 verecek.

Konuyu daha iyi anlamak için yeni bir proje açalım:

  • Project name: P0034_SimpleIntent
  • Build Target: Android 4.2
  • Application name: SimpleIntent
  • Package name: tr.example.simpleintent
  • Create Activity: MainActivity

Main.xml dosyayı açalım ve aşağıdaki kodu kopyalayalım:

<?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"> 
<Button 
 android:id="@+id/btnWeb" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:layout_margin="10dp" 
 android:layout_weight="1" 
 android:text="Web"> 
</Button> 
<Button 
 android:id="@+id/btnCall" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:layout_margin="10dp" 
 android:layout_weight="1" 
 android:text="Call"> 
</Button> 
</LinearLayout>

Ekranda iki tane buton olacak. İlk butonu web sayfasını açmak ve ikincisini telefon numarası aramak için kullanacağız.

MainActivity.java’yı oluşturalım:

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener {

  Button btnWeb;
  Button btnCall;

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    btnWeb = (Button) findViewById(R.id.btnWeb);
    btnCall = (Button) findViewById(R.id.btnCall);

    btnWeb.setOnClickListener(this);
    btnCall.setOnClickListener(this);
  }

  @Override
  public void onClick(View v) {
    Intent intent;
    switch (v.getId()) {
    case R.id.btnWeb:
      intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://developer.android.com"));
      startActivity(intent);
      break;

    case R.id.btnCall:
      intent = new Intent(Intent.ACTION_DIAL);
      intent.setData(Uri.parse("tel:12345"));
      startActivity(intent);
      break;
    }
  }
}

Web sayfası açmak için Intent (String action, Uri uri) tasarımcısını kullandık. Bu tasarımcı Intent’i oluşturuyor ve giriş parametreleri action ve data kullanılıyor. Action olarak sistemdeki standart ACTION_VIEW kullanılıyoruz. Data olarak Uri kullanılıyoruz. Uri http://developer.android.com adresten oluşuyor.

Telefon numarasını aramak için Intent (String action) kullandık. Action olarak ACTION_DIAL kullanıyoruz. Ve data‘yı Uri‘ye yerleştiriyoruz, telefon numarası Uri’de bulunuyor.

Uygulamamıza internet gerekecek. İnternete erişimi sağlamak için Manifest dosyasında Permission sekmesini açıyoruz. Ve Add butonuna basıp, Uses Permission seçeneğini seçiyoruz. Name alanında android.permission.INTERNET giriyoruz. Bu ayarlar internete erişme imkanı sunacaktır.

Kaydedelim ve uygulamayı çalıştıralım:

main

Web butonuna basalım. Tarayıcı açılıyor ve verdiğimiz adresi kullanarak sayfayı gösteriyor.

web

Back butonuna basıyoruz ve Call butonunu seçiyoruz.

telf

Numarayı aramak için arama simgesine basmamız gerekiyor.

Ders Sonu Notları:

Bu derste örnekleri kullanarak Uri nedir ve nasıl kullanılır, bunları öğrendik. Sonraki derste basit bir tarayıcı oluşturacağız.