3

apiレベル4(android 1.6)で、以下を使用して写真を撮った後:

Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
File photo = new File(Environment.getExternalStorageDirectory(), "NewPic.jpg");
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo));
imageUri = Uri.fromFile(photo);
startActivityForResult(intent, TAKE_PICTURE);

すべての写真のサムネイルを確認したいのですが、最後の写真のサムネイルがありません。それはアンドロイド2.1で完全に動作します。

USB経由でデバイスをPCに接続すると、スキャンが終了した後、切断ファイルが表示されます。では、どのようにインデックス作成を開始する必要がありますか?

私は試した

mScanner = new MediaScannerConnection(getApplicationContext(), this);
mScanner.connect();
mScanner.scanFile(imageUri.getEncodedPath(), "*/*");

そしてこれで終わります:

02-24 17:13:54.678: DEBUG/MediaScannerService(1320): IMediaScannerService.scanFile: /sdcard/NewPic2222.jpg mimeType: */*
02-24 17:13:54.688: VERBOSE/MediaProvider(1320): /sdcard volume ID: 1149784819
02-24 17:13:54.688: VERBOSE/MediaProvider(1320): key exists

後で編集

私は他の活動でこのようなsthを持っています

mCursorThumbnails = MediaStore.Images.Thumbnails.queryMiniThumbnails(mContentResolver, MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, MediaStore.Images.Thumbnails.MINI_KIND, projection);
mCursorImages = MediaStore.Images.Media.query(mContentResolver, MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection);

最初の値のカウントを確認すると、13個の要素があり、2番目の値には14個の要素があります。したがって、画像はmediascannerに追加されていますが、OSはそのサムネイルを生成していません。では、OSに作成を依頼するにはどうすればよいですか?

4

4 に答える 4

9

ファイルを追加するときはいつでも、 sendBroadcastメソッドを使用してMediaStoreコンテンツプロバイダーにそのことを知らせてください

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(mediaFileAdded)));

削除するには、以下を使用します。

getContentResolver().delete(uriOfMediaFileDeteled, null, null)

主な利点:MediaStoreでサポートされている任意のmimeタイプで動作します

あなたの場合、写真が正常に撮影された後、onActivityResultMethod(すなわち)でこれを行います

于 2013-02-13T08:56:04.997 に答える
6

このコードを使用します:

public static void scanFile(Context context, String path, String mimeType ) {
    Client client = new Client(path, mimeType);
    MediaScannerConnection connection =
            new MediaScannerConnection(context, client);
    client.connection = connection;
    connection.connect();
}

private static final class Client implements MediaScannerConnectionClient {
    private final String path;
    private final String mimeType;
    MediaScannerConnection connection;

    public Client(String path, String mimeType) {
        this.path = path;
        this.mimeType = mimeType;
    }

    @Override
    public void onMediaScannerConnected() {
        connection.scanFile(path, mimeType);
    }

    @Override
    public void onScanCompleted(String path, Uri uri) {
        connection.disconnect();
    }
}

次に、を呼び出しますscanFile(imageUri.getPath(), null)

エンコードされたパスを使用しないでください。また、値によってスキャナーがMIMEタイプを自動的に判別する"*/*"ため、MIMEタイプとして使用しないでください。null

于 2011-02-24T21:16:42.920 に答える
1

写真を撮った後、ContentResolverのinsert()関数を呼び出して、写真に関する情報を渡してみてください。

public final Uri insert (Uri url, ContentValues values)

実際に画像がデータベースに追加され、画像のサムネイル画像が作成されます。サムネイルデータベースにも追加されます。お役に立てれば!

于 2011-10-13T01:09:32.040 に答える
0

使用する

MediaStore.Images.Thumbnails.getThumbnail(ContentResolver cr, long origId, int kind, BitmapFactory.Options options)

画像のサムネイルを強制的に作成します。

于 2011-08-05T10:58:17.990 に答える