2

2 つのメイン ボタンがあるアプリがあります。1 つはデバイス上のすべての写真でギャラリーを開き、もう 1 つはカメラをポップアップします。どちらも正常に動作していますが、ここに問題があります。カメラ ボタンで写真を撮ると、ギャラリーに表示されません。アプリを閉じて再度開いても(ギャラリーのコードを強制的に再度実行します)。画像を表示する唯一の方法は、デバイスを USB 経由でコンピューターに接続してから切断することです (メディアの検索、更新などを強制すると思います)。

カメラ インテントのコードは次のとおりです。

 if (getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
                            Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
                             String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
                            File photo = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM),  "IMG_" + timeStamp  + ".jpg");
                            intent.putExtra(MediaStore.EXTRA_OUTPUT,
                                    Uri.fromFile(photo));
                            imageUri = Uri.fromFile(photo);
                            startActivityForResult(intent, 1);

                        } else {

                            Toast.makeText(getApplicationContext(), "Seu dispositivo Android não possui uma câmera funcional.", Toast.LENGTH_LONG).show();
                        }

ギャラリーのコードは次のとおりです。

final String[] columns = { MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID };
        final String orderBy = MediaStore.Images.Media._ID;
        Cursor imagecursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null,null, orderBy);
        int image_column_index = imagecursor.getColumnIndex(MediaStore.Images.Media._ID);
        int dataColumnIndex = imagecursor.getColumnIndex(MediaStore.Images.Media.DATA);
        this.count = imagecursor.getCount();
        this.thumbnails = new Bitmap[this.count];
        this.arrPath = new String[this.count];
        this.thumbnailsselection = new boolean[this.count];
        for (int i = 0; i < this.count; i++) {
            imagecursor.moveToPosition(i);
            int id = imagecursor.getInt(image_column_index);
            thumbnails[i] = MediaStore.Images.Thumbnails.getThumbnail(
                    getApplicationContext().getContentResolver(), id,
                    MediaStore.Images.Thumbnails.MICRO_KIND, null);
            arrPath[i]= imagecursor.getString(dataColumnIndex);

PS: managedQuery が非推奨であることは知っていますが、これが唯一の方法です... ありがとうございます!

4

2 に答える 2

0

ファイルを書き込んだ後に変更があったことをコンテンツ URI に通知してみることができます。

getContentResolver().notifyChange(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null);
于 2012-08-03T21:20:59.750 に答える
0

ファイルを保存した後にこのコードを配置した後、問題を解決します

 // to tell system update data
 sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)));
于 2018-12-19T08:23:11.693 に答える