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:
Web butonuna basalım. Tarayıcı açılıyor ve verdiğimiz adresi kullanarak sayfayı gösteriyor.
Back butonuna basıyoruz ve Call butonunu seçiyoruz.
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.