自定义相机/图库应用程序未准确显示 SD 卡/文件夹

Posted

技术标签:

【中文标题】自定义相机/图库应用程序未准确显示 SD 卡/文件夹【英文标题】:Custom Camera/Gallery app not showing sdcard/folder accurately 【发布时间】:2012-08-17 13:43:50 【问题描述】:

我已经构建了一个自定义相机应用程序,它将图片保存到我的 sdcard 上的特定文件夹中,并有自己的画廊视图用于查看该文件夹“/sdcard/myApp/images”中的照片

我已经在两款不同的平板电脑上进行了测试,Galaxy Tab-1 10 英寸和 Galaxy Tab-2 10 英寸。相机在两台平板电脑上都可以正常工作,拍照并将它们保存到应用程序创建的文件夹中。但 Tab1 上的图库视图并未显示该文件夹中的所有照片。 tab-2 总是显示文件夹中当前的所有照片,但 tab-1 通常只显示该文件夹中上次重新启动平板电脑时的图像。

所以在 Tab-1 上,如果我在该文件夹中没有照片,然后用相机拍摄两张照片并切换到画廊视图,它会显示没有照片。如果我然后重新启动,然后转到画廊视图,我会看到两张照片,但如果我切换到相机并拍摄另一张照片,画廊只会显示原始的两张,直到我重新启动。

适用于 android 3.2 + 但 3.1 不行!

有什么想法吗?

在galleryView的构造函数中发送到适配器的光标:

 // Set up an array of the Thumbnail Image ID column we want
    String[] projection = MediaStore.Images.Media._ID;
    // Create the cursor pointing to the SDCard
    cursor = managedQuery( MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
            projection, // Which columns to return
            MediaStore.Images.Media.DATA + " like ? ",
            new String[] "%LC/images%",  
            MediaStore.Images.Media._ID + " DESC");


    // Get the column index of the Thumbnails Image ID
    columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID);


    ga.setAdapter(new GallAdapter(this,cursor,columnIndex));

适配器:

public class GallAdapter extends BaseAdapter 
    public Cursor cursor;
    private int columnIndex;
    private Context context;
    int imageBackground;
    String url;
    Uri uri;
    int originalImageId;
    int imageID;
    int columnData;
    ViewGroup myp;
    ImageView d;

    public GallAdapter(Context ctx, Cursor cur, int cIn ) 
        context = ctx;
        columnIndex = cIn;

        cursor = cur;
        Log.v("GallAdapter", "COUNT:"+getCount());
    

    @Override
    public int getCount() 

        return cursor.getCount();
    

    @Override
    public Object getItem(int position) 

        return position;
    

    @Override
    public long getItemId(int position) 

        return position;
    

    @Override
    public View getView(int position, View convertView, ViewGroup parent) 
        myp = parent;
        View v;
        if(convertView ==null)
            v = LayoutInflater.from(context).inflate(R.layout.galitem, parent, false);
        else
            v = convertView;
        


        ImageView photo = (ImageView) v.findViewById(R.id.imageView);
        ImageView border = (ImageView) v.findViewById(R.id.borderView);
        d = (ImageView) v.findViewById(R.id.delView);



        // Move cursor to current position
        cursor.moveToPosition(position);

        // Get the current value for the requested column
        imageID = cursor.getInt(columnIndex);
        // obtain the image URI
        uri = Uri.withAppendedPath( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, Integer.toString(imageID) );
        url = uri.toString();
        // Set the content of the image based on the image URI
        originalImageId = Integer.parseInt(url.substring(url.lastIndexOf("/") + 1, url.length()));
        Bitmap b = MediaStore.Images.Thumbnails.getThumbnail(context.getContentResolver(),
                        originalImageId, MediaStore.Images.Thumbnails.MINI_KIND, null);
        photo.setImageBitmap(b);

        photo.setScaleType(ImageView.ScaleType.FIT_CENTER); 
        d.setTag(uri);
        d.setOnClickListener(new OnClickListener()


            public void onClick(View v) 

                String path = getRealPathFromURI((Uri) v.getTag());
                alertBox("Warning!", "Are you sure you want to delete this photo?", path, v);


            


        );

        return v;
    

这同样适用于 tab-2 (os 4.0) 和 tab-1,因为固件已在 tab-1 和操作系统从 3.1 更新到 3.2,但为什么它不起作用..

【问题讨论】:

我认为这与您的代码有关,例如数据适配器没有被新项目刷新。您能否发布一些代码以便我们可以为您提供帮助?跨度> 将代码放在我的编辑中.. 但现在 tab-1 固件和操作系统已更新.. 请参阅编辑末尾的评论.. 【参考方案1】:

试试这个以刷新您的媒体文件。

this._context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + Environment.getExternalStorageDirectory() + "/Hugg/" + name)));

【讨论】:

以上是关于自定义相机/图库应用程序未准确显示 SD 卡/文件夹的主要内容,如果未能解决你的问题,请参考以下文章

android如何读取sd卡目录文件夹下多个文件,自定义一个case文件夹,如何读取里面的多个文件

我做了一个启动相机的PhoneGap应用程序,拍照并保存到SD卡。如何让该图片以 HTML 格式显示?

将相机图像保存在手机记忆库中的自定义位置

为啥华为手机拍了照片保存不了怎么回事

如何将TF卡转为SD卡在数码相机中使用使用?

怎么把二维码做进不显示不出来怎么回事