7 Ekim 2015 Çarşamba

#ANDROID - ExternalStorage Kullanımı

  Hiç yorum yok
Bu makalemizde bir klasöre dosya kaydetme işlemini yapacağız. Aslında mantığını bende çok fazla kavrayamadım ama elimizin altında dursun lazım olduğunda kopyala yapıştır yaparak kullanırız diyerek kodları paylaşıyorum. Zaten kodlar ezber gerektiren, hızlıca yazılması gereken kodlar değil gerçekten de ancak lazım olduğunda yüzlerine bakılacak kodlar.



Evet tasarım gördüğünüz gibi olacak, hemen externaldata.xml ve ExternalData.java dosyalarımızı oluşturuyoruz.

externaldata.xml dosyası:

<?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/tvCanWrite"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />

<TextView
android:id="@+id/tvCanRead"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />

<Spinner
android:id="@+id/spinner1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Farklı Kaydet.." />

<EditText
android:id="@+id/etFarkliKaydet"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10" >

<requestFocus />
</EditText>

<Button
android:id="@+id/bKaydetmeyiOnayla"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Onayla" />

<Button
android:id="@+id/bDosyaKaydet"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Kaydet"
android:visibility="invisible"
/>

</LinearLayout>

ExternalData.java dosyası:

package com.hakancengiz.blogders;

import android.app.Activity;
import android.media.MediaScannerConnection;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class ExternalData extends Activity implements AdapterView.OnItemSelectedListener, View.OnClickListener {

private TextView canWrite, canRead;
private String state;
boolean canW, canR;
Spinner spinner;

// Dosyamızı kaydedeceğimiz dizinler
String[] paths = {"Muzik", "Resimler", "Indirilenler"};

// Kaydedilecek dosya pathlerini burda tutucaz
File path = null;

// kaydedilecek dosya için
File filename = null;
EditText dosyayiKaydet;
Button onayla, kaydet;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.externaldata);

canWrite = (TextView) findViewById(R.id.tvCanWrite);
canRead = (TextView) findViewById(R.id.tvCanRead);
spinner = (Spinner) findViewById(R.id.spinner1);
onayla = (Button) findViewById(R.id.bKaydetmeyiOnayla);
kaydet = (Button) findViewById(R.id.bDosyaKaydet);
dosyayiKaydet = (EditText) findViewById(R.id.etFarkliKaydet);
onayla.setOnClickListener(this);
kaydet.setOnClickListener(this);

// gidilen dizinin dosya okuma-yazma için izin durumu
checkState();

// spinner'da gösterilecek değerler için adapter tanımladık
ArrayAdapter<String> adapter;
adapter = new ArrayAdapter<String>(ExternalData.this,
android.R.layout.simple_spinner_item, paths);

spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(this);
}

private void checkState() {
// TODO Auto-generated method stub
state = Environment.getExternalStorageState();
if (state.equals(Environment.MEDIA_MOUNTED)) {

canWrite.setText("true");
canRead.setText("true");
canW = canR = true;

} else if (state.equals(Environment.MEDIA_MOUNTED_READ_ONLY)) {

canWrite.setText("false");
canRead.setText("true");
canW = false;
canR = true;

} else {

canWrite.setText("false");
canRead.setText("false");
canW = canR = false;

}
}

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

int secilemItem = spinner.getSelectedItemPosition();
switch (secilemItem) {

// secilen spinner öğesi için dosyayı kaydedeceğimiz pathleri
// path değişkenine atadık
case 0:
path = Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC);
break;

case 1:
path = Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
break;
case 2:
path = Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
break;

}

}

@Override
public void onNothingSelected(AdapterView<?> parent) {

}

@Override
public void onClick(View v) {

switch (v.getId()) {
case R.id.bKaydetmeyiOnayla:
kaydet.setVisibility(Button.VISIBLE);
onayla.setVisibility(Button.GONE);
break;

case R.id.bDosyaKaydet:
// edittext'e girilen dosya adı
String f = dosyayiKaydet.getText().toString();

// path ve uzantısıyla beraber dosya adımız
filename = new File(path, f + ".png");
if (canW == canR == true) {

// dosyanın yazılacağı yeri oluşturduk
path.mkdirs();

try {

// dosyamızı resource içinde is'e atadık
InputStream is = getResources().openRawResource(R.drawable.bg_app);
OutputStream os = new FileOutputStream(filename);
byte[] data = new byte[is.available()];

is.read(data);
os.write(data);

is.close();
os.close();

Toast t = Toast.makeText(ExternalData.this, "Dosya kaydedildi.", Toast.LENGTH_LONG);
t.show();

// update files for the user to use
MediaScannerConnection
.scanFile(
ExternalData.this,
new String[]{filename.toString()},
null,
new MediaScannerConnection.OnScanCompletedListener() {

@Override
public void onScanCompleted(
String path, Uri uri) {
// TODO Auto-generated method stub
Toast t = Toast.makeText(
ExternalData.this,
"tarama tamamlandı",
Toast.LENGTH_SHORT);
t.show();
}
});

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

break;
}

}
}

Son olarak yine her zaman yaptığımız gibi activitymizi AndroidManifest.xml dosyamıza tanıtıyoruz.

Hiç yorum yok :

Yorum Gönder