#15 – Android MediaPlayer sınıfı ve Müzik Çalma Uygulaması
Android’in multimedya framework’ünde bulunan MediaPlayer sınıfı bir medya dosyasını kolayca oynatmamıza imkan tanıyor. Bu medya dosyası ses, fotoğraf, video olabildiği gibi internetteki bir dosya da olabilir.
Oynatabileceğimiz medya dosyamız şu konumlarda olabilir;
- res/raw dizininde
- dosya sisteminde herhangi bir konumda
- internette bir adreste
MediaPlayer sınıfı iki satırda medya oynatmanızı sağlayacak şekilde minimal bir yapıdadır. Örneğin res/raw dizinine attığınız bir ses dosyasını aşağıdaki şekilde oynatabilirsiniz.
//Burada sound_file_1 dosyamızın adıdır. Dosya uzantısı buraya yazılmaz MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1); mediaPlayer.start();
Bu sınıfın desteklediği, oynatabileceği dosyaların formatına aşağıdaki linkten ulaşabilirsiniz.
http://developer.android.com/guide/appendix/media-formats.html#core
MediaPlayer için yapacağımız uygulama şimdilik bir müzik çalıcı olacak, daha sonraki yazılarda bu uygulamamıza yeni kabiliyetler katacağız. Şuanki amacımız res/raw dizini altında bulunan ses medyası dosyalarını oynatmak.
Uygulamadaki kod blokları ne yapıyor onlara bakalım.
raw/res dizini altındaki dosyaların listesinin alımı:
Field[] fields = R.raw.class.getFields(); String[] mediaList = new String[fields.length]; for (int count = 0; count < fields.length; count++) mediaList[count] = fields[count].getName();
raw/res dizini altındaki listeyi yukarıdaki şekilde aldığımızdan buraya istediğiniz kadar dosya atabilirsiniz, uygulamanızı değiştirmenize gerek olmayacak. yalnız burada dosya atarken boşuk ” “ kullanmayınız.
Listenin ListView‘e iliştirilmesi:
listView = (ListView) findViewById(R.id.listView2); ArrayAdapter<String> adapter = new ArrayAdapter<String>( MainActivity.this, android.R.layout.simple_list_item_1, mediaList); listView.setAdapter(adapter);
Listedeki bir öğeye tıklandığında, tıklananın çalınmasını sağlamak, arkaplan rengini değiştirmek, hangisinin çalındığını ve kaç sn. uzunluğunda olduğunu göstermek:
listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View v, int position, long id) { if (oncekiView != null) ((TextView) oncekiView).setBackgroundDrawable(orjArkaFon); orjArkaFon = ((TextView) v).getBackground(); String uri = "android.resource://" + getPackageName() + "/raw/" + ((TextView) v).getText(); if (mp != null && mp.isPlaying()) mp.stop(); mp = MediaPlayer.create(getApplicationContext(), Uri.parse(uri)); mp.start(); ((TextView) v).setBackgroundColor(Color.GREEN); oncekiView = v; textBilgi.setText(((TextView) v).getText() + " [" + mp.getDuration() / 1000 + " sn.]"); } });
Uygulama dosyalarındaki kodlar derli toplu halde aşağıdaki gibidir.
activity_main.xml dosyamız;
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <TextView android:id="@+id/textBilgi1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:background="#fc0" android:padding="5dp" android:text="Çalan Parça" android:textColor="#fff" android:textSize="20sp" /> <ListView android:id="@+id/listView2" android:layout_width="fill_parent" android:layout_height="200dp" android:layout_margin="10dp" android:background="@drawable/borderui" /> </LinearLayout>
MainActivity.java dosyamız;
package com.androidevreni.medyaoynatici; import java.lang.reflect.Field; import android.app.Activity; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.media.MediaPlayer; import android.net.Uri; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; public class MainActivity extends Activity { MediaPlayer mp; View oncekiView; ListView listView; Drawable orjArkaFon; TextView textBilgi; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Field[] fields = R.raw.class.getFields(); String[] mediaList = new String[fields.length]; for (int count = 0; count < fields.length; count++) mediaList[count] = fields[count].getName(); listView = (ListView) findViewById(R.id.listView2); textBilgi = (TextView) findViewById(R.id.textBilgi1); ArrayAdapter<String> adapter = new ArrayAdapter<String>( MainActivity.this, android.R.layout.simple_list_item_1, mediaList); listView.setAdapter(adapter); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View v, int position, long id) { if (oncekiView != null) ((TextView) oncekiView).setBackgroundDrawable(orjArkaFon); orjArkaFon = ((TextView) v).getBackground(); String uri = "android.resource://" + getPackageName() + "/raw/" + ((TextView) v).getText(); if (mp != null && mp.isPlaying()) mp.stop(); mp = MediaPlayer.create(getApplicationContext(), Uri.parse(uri)); mp.start(); ((TextView) v).setBackgroundColor(Color.GREEN); oncekiView = v; textBilgi.setText(((TextView) v).getText() + " [" + mp.getDuration() / 1000 + " sn.]"); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } }
res/drawable altındaki borderui.xml dosyamız : müzik listemize (ListView) arkaplan rengi ve kenarlık vermemizi sağlayacak.
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <solid android:color="#f2f2f2"/> <stroke android:width="2dip" android:color="#cccccc"/> </shape>
Yeni bir uygulamada görüşmek üzere.
MainActivity.java dosyasi icerisinde 48. satirda bulunan
((TextView) oncekiView).setBackgroundDrawable(orjArkaFon);
kodlamasinin icerisindeki :.setBackgroundDrawable ifadesi hata uyerisi veriyor ve üzeri cozgili gözüküyor. Android in tüm sürümleri yüklü, yani sürüm problemi olmamasi gerekiyordu. Calistiramadim, yardimci olabilirseniz sevinirim…
Merhaba bu uygulamaya MediaController ekleyebilirmisiniz ve de çalınan müzik bittiği zaman sıradaki şarkıya geçmesini sağlayabilirmiyiz teşekkür ederim.
Allah sizden razı olsun, sizin sayenizde uygulamama müzik ekledim
Bu site süper ya .)
merhaba, teşekkür ederiz düşüncelerinizi yorum yazarak bize ilettiniz Allah sizden de razı olsun. AndroidEvreni’ni, yazılarımızı paylaşarak bize destek olabilirsiniz.
İyi Çalışmalar.