30 Aralık 2015 Çarşamba

DownloadManager Sınıfı

enqueue metodu
Bir DownloadManager.Request nesnesi yaratarak indirme işlemini başlatırız. İşlemin sonucunu BroadcastReceiver ile alırız. Şöyle kullanırız.
String url = ...; File file =...;

DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
DownloadManager.Request req = new DownloadManager.Request(Uri.parse(url));
req.setDestinationUri(Uri.fromFile(file));
req.setTitle("Some title");

BroadcastReceiver receiver = new BroadcastReceiver() {
  @Override
  public void onReceive(Context context, Intent intent) {
    unregisterReceiver(this);
    
    }
  };
registerReceiver(receiver, new IntentFilter(
                DownloadManager.ACTION_DOWNLOAD_COMPLETE));
dm.enqueue(req);
Toast.makeText(this, "Download started", Toast.LENGTH_SHORT).show();

24 Kasım 2015 Salı

URI'den Path Almak

Giriş
Intent ile başlatılan bir çok işlem sonuç olarak bize bir URI döner. URI'den path'i almak çok kolay değil.

MediaStore.Images
Şöyle alırız.
private String getRealPathFromURI(Uri contentURI) {
  Cursor cursor = getContentResolver().query(contentURI, null, null, null, null); 
  cursor.moveToFirst(); 
  int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
  return cursor.getString(idx); 
}
MediaColumn
Şöyle alırız.
public String getRealPathFromURI(Uri contentUri) {
  String[] proj = { MediaColumns.DATA };
  Cursor cursor = managedQuery(contentUri, proj, null, null, null);
  int column_index = cursor.getColumnIndexOrThrow(MediaColumns.DATA);
  cursor.moveToFirst();
  return cursor.getString(column_index);
}
veya şöyle alırız.
private String getRealPathFromURI(Uri selectedVideoUri) {
  String filePath;
  final String[] filePathColumn = new String[] { MediaColumns.DATA };

  Cursor cursor = getContentResolver().query(selectedVideoUri,
            filePathColumn, null, null, null);
  cursor.moveToFirst();

  int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
  filePath = cursor.getString(columnIndex);
  cursor.close();
  return filePath;
}







1 Kasım 2015 Pazar

TimePickerDialog Sınıfı

Giriş
Bu sınıf bir dialog olarak tek başına açılabileceği gibi, fragment içinde de kullanılabilir.
Fragment içinde şöyle kullanılır. OnCreateDialog içinde nesnenin yaratıldığı görülebilir.
public class TimePickerFragment extends DialogFragment implements
        TimePickerDialog.OnTimeSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        return new TimePickerDialog(getActivity(), this, hour, minute,
                DateFormat.is24HourFormat(getActivity()));
    }

    public void onTimeSet(TimePicker view, int hour, int minute) {
      ...    
    }
}

DatePickerDialog

DatePickerDialog
Bu sınıf bir dialog olarak tek başına açılabileceği gibi, fragment içinde de kullanılabilir.
Constructor
İmzası şöyle
public DatePickerDialog (
    Context context,
    DatePickerDialog.OnDateSetListener callBack,
    int year,
    int monthOfYear,
    int dayOfMonth)
getDatePicker
Dialog içindeki DatePicker nesnesine erişmemizi sağlar.Bugün ve sonraki 5 günü göstermek için şöyle yaparız.
cal = Calendar.getInstance();
DatePickerDialog dialog = new DatePickerDialog(...);
dialog.getDatePicker().setMinDate(System.currentTimeMillis());
cal.add(Calendar.DAY, 5);
dialog.getDatePicker().setMaxDate(cal.getTimeInMillis());
DatePickerDialog.OnDataSetListener
İmzası şöyledir. Seçilen tarihi verir.
new DatePickerDialog.OnDateSetListener() {
  @Override
  public void onDateSet(DatePicker view, int year,int month, int day) {
  }
};
show metodu
Şöyle kullanılır
DatePickerDialog datepickerdialog = new DatePickerDialog
(this,
 this, //OnDateSetListener
 year,
 month,
 day
);
datepickerdialog.show();
DatePicker
xml'de şöyle tanımlanır
<DatePicker
    android:id="@+id/dpResult"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
init metodu
Şöyle kullanırız. Init metod birden fazla kez çağrılabilir.
DatePicker dpResult = (DatePicker) findViewById(R.id.dpResult);
Calendar c = Calendar.getInstance();
intyear = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH) ;
int  day = c.get(Calendar.DAY_OF_MONTH);
dpResult.init(year, month, day, null);              

6 Ekim 2015 Salı

R Dosyası

Giriş
R dosyası derleyici tarafından oluşturulur. Dosyanın için int sabitlerle doludur.

Bir çok sınıf R dosyası için bir metod daha tanımlar. Örneğin TextView sınıfı hem
public final void setText(CharSequence text)
hem de R dosyası ile beraber kullanabilmek için
public final void setText(int resid)
şeklinde iki metod sunar.

String
R dosyasındaki string sabitin gerçek değerine şöyle erişiriz.
return getResources().getString(resId);
Hatta Context sınıfı bize şöyle bir metod sunar.
 /**
 * Return a localized string from the application's package's
 * default string table.
 *
 * @param resId Resource id for the string
 */
public final String getString(int resId) {
    return getResources().getString(resId);
}