1

sdcardの特定のフォルダに写真を保存し、そのフォルダ「/ sdcard / myApp/images」の写真を表示するための独自のギャラリービューを持つカスタムカメラアプリを作成しました

GalaxyTab-110インチとGalaxyTab-210インチの2つの異なるタブレットでテストしています。カメラは両方のタブレットで問題なく動作し、写真を撮ってアプリが作成したフォルダーに保存します。ただし、Tab1のギャラリービューには、そのフォルダー内のすべての写真が表示されるわけではありません。tab-2には常に現在フォルダ内にあるすべての写真が表示されますが、tab-1には多くの場合、タブレットが最後に再起動されたときのそのフォルダ内の画像のみが表示されます。

そのため、Tab-1で、そのフォルダに写真がなく、カメラで2枚の写真を撮り、ギャラリービューに切り替えると、写真が表示されません。次に再起動してギャラリービューに移動すると、両方の写真が表示されますが、カメラに切り替えて別の写真を撮ると、再起動するまでギャラリーには元の2枚しか表示されません。

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-1とosで3.1から3.2に更新されたので、これもtab-2(os 4.0)とtab-1で機能しますが、なぜ機能しなかったのですか。

4

1 に答える 1

1

メディアファイルを更新するには、これを試してください。

this._context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + Environment.getExternalStorageDirectory() + "/Hugg/" + name)));
于 2012-11-26T11:03:57.337 に答える