Android 使GridView从特定文件夹拍摄图像

Android 使GridView从特定文件夹拍摄图像,android,image,gridview,uri,listadapter,Android,Image,Gridview,Uri,Listadapter,我是android应用程序制作的新手,我还是一个有点知识的初学者。我一直在尝试制作一款android应用程序,它的工作原理类似于画廊,但它只在特定文件夹下显示图像。对于UI,我只从一个GridView(或者从后者派生的TwoWayGridView)开始,并且一直试图让这个GridView从这个文件夹获取其内容 我创建了此文件夹并将图像复制到其中进行测试,但失败。没有显示图像。另外,我对光标和列表适配器不是很熟悉。有些我确信是正确的事情是权限、清单和活动的布局。此外,我相信我的问题是关于URIs。

我是android应用程序制作的新手,我还是一个有点知识的初学者。我一直在尝试制作一款android应用程序,它的工作原理类似于画廊,但它只在特定文件夹下显示图像。对于UI,我只从一个
GridView
(或者从后者派生的
TwoWayGridView
)开始,并且一直试图让这个
GridView
从这个文件夹获取其内容

我创建了此文件夹并将图像复制到其中进行测试,但失败。没有显示图像。另外,我对
光标
列表适配器
不是很熟悉。有些我确信是正确的事情是权限、清单和活动的布局。此外,我相信我的问题是关于
URI
s。请在下面检查我的代码:

一些名称:

Uri contentUri;

Cursor mImageCursor;
TwoWayGridView mImageGrid;
ListAdapter mAdapter;

String sdCard = Environment.getExternalStorageDirectory().getAbsolutePath();
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_gallery);

        File motherDirectory = new File(sdCard+"/Favory");
        if(!motherDirectory.exists()){
            motherDirectory.mkdir();
        }


        MediaScannerConnection.scanFile(this, new String[]{motherDirectory.getAbsolutePath()}   ,null, new MediaScannerConnection.OnScanCompletedListener() {

            @Override
            public void onScanCompleted(String path, Uri uri) {
                // TODO Auto-generated method stub
                contentUri = uri ;
                initGrid(uri);
            }
        });



    }
private void initGrid(Uri folderUri) {



mImageCursor = this.getContentResolver().query(folderUri,
        ImageThumbnailAdapter.IMAGE_PROJECTION, null, null,
        MediaStore.Images.ImageColumns.DISPLAY_NAME);
mImageGrid = (TwoWayGridView) findViewById(R.id.gridview);
mAdapter = new ImageThumbnailAdapter(this, mImageCursor);
mImageGrid.setAdapter(mAdapter);

mImageGrid.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(TwoWayAdapterView<?> parent, View v, int position, long id) {
        Log.i(TAG, "showing image: " + mImageCursor.getString(ImageThumbnailAdapter.IMAGE_NAME_COLUMN));
        Uri uri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id);
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        startActivity(intent);
    }
});
}
onCreate方法:

Uri contentUri;

Cursor mImageCursor;
TwoWayGridView mImageGrid;
ListAdapter mAdapter;

String sdCard = Environment.getExternalStorageDirectory().getAbsolutePath();
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_gallery);

        File motherDirectory = new File(sdCard+"/Favory");
        if(!motherDirectory.exists()){
            motherDirectory.mkdir();
        }


        MediaScannerConnection.scanFile(this, new String[]{motherDirectory.getAbsolutePath()}   ,null, new MediaScannerConnection.OnScanCompletedListener() {

            @Override
            public void onScanCompleted(String path, Uri uri) {
                // TODO Auto-generated method stub
                contentUri = uri ;
                initGrid(uri);
            }
        });



    }
private void initGrid(Uri folderUri) {



mImageCursor = this.getContentResolver().query(folderUri,
        ImageThumbnailAdapter.IMAGE_PROJECTION, null, null,
        MediaStore.Images.ImageColumns.DISPLAY_NAME);
mImageGrid = (TwoWayGridView) findViewById(R.id.gridview);
mAdapter = new ImageThumbnailAdapter(this, mImageCursor);
mImageGrid.setAdapter(mAdapter);

mImageGrid.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(TwoWayAdapterView<?> parent, View v, int position, long id) {
        Log.i(TAG, "showing image: " + mImageCursor.getString(ImageThumbnailAdapter.IMAGE_NAME_COLUMN));
        Uri uri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id);
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        startActivity(intent);
    }
});
}
initGrid(Uri)方法:

Uri contentUri;

Cursor mImageCursor;
TwoWayGridView mImageGrid;
ListAdapter mAdapter;

String sdCard = Environment.getExternalStorageDirectory().getAbsolutePath();
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_gallery);

        File motherDirectory = new File(sdCard+"/Favory");
        if(!motherDirectory.exists()){
            motherDirectory.mkdir();
        }


        MediaScannerConnection.scanFile(this, new String[]{motherDirectory.getAbsolutePath()}   ,null, new MediaScannerConnection.OnScanCompletedListener() {

            @Override
            public void onScanCompleted(String path, Uri uri) {
                // TODO Auto-generated method stub
                contentUri = uri ;
                initGrid(uri);
            }
        });



    }
private void initGrid(Uri folderUri) {



mImageCursor = this.getContentResolver().query(folderUri,
        ImageThumbnailAdapter.IMAGE_PROJECTION, null, null,
        MediaStore.Images.ImageColumns.DISPLAY_NAME);
mImageGrid = (TwoWayGridView) findViewById(R.id.gridview);
mAdapter = new ImageThumbnailAdapter(this, mImageCursor);
mImageGrid.setAdapter(mAdapter);

mImageGrid.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(TwoWayAdapterView<?> parent, View v, int position, long id) {
        Log.i(TAG, "showing image: " + mImageCursor.getString(ImageThumbnailAdapter.IMAGE_NAME_COLUMN));
        Uri uri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id);
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        startActivity(intent);
    }
});
}
private void initGrid(Uri folderUri){
mImageCursor=this.getContentResolver().query(folderUri,
ImageThumbnailAdapter.IMAGE_投影,null,null,
MediaStore.Images.ImageColumns.DISPLAY_NAME);
mImageGrid=(双向gridview)findViewById(R.id.gridview);
mAdapter=新的ImageThumbnailAdapter(此为mImageCursor);
设置适配器(mAdapter);
setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(双向适配器视图父视图、视图v、整型位置、长id){
Log.i(标记,“显示图像:”+mImageCursor.getString(ImageThumbnailAdapter.image\u NAME\u列));
Uri Uri=ContentURI.withAppendedId(MediaStore.Images.Media.EXTERNAL\u CONTENT\u Uri,id);
意图=新意图(Intent.ACTION\u视图,uri);
星触觉(意向);
}
});
}

谢谢你的帮助,如果有更简单的替代方法,请告诉我,我现在更关心结果而不是方法。如果您需要任何信息,请在下面的评论中告诉我。再次感谢

要读取文件夹的文件,可以使用此功能(从post):


有关如何使用此库的更多信息,您可以查看示例,其中有一个示例使用grid view gridView来读取文件夹的文件,您可以使用此功能(从post):


有关如何使用此库的更多信息,您可以查看示例,其中有一个使用grid view gridView的示例

此方法是递归的吗?此方法是递归的吗?