Stella Stella - 22 days ago 8
Android Question

How to get the Date Taken and Display it?

I have this Activities where in the First Activity is to show the pictures in sdcard and load it in gridview. While the second activity is when you click a picture in the gridview it'll display the full size of the image. What do I want is with my second activity, I want also to display the 'date taken' of the picture that was clicked. How to get the date taken and display it.

Here is my first Activity.

public class MainActivity extends Activity {

public class ImageAdapter extends BaseAdapter {

private Context mContext;
ArrayList<String> itemList = new ArrayList<String>();

public ImageAdapter(Context c) {
mContext = c;
}

void add(String path) {
itemList.add(path);
}

@Override
public int getCount() {
return itemList.size();
}

@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) { // if it's not recycled, initialize some
// attributes
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(220, 220));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
} else {
imageView = (ImageView) convertView;
}

Bitmap bm = decodeSampledBitmapFromUri(itemList.get(position), 220,
220);

imageView.setImageBitmap(bm);
return imageView;
}

public Bitmap decodeSampledBitmapFromUri(String path, int reqWidth,
int reqHeight) {

Bitmap bm = null;
// First decode with inJustDecodeBounds=true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(path, options);

// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, reqWidth,
reqHeight);

// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
bm = BitmapFactory.decodeFile(path, options);

return bm;
}

public int calculateInSampleSize(

BitmapFactory.Options options, int reqWidth, int reqHeight) {
// Raw height and width of image
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;

if (height > reqHeight || width > reqWidth) {
if (width > height) {
inSampleSize = Math.round((float) height
/ (float) reqHeight);
} else {
inSampleSize = Math.round((float) width / (float) reqWidth);
}
}

return inSampleSize;
}

}

ImageAdapter myImageAdapter;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

GridView gridview = (GridView) findViewById(R.id.gridview);
myImageAdapter = new ImageAdapter(this);
gridview.setAdapter(myImageAdapter);

String ExternalStorageDirectoryPath = Environment
.getExternalStorageDirectory().getAbsolutePath();

String targetPath = ExternalStorageDirectoryPath + "/test/";

Toast.makeText(getApplicationContext(), targetPath, Toast.LENGTH_LONG)
.show();
File targetDirector = new File(targetPath);

File[] files = targetDirector.listFiles();
for (File file : files) {
myImageAdapter.add(file.getAbsolutePath());
}
}

gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {

ImageView img = myImageAdapter.getView(position, v, parent);
img.buildDrawingCache();
Bitmap bmap = img.getDrawingCache();
Intent intent = new Intent(MainActivity.this,
Imageviewer.class);
Bundle bundle = new Bundle();
String par=myimageadpter.getpath(position);
bundle.putString("imagepath", par);
intent.putExtras(bundle);
startActivityForResult(intent, 0);

}
});


And here is the second Activity

public class ImageViewer extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);


Bundle bundle = this.getIntent().getExtras();

String s=bundle.getString("imagepath");
Bitmap Imagefrompath = BitmapFactory.decodeFile(s);
ImageView img=(ImageView) findViewById(R.id.imageView1);
img.setImageBitmap(Imagefrompath );


}

}

Answer Source
  1. check if the file exist at your path,
  2. try to get File created Date if available,
  3. If date created not available then go for last modified date.

.

File file = new File(filePath);
if(file.exists()) //Extra check, Just to validate the given path
{
    ExifInterface intf = null;
    try 
    {
        intf = new ExifInterface(filePath);
        if(intf != null)
        {
            String dateString = intf.getAttribute(ExifInterface.TAG_DATETIME);
            Log.i("Dated : "+ dateString.toString()); //Dispaly dateString. You can do/use it your own way        
        }
    }
    catch
    {
    }
    if(intf == null)
    {
        Date lastModDate = new Date(file.lastModified());
        Log.i("Dated : "+ lastModDate.toString());//Dispaly lastModDate. You can do/use it your own way
    }
}