簡體   English   中英

片段中的startActivityForResult

[英]startActivityForResult in fragment

我有兩個問題:

首先:我想知道2方法cuz中的diffirent當我使用方法1我的應用程序運行正常,但我改變方法2它不能運行..方法1(照片簡單):

    private void takePhoto() {

     Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    Log.d(TAG, "Take photo .......");

    startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);
}

方法2:

  public void dispathTakepictureIntent() {

  Context context = getActivity();

    PackageManager packageManager = context.getPackageManager();

    if (packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA)                    ==false)
                 {
        Toast.makeText(getActivity()
       , "This device does not have a camera.", Toast.LENGTH_SHORT).show();
        return;
    }
       else 
        {
        Intent takePictureIntent = new                   Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) 
               {  
            File photoFile = null;
            try {
                photoFile = createCurrentPhotoPath();

                } 
                catch (IOException ex) 
                   {

                Toast.makeText(getActivity(), "null photo Path", Toast.LENGTH_LONG).show();
            }

            if (photoFile != null) {
                takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                        Uri.fromFile(photoFile));

                startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);

            }
        }
    }

}

---相機片段的onActivityResult:

 @Override

    public void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == REQUEST_TAKE_PHOTO && resultCode == Activity.RESULT_OK) {

            Bundle extras = data.getExtras();
            Bitmap imageBitmap = (Bitmap) extras.get("data");
            if (imageBitmap != null)
                Img_show.setImageBitmap(imageBitmap);
            else
                Toast.makeText(getActivity(), "null photo bitmap", Toast.LENGTH_LONG).show();

        } else
            Toast.makeText(getActivity(), "Cancel !", Toast.LENGTH_LONG).show();


    }

主要問題:現在我有MainFragment擴展FragmentActivity(有片段相機和地圖)。 但在片段相機的時候我

startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);

然后在方法onActivityResult中,resultCode總是== 0雖然它必須== 1; 誰能證明我的問題??? 我哪里錯了?

請注意在mainFragment中我只是調用:

@Override

    public void onActivityResult(int requestCode, int resultCode, Intent data) {

        super.onActivityResult(requestCode, resultCode, data);

    }

謝謝

試試這樣......

     private static final int REQUEST_CAMERA = 2;

    if (isDeviceSupportCamera()) {
                        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                        startActivityForResult(intent, REQUEST_CAMERA);
                    } else {
                        showCustomToast(" No camera on this device !!");
                    }
     private boolean isDeviceSupportCamera() {
            if (getActivity().getApplicationContext().getPackageManager().hasSystemFeature(
                    PackageManager.FEATURE_CAMERA)) {
                // this device has a camera
                return true;
            } else {
                // no camera on this device
                return false;
            }
        }
     @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);

            if (requestCode == REQUEST_CAMERA && resultCode == getActivity().RESULT_OK && null != data) {
                Bitmap photo = (Bitmap) data.getExtras().get("data");
                profileImage.setImageBitmap(photo);

                // CALL THIS METHOD TO GET THE URI FROM THE BITMAP
                Uri tempUri = getImageUri(getActivity().getApplicationContext(), photo);

                // CALL THIS METHOD TO GET THE ACTUAL PATH
                File finalFile = new File(getRealPathFromURI(tempUri));
                decodeFile(finalFile.toString());
            }
        }
 public Uri getImageUri(Context inContext, Bitmap inImage) {
        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
        String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
        return Uri.parse(path);
    }

    public String getRealPathFromURI(Uri uri) {
        Cursor cursor = getActivity().getContentResolver().query(uri, null, null, null, null);
        cursor.moveToFirst();
        int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
        return cursor.getString(idx);
    }


    // decode image
    public void decodeFile(String filePath) {
        // Decode image size
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(filePath, o);
        // The new size we want to scale to
        final int REQUIRED_SIZE = 1024;
        // Find the correct scale value. It should be the power of 2.
        int width_tmp = o.outWidth, height_tmp = o.outHeight;
        int scale = 1;
        while (true) {
            if (width_tmp < REQUIRED_SIZE && height_tmp < REQUIRED_SIZE)
                break;
            width_tmp /= 2;
            height_tmp /= 2;
            scale *= 2;
        }

        // Decode with inSampleSize
        BitmapFactory.Options o2 = new BitmapFactory.Options();
        o2.inSampleSize = scale;
        bitmap = BitmapFactory.decodeFile(filePath, o2);       
        profileImage.setImageBitmap(bitmap);
    }

它只是一個經過充分測試的完整示例,可以幫助您從相機拍照....並且像一個魅力......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM