0

親愛なる世界のAndroid開発者。

AndroidカメラAPIの問題について教えてください。

Androidカメラで写真を撮り、ImageButtonの画像に設定したい。また、メディアストアがある場合は、画像を特別なパスに保存します。

問題は次のとおりです。

ZTE 2.2、Samsung Galaxy 2.3.3、Samsungタブレット4.0.3などの一部のAndroidデバイスで動作します。

ただし、2.3.4LGDroidなどの他のデバイスでは機能しません。

撮影した画像が画像ボタンに設定されていないということです。

(2.3.4 LG Droidの詳細なデバイス情報は次のとおりです:Hwバージョン:Rev .1.1、Swバージョン:ms910zbc、ビルド番号ジンジャーブレッド)

これは私のコードです。

String mPhotoPath;
ImageButton mPhotoButton;

mPhotoButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        String storageState = Environment.getExternalStorageState();
        if (storageState.equals(Environment.MEDIA_MOUNTED)) {
            File photoFile = new File(mPhotoPath);
            try {
                if (!photoFile.exists()) {
                    photoFile.getParentFile().mkdirs();
                    photoFile.createNewFile(); 
                    photoFile.setWritable(true, false);
                } 
            } catch (IOException e) {

            }

            Uri fileUri = Uri.fromFile(photoFile);
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
            startActivityForResult(intent, TAKE_PICTURE);
        }else {
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(intent, TAKE_PICTURE);
        }
    }
});



protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode != RESULT_OK) {
        return;
    }
    switch (requestCode) {
        case TAKE_PICTURE: {
            if (data != null) { //ZTE 2.2 device
                try {
                    Bundle extras = data.getExtras();
                    if (extras != null)
                    {
                        fPhoto = extras.getParcelable("data");
                        mPhotoButton.setImageBitmap(fPhoto);
                    }                       
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } 
            else //Samsung 2.3.3 device
            {
                try {
                     FileInputStream stream = new FileInputStream(new File(mPhotoPath));
                     fPhoto = BitmapFactory.decodeStream(stream);
                     stream.close();
                     mPhotoButton.setImageBitmap(fPhoto);
                }catch (Exception e) {
                     e.printStackTrace();
                }
            }
            break;
       }
    }
}

私はあなたのすべての助けに感謝します。

ありがとう。

心から。

4

1 に答える 1

0
public class Camera extends Activity 
  {
 private static final int CAMERA_REQUEST = 1888;
 private String selectedImagePath;
 ImageButton mPhotoButton;

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    mPhotoButton=(Button)findElementById(R.id.imgbtn1);
    mPhotoButton.setOnClickListener(new OnClickListener()
   {
        @Override
        public void onClick(View v) 
        {
            Intent cameraIntent = new Intent(ACTION_IMAGE_CAPTURE);
            startActivityForResult(cameraIntent, CAMERA_REQUEST);
        }
   }
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
    if (resultCode == RESULT_OK) {
        if (requestCode == CAMERA_REQUEST) 
        { 
            Bitmap photo = (Bitmap) data.getExtras().get("data"); 
            ByteArrayOutputStream bytes = new ByteArrayOutputStream();
            photo.compress(Bitmap.CompressFormat.JPEG, 40, bytes);
            Random randomGenerator = new Random();randomGenerator.nextInt();
            String newimagename=randomGenerator.toString()+".jpg";
            File f = new File(Environment.getExternalStorageDirectory()
                                    + File.separator + newimagename);
            try {
                f.createNewFile();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            //write the bytes in file

            try {
                fo = new FileOutputStream(f.getAbsoluteFile());
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            try {
                fo.write(bytes.toByteArray());
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
                uri=f.getAbsolutePath(); 
                mPhotoButton.setImageResource(uri);
    //this is the url that where you are saved the image
      }



  }

上記のコードを試してください...

于 2012-07-11T03:46:56.707 に答える