Site icon Mobilhanem

Android Download Manager Kullanımı (Örnek Kod)

Merhaba Arkadaşlar,
mobilhanem.com üzerinden anlattığımız/yayınladığımız derslere Androidde DownloadManager classını kullanarak istediğimiz linkten veri indirme dersi ile devam edeceğiz.Hepimizin malumudur ki bazen uygulama içinden cihaza yada direk uygulamamızın içine dosya download etmemiz gerekir.İşte burda Android 2.3 (Api 9) üzerinde çalışan DownladManager classı işimizi çok ama çok kolaylaştırıyor.

Arkadaşlar ben her zamanki gibi ufak bir uygulama üzerinde anlatacağım dersimizi. Uygulamamızda bir tane edittext iki tane buton var. Butonlardan biri, edittext alanına girilen url değerini alıyor ve gerekli kontrolleri yaptıktan sonra indirme işlemine başlıyor. Gerekli kontroller nedir diye sorarsanız, ben uygulamada iki kontrol yaptım.
1- Link “http://” ile başlayıp başlamadığı kontrolü
2- Linkteki indireceğimiz dosyanın uzantı kontrolü istediğim formattımı.
Siz daha fazlada kontrol yapabilirsiniz.
Diğer buton ise download işlemi bittiğinde enable oluyor ve tıklandığı zaman indirilme listesini açıyor.

Evet arkadaşlar geçelim kodlamaya.Kod üzerinde gerekli açıklamaları yapmaya çalıştım .
[wpdm_file id=18]

Anasayfa.java


import android.app.Activity;
import android.app.DownloadManager;
import android.app.DownloadManager.Request;
import android.app.DownloadManager.Query;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.webkit.MimeTypeMap;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class Anasayfa extends Activity {
	Button indir,indirmeListesi;
	EditText link_edit;
	String link;
	private long sira;
    private DownloadManager dm; 

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.anasayfa);
		link_edit = (EditText)findViewById(R.id.editText1);//Edittext alanımızı tanımlıyoruz

		 BroadcastReceiver receiver = new BroadcastReceiver() {//BroadCast Receiver kullanma sebebimiz downloadın bittiğini koda iletebilmek için
            @Override
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();
                if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {//Eğer indirme başarılı ise dosyayı açacağız
                	sira = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0);//İndirilen dosyanın Downloads daki sırasını alıyoruz
                    Query query = new Query();
                    query.setFilterById(sira); //Sıraya göre sorguluyorz
                    Cursor c = dm.query(query);//Sorgu sonucunu Cursor a iletiyoruz
                    if (c.moveToFirst()) {
                        int columnIndex = c.getColumnIndex(DownloadManager.COLUMN_STATUS);

                        if (DownloadManager.STATUS_SUCCESSFUL == c.getInt(columnIndex)) { //İndirme Başarılı ise

                        	String dosyaAdi = c.getString(c.getColumnIndex(DownloadManager.COLUMN_TITLE)); //Dosya adını alıyoruz

                        	Toast.makeText(getApplicationContext(), dosyaAdi+" Başarıyla indi", Toast.LENGTH_LONG).show();
                        	indirmeListesi.setEnabled(true);//İndirme Listesindeki butonu enable ediyoruz

                        }else{
                        	Toast.makeText(getApplicationContext(), "Hatalı Link", Toast.LENGTH_LONG).show();
                        }
                    }
                }
            }

        };

        registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));//BroadCast Reciverı DownloadManageri dinlemesi için başlatıyoruz

		indir = (Button) findViewById(R.id.button1);
		indirmeListesi = (Button)findViewById(R.id.button2);

		indir.setOnClickListener(new View.OnClickListener() {//indir butonu tıklanınca

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				link = link_edit.getText().toString();
				if (!link.startsWith("http://") && !link.startsWith("https://")){//link http ile başlamıyorsa ekliyoruz yoksa hata veriyor
					link = "http://" + link;
				}

				String extension = MimeTypeMap.getFileExtensionFromUrl(link);  //indireceğimiz file uzantısını alıyoruz
		           if (extension != null) {
		                MimeTypeMap mime = MimeTypeMap.getSingleton();
		                String mimeType = mime.getMimeTypeFromExtension(extension);
		                if (mimeType != null) {  //Uzantı istediğimşiz formattamı kontrol ediyoruz
		                     if (mimeType.toLowerCase().contains("pptx")   || extension.toLowerCase().contains("pdf")
											                               || extension.toLowerCase().contains("doc")
											                               || extension.toLowerCase().contains("ppt")
											                               || extension.toLowerCase().contains("png")
											                               || extension.toLowerCase().contains("jpg")){//istedimiz formatta ise indirme işlemine geçiyoruz

		                    	dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);//DownloadManager objesi oluşturuyoruz
		     			        Request request = new Request(Uri.parse(link)); //İndireceğimiz linki veriyoruz
		     			        sira = dm.enqueue(request);//indirmeye başlıyoruz.Geriye download sırasını döner

		                     }else{
		                        Toast.makeText(getApplicationContext(), "Geçersiz Uzantı", Toast.LENGTH_LONG).show();
		                     }

	                     }
		           }

			}
		});

		indirmeListesi.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {//İndirilenler Listesini açar
				// TODO Auto-generated method stub
			    Intent i = new Intent();
		        i.setAction(DownloadManager.ACTION_VIEW_DOWNLOADS);
		        startActivity(i);
			}
		});

	}

}

Evet arkadaşlar bu dersimde anlatmak istediklerim bu kadar. Sormak istediğiniz yada eklemek istediğiniz bir şey olursa çekinmeden yorum bırakabilirsiniz.

Bir dahaki dersimde Notification göndermeye yarıyan Google Cloud Messaging (GCM) anlatmaya çalışacağım. Sizlerden ricam facebook.com/mobilhanem sayfamızı beğenmeniz ve yazılımcı arkadaşlarınız ile paylaşmanızdır.

Bir dahaki dersimde görüşmek dileğiyle…

[wpdm_file id=18] 1
Exit mobile version