Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
495 views
in Technique[技术] by (71.8m points)

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


}

}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
  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("PHOTO DATE", "Dated : "+ dateString); //Display dateString. You can do/use it your own way        
        }
    }
    catch (IOException e)
    {
    }
    if(intf == null)
    {
        Date lastModDate = new Date(file.lastModified());
        Log.i("PHOTO DATE", "Dated : "+ lastModDate.toString());//Dispaly lastModDate. You can do/use it your own way
    }
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...