4

我慢してください...私は、カメラアクティビティを開始し、写真を撮り、それを単純なImageViewに配置する、機能する最低限のコードをDAYSで探していました>。<以下に投稿されたコードが起動しますアクティビティをアップして写真を大丈夫にしますが、画像はImageViewに表示されません!何が欠けているのですか?:'(

public class MainActivity extends Activity
{
private static final int PICK_IMAGE = 0;

private static final int PICK_IMAGE_FROM_GALLERY = 1;

private Button mBtnCamera, mBtnGallery, mBtnCancel;

private ImageView mImageView;

private Uri mURI;
private String mPhotoPath;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mImageView = (ImageView) findViewById(R.id.imgDisplayImage);

    mBtnCamera = (Button) findViewById(R.id.btnPhotoCamera);
    mBtnGallery = (Button) findViewById(R.id.btnPhotoGallery);
    mBtnCancel = (Button) findViewById(R.id.btnCancel);

    mBtnCamera.setOnClickListener(new OnClickListener()
    {

        @Override
        public void onClick(View v)
        {
            Intent camera = new Intent();

            camera.setAction(MediaStore.ACTION_IMAGE_CAPTURE);

            camera.putExtra("crop", "true");

            File f = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);

            mURI = Uri.fromFile(new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "myFile.jpg"));

            camera.putExtra(MediaStore.EXTRA_OUTPUT, mURI);

            startActivityForResult(camera, PICK_IMAGE);
        }
    });
}   

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    if (requestCode == PICK_IMAGE)
    {
        // Result includes a Bitmap thumbnail?
        if (data != null)
        {
            if (data.hasExtra("data"))
            {
                //Bitmap thumbnail = data.getParcelableExtra("data");

                Bitmap thumbnail = (Bitmap) data.getExtras().get("data");

                mImageView.setImageBitmap(thumbnail);
            }
        }
        // If there is no thumbnail data, the image will have been stored in target output URI.
        else
        {

            Cursor cursor = getContentResolver().query(
                    Media.EXTERNAL_CONTENT_URI, new String[]
                            {
                                Media.DATA, 
                                Media.DATE_ADDED, 
                                MediaStore.Images.ImageColumns.ORIENTATION
                            }, 
                            Media.DATE_ADDED, 
                            null, 
                            "date_added ASC"
            );

            if (cursor != null && cursor.moveToFirst())
            {
                do
                {
                    mURI = Uri.parse(cursor.getString(cursor.getColumnIndex(Media.DATA)));
                    mPhotoPath = mURI.toString();
                }
                while (cursor.moveToNext());
                cursor.close();
            }

            // Resize full image to fit out in image view.
            int width = mImageView.getWidth();
            int height = mImageView.getHeight();

            BitmapFactory.Options factoryOptions = new BitmapFactory.Options();

            factoryOptions.inJustDecodeBounds = true;

            BitmapFactory.decodeFile(/*mURI.getPath()*/ mPhotoPath, factoryOptions);

            int imageWidth = factoryOptions.outWidth;
            int imageHeight = factoryOptions.outHeight;

            // Determine how much to scale down the image
            int scaleFactor = Math.min(
                    imageWidth/width,
                    imageHeight/height
                    );

            // Decode the image file into a Bitmap sized to fill view

            factoryOptions.inJustDecodeBounds = false;
            factoryOptions.inSampleSize = scaleFactor;
            factoryOptions.inPurgeable = true;

            Bitmap bitmap = BitmapFactory.decodeFile(/*mURI.getPath()*/ mPhotoPath, factoryOptions);

            mImageView.setImageBitmap(bitmap);
        }
    }
}
}
4

3 に答える 3

1

Galaxy S3 電話で動作するように試行およびテストされています。TGMCians の協力に感謝します。

public class MainActivity extends Activity
{
private static final int PICK_IMAGE = 0;

private static final int PICK_IMAGE_FROM_GALLERY = 1;

private Button mBtnCamera, mBtnGallery, mBtnCancel;

private ImageView mImageView;

private Uri mURI;
private String mPhotoPath;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mImageView = (ImageView) findViewById(R.id.imgDisplayImage);

    mBtnCamera = (Button) findViewById(R.id.btnPhotoCamera);
    mBtnGallery = (Button) findViewById(R.id.btnPhotoGallery);
    mBtnCancel = (Button) findViewById(R.id.btnCancel);

