4

現在、このインテントを起動すると、標準の画像選択 (SD カードから) ダイアログが表示されます。

Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE);

これには、画像を返すことができるすべてのアプリケーション/アクティビティ (ギャラリーなど) が一覧表示されます。

この同じ標準リストに、カメラを起動してカメラで撮影した画像を返すオプションも含めたいと思います。問題は、カスタム以外の方法でこれを行う方法がわからないことです (カスタム レイアウト、アプリケーション イメージ + タイトルなどを使用して独自のダイアログを作成する)。

カメラ アクティビティは次のように起動できます。

Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
URI pictureUri = Uri.fromFile(new File("dummyPath"));
camera.putExtra(MediaStore.EXTRA_OUTPUT, pictureUri);

SD カードまたはカメラで撮影した画像を選択できるようにする意図はありますか?

更新:解決策を見つけました。再確認して、後でここに投稿します。

4

2 に答える 2

4

オプションを表示する警告ダイアログを表示できます。ソースコードを以下に示します。

AlertDialog.Builder getImageFrom = new AlertDialog.Builder(MainActivity.this);
            getImageFrom.setTitle("Select Image");
            final CharSequence[] opsChars = {"Take Picture", "Open Gallery"};
            getImageFrom.setItems(opsChars, new android.content.DialogInterface.OnClickListener(){
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    if(which == 0){
                         File file = new File( _path );
                         outputFileUri = Uri.fromFile( file );

                        Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                        cameraIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);   

                        startActivityForResult(cameraIntent, 7);
                    }else
                        if(which == 1){
                            Intent intent = new Intent();
                            intent.setType("image/*");
                            intent.setAction(Intent.ACTION_GET_CONTENT);
                            startActivityForResult(Intent.createChooser(intent,
                                "Open Gallery"), 6);
                        }
                    dialog.dismiss();
                }
            });


    public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        if (requestCode == 6) {
            Uri selectedImageUri = data.getData();
         pickerImageView.setPadding(0, 0, 0, 0);
         pickerImageView.setScaleType(ScaleType.FIT_XY);
         System.gc();
           String filepath = getPath(selectedImageUri);
           File imagefile = new File(filepath);
           try {
            FileInputStream fis = new FileInputStream(imagefile);
            BitmapFactory.Options options=new BitmapFactory.Options();
            options.inPurgeable=true;
            options.inSampleSize =4;
            bi= BitmapFactory.decodeStream(fis,null,options);
            fis.close();
            Bitmap bitmapToRecycle = ((BitmapDrawable)pickerImageView.getDrawable()).getBitmap();  
            bitmapToRecycle.recycle();
            pickerImageView.setImageBitmap(bi); 
            pickerImageView.setPadding(0, 0, 0, 0);
            pickerImageView.setScaleType(ScaleType.FIT_XY);


        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
           pickImageTextView.setText("");
        }
        else if(requestCode == 7){
            Log.i("return", "#####");
            BitmapFactory.Options options=new BitmapFactory.Options();
            options.inPurgeable=true;
            options.inSampleSize =4;
            //Bitmap photo = BitmapFactory.decodeFile( _path, options );
             Bitmap photo = (Bitmap) data.getExtras().get("data"); 
             pickerImageView.setImageBitmap(photo); 
             pickerImageView.setPadding(0, 0, 0, 0);
             pickerImageView.setScaleType(ScaleType.FIT_XY);

        } 
    }
}
于 2012-11-12T09:00:10.220 に答える
-1

次のように、プログラムで画像をギャラリーに追加できます。

Intent media = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);

//mCurrentPhotoPath は画像へのパスです。

File f = new File(mCurrentPhotoPath);
Uri contentUri = Uri.fromFile(f);
media.setData(contentUri);
this.sendBroadcast(media);
于 2012-11-12T08:50:32.460 に答える