如何从SD卡中获取所有图像?

时间:2014-11-01 10:04:22

标签: android android-intent android-activity

我需要从android中获取SD卡中的所有图像。我已经处理过以获取所有图像并在android中的网格视图中显示,但我无法获取所有图像,图像只能整理出来在特定的道路上。

MainActivity.java

import java.io.File;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class MainActivity extends Activity 
{

    // Declare variables
    private String[] FilePathStrings;
    private String[] FileNameStrings;
    private File[] listFile;
    GridView grid;
    GridViewAdapter adapter;
    File file;

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

        if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) 
        {
            Toast.makeText(this, "Error! No SDCARD Found!", Toast.LENGTH_LONG).show();
        }
        else 
        {
            file = new File(Environment.getExternalStorageDirectory()+ File.separator + "SDImageTutorial");
            file.mkdirs();
        }

        if (file.isDirectory()) 
        {
            listFile = file.listFiles();

            FilePathStrings = new String[listFile.length];

            FileNameStrings = new String[listFile.length];

            for (int i = 0; i < listFile.length; i++) 
            {
                FilePathStrings[i] = listFile[i].getAbsolutePath();
                FileNameStrings[i] = listFile[i].getName();
            }
        }


        grid = (GridView) findViewById(R.id.gridView);

        adapter = new GridViewAdapter(this, FilePathStrings, FileNameStrings);

        grid.setAdapter(adapter);

        grid.setOnItemClickListener(new OnItemClickListener() 
        {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) 
            {
                Intent i = new Intent(MainActivity.this, ViewImage.class);

                i.putExtra("filepath", FilePathStrings);
                Log.e("ok","fine : "+FilePathStrings);

                i.putExtra("filename", FileNameStrings);

                i.putExtra("position", position);
                startActivity(i);
                finish();
            }
        });
    }
}

Manifest.xml权限

1 个答案:

答案 0 :(得分:1)

试试这个兄弟!!! 对于ACTIVITY:

package com.example.androidgridview;
import java.io.File;
import java.util.ArrayList;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.Toast;
public class MainActivity extends Activity {

 AsyncTaskLoadFiles myAsyncTaskLoadFiles;
 public class AsyncTaskLoadFiles extends AsyncTask<Void, String, Void> {

  File targetDirector;
  ImageAdapter myTaskAdapter;
  public AsyncTaskLoadFiles(ImageAdapter adapter) {
   myTaskAdapter = adapter;
  }
  @Override
  protected void onPreExecute() {
   String ExternalStorageDirectoryPath = Environment
     .getExternalStorageDirectory().getAbsolutePath();
   String targetPath = ExternalStorageDirectoryPath + "/test/";
   targetDirector = new File(targetPath);
   myTaskAdapter.clear();

   super.onPreExecute();
  }
  @Override
  protected Void doInBackground(Void... params) {

   File[] files = targetDirector.listFiles();
   for (File file : files) {
    publishProgress(file.getAbsolutePath());
    if (isCancelled()) break;
   }
   return null;
  }
  @Override
  protected void onProgressUpdate(String... values) {
   myTaskAdapter.add(values[0]);
   super.onProgressUpdate(values);
  }
  @Override
  protected void onPostExecute(Void result) {
   myTaskAdapter.notifyDataSetChanged();
   super.onPostExecute(result);
  }
 }
 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);
  }

  void clear() {
   itemList.clear();
  }

  void remove(int index){
   itemList.remove(index);
  }
  @Override
  public int getCount() {
   return itemList.size();
  }
  @Override
  public Object getItem(int position) {
   // TODO Auto-generated method stub
   return itemList.get(position);
  }
  @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);
  final GridView gridview = (GridView) findViewById(R.id.gridview);
  myImageAdapter = new ImageAdapter(this);
  gridview.setAdapter(myImageAdapter);
  myAsyncTaskLoadFiles = new AsyncTaskLoadFiles(myImageAdapter);
  myAsyncTaskLoadFiles.execute();
  gridview.setOnItemClickListener(myOnItemClickListener);
  Button buttonReload = (Button)findViewById(R.id.reload);
  buttonReload.setOnClickListener(new OnClickListener(){
   @Override
   public void onClick(View arg0) {
    myAsyncTaskLoadFiles.cancel(true);
    myImageAdapter = new ImageAdapter(MainActivity.this);
    gridview.setAdapter(myImageAdapter);
    myAsyncTaskLoadFiles = new AsyncTaskLoadFiles(myImageAdapter);
    myAsyncTaskLoadFiles.execute();
   }});
 }
 OnItemClickListener myOnItemClickListener = new OnItemClickListener() {
  @Override

      public void onItemClick(AdapterView<?> parent, View view, int position,
        long id) {
       String prompt = "remove " + (String) parent.getItemAtPosition(position);
       Toast.makeText(getApplicationContext(), prompt, Toast.LENGTH_SHORT)
         .show();
       myImageAdapter.remove(position);

   myImageAdapter.notifyDataSetChanged();
  }
 };
}

然后进行布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:orientation="vertical">

    <Button
        android:id="@+id/reload"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Reload"/>
    <GridView
        android:id="@+id/gridview"
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"
        android:columnWidth="90dp"
        android:numColumns="auto_fit"
        android:verticalSpacing="10dp"
        android:horizontalSpacing="10dp"
        android:stretchMode="columnWidth"
        android:gravity="center"/>

</LinearLayout>

点击here了解详情。