    mBtnCamera.setOnClickListener(new OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            Intent camera = new Intent();

            camera.setAction(MediaStore.ACTION_IMAGE_CAPTURE);

            camera.putExtra("crop", "true");

            File f = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);

            mURI = Uri.fromFile(new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "myFile.jpg"));

            camera.putExtra(MediaStore.EXTRA_OUTPUT, mURI);

            startActivityForResult(camera, PICK_IMAGE);
        }
    });
}   

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    if (resultCode == Activity.RESULT_OK)
    {
        if (requestCode == PICK_IMAGE)
        {
            Cursor cursor = getContentResolver().query(
                    Media.EXTERNAL_CONTENT_URI, new String[]
                            {
                                Media.DATA, 
                                Media.DATE_ADDED, 
                                MediaStore.Images.ImageColumns.ORIENTATION
                            }, 
                            Media.DATE_ADDED, 
                            null, 
                            "date_added ASC"
            );

            if (cursor != null && cursor.moveToFirst())
            {
                do
                {
                    mURI = Uri.parse(cursor.getString(cursor.getColumnIndex(Media.DATA)));
                    mPhotoPath = mURI.toString();
                }
                while (cursor.moveToNext());
                cursor.close();
            }
            if (data != null)
            {
                if (data.hasExtra("data"))
                {
                    Bitmap thumbnail = (Bitmap) data.getExtras().get("data");

                    mImageView.setImageBitmap(thumbnail);
                }
                else
                {
                    System.out.println("Intent bundle does not have the 'data' Extra");

                    int width = mImageView.getWidth();
                    int height = mImageView.getHeight();

                    BitmapFactory.Options factoryOptions = new BitmapFactory.Options();

                    factoryOptions.inJustDecodeBounds = true;

                    BitmapFactory.decodeFile(/*mURI.getPath()*/ mPhotoPath, factoryOptions);

                    int imageWidth = factoryOptions.outWidth;
                    int imageHeight = factoryOptions.outHeight;

                    // Determine how much to scale down the image
                    int scaleFactor = Math.min(
                            imageWidth/width,
                            imageHeight/height
                            );

                    // Decode the image file into a Bitmap sized to fill view

                    factoryOptions.inJustDecodeBounds = false;
                    factoryOptions.inSampleSize = scaleFactor;
                    factoryOptions.inPurgeable = true;

                    Bitmap bitmap = BitmapFactory.decodeFile(/*mURI.getPath()*/ mPhotoPath, factoryOptions);

                    mImageView.setImageBitmap(bitmap);

                }
            }
        }
    }
    else 
    {
        System.out.println("Picture taking activity NOT returning RESULT_OK");
    }
}
}
于 2013-02-28T16:43:00.137 に答える
1

samsung androidの一部のデバイスで同じ問題が発生した後、キャプチャした写真のパスを取得するロジックを実装しました。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    if (requestCode == PICK_IMAGE)
    {
        Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
        startActivityForResult(cameraIntent, CAMERA_REQUEST_CODE);

        Cursor cursor = getContentResolver().query(Media.EXTERNAL_CONTENT_URI, new String[]{Media.DATA, Media.DATE_ADDED, MediaStore.Images.ImageColumns.ORIENTATION}, Media.DATE_ADDED, null, "date_added ASC");
        if(cursor != null && cursor.moveToFirst())
        {
            do {
                uri = Uri.parse(cursor.getString(cursor.getColumnIndex(Media.DATA)));
                photoPath = uri.toString();
            }while(cursor.moveToNext());
            cursor.close();
        }

        if(photoPath != null) {
            Bitmap bitmap = BitmapFactory.decodeFile(photoPath);
            ///Do Implement your logic whatever you want.
            mImageView.setImageBitmap(bitmap);
        }
    }
}
于 2013-02-28T15:39:05.580 に答える
0

追加してみる

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

(そして少し遅れて)すぐ内側

 if (requestCode == PICK_IMAGE)

ブロック。問題は、お使いのデバイスがメディア ストアを正しく更新していないことにあると思います。

(もちろん、より良いアクションは、MediaScanner を使用してファイルをスキャンすることです)

于 2013-02-28T16:32:57.907 に答える