0

SDカードの特定のフォルダーに保存された最後の画像のサムネイルを取得するためのパブリックメソッドを持つカスタムカメラがあります...

そのメソッドは次のようになります。

public void getGalleryThumb(){
             // TODO add Logic for gallery images..
            File sdDir = new File("/sdcard/LC/images");
            File[] sdDirFiles = sdDir.listFiles();
            if(sdDir.length()>0){
                File lastPhoto = sdDirFiles[0];
                Bitmap myBitmap = BitmapFactory.decodeFile(lastPhoto.getAbsolutePath());
                //SET MY IMAGE VIEW BITMAP TO LAST FILE IN sdDIRFiles
                photo.setImageBitmap(myBitmap);
                btn_gallery.setVisibility(View.VISIBLE);
            }
            //Toast.makeText(getBaseContext(), "num images in gal:"+sdDirFiles.length +"last image name: "+sdDirFiles[0], Toast.LENGTH_LONG).show();

        }

そのフォルダーから写真を削除すると、上記の方法では常に正しい画像が取得されるとは限らないことに気付きました..私は以下を使用しました:

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, 
                         Uri.parse("file://"+ Environment.getExternalStorageDirectory()+"/LC/images/")));

そのSDカード/フォルダに新しいファイルを削除して書き込むと、それはうまくいかないようです。さらに、マウントされているSDカードに関するこの迷惑なトーストメッセージを強制します..

任意の助けをいただければ幸いです

4

1 に答える 1

0

コメントで書いていたのですが、ここに詳細を載せておきます。複数の問題:

  • listFilesは順序を保証するものではありません。最終変更でファイルを並べ替える必要があります。
  • 「/sdcard」に直接アクセスしないでください。コードの2番目のスニペットには。がありますEnvironment.getExternalStorageDirectory()。それを使用してください。
  • SDカードに関するメッセージが表示されますか?彼らはどこから来たのですか?ローカルマシンにマウントすると、マウント中はアプリからアクセスできなくなります。
于 2012-04-02T03:37:18.763 に答える