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);