1

ICS を実行している Nexus S で Thumbnails.getThumbnail を picasa の写真と連携させるのに苦労しています。picasa から元の画像を取得して表示するなど、他のすべては機能しているようですが、getThumbnail は機能していないようです。使用しようとすると、次のエラーが表示されます。

E/MiniThumbFile( 1852): Got exception when reading magic, id = 5745625138093120418, disk full or mount read-only? class java.lang.IllegalArgumentException
W/MediaProvider(  540): original media doesn't exist or it's canceled.

ディスクはいっぱいではなく、読み書き可能で、アプリには外部ストレージの書き込み権限があり、写真は実際に picasa に存在します (Android ギャラリー アプリで表示できます)。

同じコードは Android 2.3 でも問題なく動作しますが、わずかに異なるパスをたどります。2.3 は写真のコピーをダウンロードし、コンテンツを渡すのではなく、実際のローカル file:// uri を新しくダウンロードした画像に渡すように見えるためです。 ://uri.

これは問題のコードの主な内容です:

  public void addImage(Uri uri, boolean local)
  {
     ContentResolver resolver = getContentResolver();
     Uri actualUri = uri;

     Log.d(TAG, "addImage: original uri: " + uri.toString());

     if(local) {
        try {
           List<String> uriPath = uri.getPathSegments();
           String contentUri = Media.insertImage(resolver, uri.getPath(), uriPath.get(uriPath.size()-1), new String());
           actualUri = Uri.parse(contentUri);
        }
        catch(java.io.FileNotFoundException ex) {
           Log.e(TAG, "FileNotFoundException: ");
           ex.printStackTrace();
        }
     }

     Log.d(TAG, "addImage: actual uri: " + actualUri.toString());

     List<String> uriPath = actualUri.getPathSegments();
     long imageId = Long.parseLong(uriPath.get(uriPath.size() -1));

     Bitmap thumb = Thumbnails.getThumbnail(resolver, imageId, Thumbnails.MINI_KIND, null);
     if(thumb == null) {
        Log.e(TAG, "Failed to get thumbnail for our image.");
        Toast toast = Toast.makeText(getApplicationContext(), "Failed to get thumbnail for image. Please try again.", Toast.LENGTH_SHORT);
        toast.show();
        return;
     }

     uris.add(uri);
     bmps.add(thumb);
     notifyDataSetChanged();
  }

このメソッドは、アプリケーションの写真の「コレクション」に新しい写真が追加されるたびに呼び出されます。ローカル イメージであることがわかっている場合 (つまり、写真がアプリ内から撮影された場合、または onActivityResult のデータ引数が null の場合)、ローカル パラメータは true に設定され、コンテンツから content:// uri を取得しようとします。 Thumbnails.getThumbnail に渡す有効な画像 ID を取得できるようにします。このコードは、(startActivityForResult を介して) カメラ アプリから取得した画像と、デバイスにローカルに保存されているギャラリーの画像に対して正常に機能します。

私は少し困惑しています。

4

2 に答える 2

0

同じ問題があり、インポート/パッケージの問題でした。

必ず正しいサムネイルクラスを使用してください。二つあります。1つはビデオ用、もう1つは画像用です。

MediaStore.Images.Thumbnails
MediaStore.Video.Thumbnails
于 2012-09-18T12:28:17.103 に答える
0

https://developers.google.com/picasa-web/docs/2.0/reference#media_group

Android でサムネイルを取得するのに苦労している場合は、上記のリンクと API、および Atom フィードの media:group/media:thumbnail タグに注意してください。これは、この投稿で参照されているサムネイルの親要素またはコンテナーです

そのため、android でサムを処理するために、実際に API ( picasa フィード / 写真 / media:group など) を使用するようにコードを構成できれば、現在のようなバグの問題が少なくなる可能性があります。

サンプル google/android/picasaコード

APIリファレンス

別の API リファレンス

于 2012-05-28T14:17:42.327 に答える