Loading all the images from gallery into the Application in android

前端 未结 6 1153
离开以前
离开以前 2020-11-29 18:10

I am creating an application wherein I need all the images in the gallery into my application that has a girdview in it. I want all the images from all the folders to appear

6条回答
  •  隐瞒了意图╮
    2020-11-29 18:44

    Download the source code from here (Get all images from gallery in android programmatically)

    activity_main.xml

    
    
    
    
    
    
    
    

    MainActivity.java

    package galleryimages.galleryimages;
    
    import android.Manifest;
    import android.content.Intent;
    import android.content.pm.PackageManager;
    import android.database.Cursor;
    import android.net.Uri;
    import android.provider.MediaStore;
    import android.support.v4.app.ActivityCompat;
    import android.support.v4.content.ContextCompat;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.GridView;
    import android.widget.Toast;
    
    import java.util.ArrayList;
    
    public class MainActivity extends AppCompatActivity {
    public static ArrayList al_images = new ArrayList<>();
    boolean boolean_folder;
    Adapter_PhotosFolder obj_adapter;
    GridView gv_folder;
    private static final int REQUEST_PERMISSIONS = 100;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        gv_folder = (GridView)findViewById(R.id.gv_folder);
    
        gv_folder.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView adapterView, View view, int i, long l) {
                Intent intent = new Intent(getApplicationContext(), PhotosActivity.class);
                intent.putExtra("value",i);
                startActivity(intent);
            }
        });
    
    
        if ((ContextCompat.checkSelfPermission(getApplicationContext(),
                Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) && (ContextCompat.checkSelfPermission(getApplicationContext(),
                Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)) {
            if ((ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE)) && (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,
                    Manifest.permission.READ_EXTERNAL_STORAGE))) {
    
            } else {
                ActivityCompat.requestPermissions(MainActivity.this,
                        new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE},
                        REQUEST_PERMISSIONS);
            }
        }else {
            Log.e("Else","Else");
            fn_imagespath();
        }
    
    
    
    }
    
    public ArrayList fn_imagespath() {
        al_images.clear();
    
        int int_position = 0;
        Uri uri;
        Cursor cursor;
        int column_index_data, column_index_folder_name;
    
        String absolutePathOfImage = null;
        uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
    
        String[] projection = {MediaStore.MediaColumns.DATA, MediaStore.Images.Media.BUCKET_DISPLAY_NAME};
    
        final String orderBy = MediaStore.Images.Media.DATE_TAKEN;
        cursor = getApplicationContext().getContentResolver().query(uri, projection, null, null, orderBy + " DESC");
    
        column_index_data = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
        column_index_folder_name = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.BUCKET_DISPLAY_NAME);
        while (cursor.moveToNext()) {
            absolutePathOfImage = cursor.getString(column_index_data);
            Log.e("Column", absolutePathOfImage);
            Log.e("Folder", cursor.getString(column_index_folder_name));
    
            for (int i = 0; i < al_images.size(); i++) {
                if (al_images.get(i).getStr_folder().equals(cursor.getString(column_index_folder_name))) {
                    boolean_folder = true;
                    int_position = i;
                    break;
                } else {
                    boolean_folder = false;
                }
            }
    
    
            if (boolean_folder) {
    
                ArrayList al_path = new ArrayList<>();
                al_path.addAll(al_images.get(int_position).getAl_imagepath());
                al_path.add(absolutePathOfImage);
                al_images.get(int_position).setAl_imagepath(al_path);
    
            } else {
                ArrayList al_path = new ArrayList<>();
                al_path.add(absolutePathOfImage);
                Model_images obj_model = new Model_images();
                obj_model.setStr_folder(cursor.getString(column_index_folder_name));
                obj_model.setAl_imagepath(al_path);
    
                al_images.add(obj_model);
    
    
            }
    
    
        }
    
    
        for (int i = 0; i < al_images.size(); i++) {
            Log.e("FOLDER", al_images.get(i).getStr_folder());
            for (int j = 0; j < al_images.get(i).getAl_imagepath().size(); j++) {
                Log.e("FILE", al_images.get(i).getAl_imagepath().get(j));
            }
        }
        obj_adapter = new Adapter_PhotosFolder(getApplicationContext(),al_images);
        gv_folder.setAdapter(obj_adapter);
        return al_images;
    }
    
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    
        switch (requestCode) {
            case REQUEST_PERMISSIONS: {
                for (int i = 0; i < grantResults.length; i++) {
                    if (grantResults.length > 0 && grantResults[i] == PackageManager.PERMISSION_GRANTED) {
                        fn_imagespath();
                    } else {
                        Toast.makeText(MainActivity.this, "The app was not allowed to read or write to your storage. Hence, it cannot function properly. Please consider granting it this permission", Toast.LENGTH_LONG).show();
                    }
                }
            }
        }
    }
    
    }
    

    adapter_photosfolder.xml

       
        
    
    
        
        
    
        
    
            
        
    
        
    
        
    
        
    

    Adapter_PhotosFolder.java

        package galleryimages.galleryimages;
    
    
        import android.content.Context;
        import android.util.Log;
        import android.view.LayoutInflater;
        import android.view.View;
        import android.view.ViewGroup;
        import android.widget.ArrayAdapter;
        import android.widget.ImageView;
        import android.widget.TextView;
    
        import com.bumptech.glide.Glide;
        import com.bumptech.glide.load.engine.DiskCacheStrategy;
    
        import java.util.ArrayList;
    
    
         public class Adapter_PhotosFolder extends ArrayAdapter {
    
        Context context;
        ViewHolder viewHolder;
        ArrayList al_menu = new ArrayList<>();
    
    
        public Adapter_PhotosFolder(Context context, ArrayList al_menu) {
            super(context, R.layout.adapter_photosfolder, al_menu);
            this.al_menu = al_menu;
            this.context = context;
    
    
        }
    
        @Override
        public int getCount() {
    
            Log.e("ADAPTER LIST SIZE", al_menu.size() + "");
            return al_menu.size();
        }
    
        @Override
        public int getItemViewType(int position) {
            return position;
        }
    
        @Override
        public int getViewTypeCount() {
            if (al_menu.size() > 0) {
                return al_menu.size();
            } else {
                return 1;
            }
        }
    
        @Override
        public long getItemId(int position) {
            return position;
        }
    
    
        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
    
            if (convertView == null) {
    
                viewHolder = new ViewHolder();
                convertView = LayoutInflater.from(getContext()).inflate(R.layout.adapter_photosfolder, parent, false);
                viewHolder.tv_foldern = (TextView) convertView.findViewById(R.id.tv_folder);
                viewHolder.tv_foldersize = (TextView) convertView.findViewById(R.id.tv_folder2);
                viewHolder.iv_image = (ImageView) convertView.findViewById(R.id.iv_image);
    
    
                convertView.setTag(viewHolder);
            } else {
                viewHolder = (ViewHolder) convertView.getTag();
            }
    
            viewHolder.tv_foldern.setText(al_menu.get(position).getStr_folder());
                viewHolder.tv_foldersize.setText(al_menu.get(position).getAl_imagepath().size()+"");
    
    
    
            Glide.with(context).load("file://" + al_menu.get(position).getAl_imagepath().get(0))
                    .diskCacheStrategy(DiskCacheStrategy.NONE)
                    .skipMemoryCache(true)
                    .into(viewHolder.iv_image);
    
    
            return convertView;
    
        }
    
        private static class ViewHolder {
            TextView tv_foldern, tv_foldersize;
            ImageView iv_image;
    
    
        }
    
    
        }
    
    **PhotosActivity.java**
        package galleryimages.galleryimages;
        import android.app.Activity;
        import android.os.Bundle;
        import android.support.v7.app.AppCompatActivity;
        import android.widget.GridView;
    
    
        public class PhotosActivity extends AppCompatActivity {
        int int_position;
        private GridView gridView;
        GridViewAdapter adapter;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            gridView = (GridView)findViewById(R.id.gv_folder);
            int_position = getIntent().getIntExtra("value", 0);
            adapter = new GridViewAdapter(this,MainActivity.al_images,int_position);
            gridView.setAdapter(adapter);
        }
    }
    
    **GridViewAdapter.java**
    
    package galleryimages.galleryimages;
    
    
        import android.app.Activity;
        import android.content.Context;
        import android.util.Log;
        import android.view.LayoutInflater;
        import android.view.View;
        import android.view.ViewGroup;
        import android.widget.ArrayAdapter;
        import android.widget.BaseAdapter;
        import android.widget.ImageView;
        import android.widget.TextView;
    
        import com.bumptech.glide.Glide;
        import com.bumptech.glide.load.engine.DiskCacheStrategy;
    
    
        import java.util.ArrayList;
        import java.util.List;
    
    
        public class GridViewAdapter extends ArrayAdapter {
    
        Context context;
        ViewHolder viewHolder;
        ArrayList al_menu = new ArrayList<>();
        int int_position;
    
    
        public GridViewAdapter(Context context, ArrayList al_menu,int int_position) {
            super(context, R.layout.adapter_photosfolder, al_menu);
            this.al_menu = al_menu;
            this.context = context;
            this.int_position = int_position;
    
    
        }
    
        @Override
        public int getCount() {
    
            Log.e("ADAPTER LIST SIZE", al_menu.get(int_position).getAl_imagepath().size() + "");
            return al_menu.get(int_position).getAl_imagepath().size();
        }
    
        @Override
        public int getItemViewType(int position) {
            return position;
        }
    
        @Override
        public int getViewTypeCount() {
            if (al_menu.get(int_position).getAl_imagepath().size() > 0) {
                return al_menu.get(int_position).getAl_imagepath().size();
            } else {
                return 1;
            }
        }
    
        @Override
        public long getItemId(int position) {
            return position;
        }
    
    
        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
    
            if (convertView == null) {
    
                viewHolder = new ViewHolder();
                convertView = LayoutInflater.from(getContext()).inflate(R.layout.adapter_photosfolder, parent, false);
                viewHolder.tv_foldern = (TextView) convertView.findViewById(R.id.tv_folder);
                viewHolder.tv_foldersize = (TextView) convertView.findViewById(R.id.tv_folder2);
                viewHolder.iv_image = (ImageView) convertView.findViewById(R.id.iv_image);
    
    
                convertView.setTag(viewHolder);
            } else {
                viewHolder = (ViewHolder) convertView.getTag();
            }
    
            viewHolder.tv_foldern.setVisibility(View.GONE);
            viewHolder.tv_foldersize.setVisibility(View.GONE);
    
    
    
            Glide.with(context).load("file://" + al_menu.get(int_position).getAl_imagepath().get(position))
                    .diskCacheStrategy(DiskCacheStrategy.NONE)
                    .skipMemoryCache(true)
                    .into(viewHolder.iv_image);
    
    
            return convertView;
    
        }
    
        private static class ViewHolder {
            TextView tv_foldern, tv_foldersize;
            ImageView iv_image;
    
    
        }
    
    
        }
    

    Model_images.java

      package galleryimages.galleryimages;
    
        import java.util.ArrayList;
    
        public class Model_images {
        String str_folder;
        ArrayList al_imagepath;
    
        public String getStr_folder() {
            return str_folder;
        }
    
        public void setStr_folder(String str_folder) {
            this.str_folder = str_folder;
        }
    
        public ArrayList getAl_imagepath() {
            return al_imagepath;
        }
    
        public void setAl_imagepath(ArrayList al_imagepath) {
            this.al_imagepath = al_imagepath;
        }
    }
    

    AndroidManifest.xml

    
    
    
        
        
    
        
            
                
                    
    
                    
                
            
    
            
        
    
    
    

提交回复
热议问题