2

У меня есть две проблемы:startActivityForResult в фрагменте

Первого: Интересно знать, в 2 ти различных метода ПОТОМУ, когда я использую метод 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 extend 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); 

    } 

благодаря

ответ

1

Попробуйте, как это ...

 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); 
    } 

Это просто полностью протестирована полный пример для вас, которые могут помочь вам, безусловно, снимать с камеры .... и работает как шарм .....

+0

Он все еще отрицает. Потому что когда я отлаживаю, я вижу resultCode на caemra фрагменте == 0; (Toast = cancel). Я думаю, моя проблема в startActivityForResult и onActivityResult. –

+0

@ AceAkatsuki..okay ... теперь расскажите мне о своей главной проблеме, чтобы решить эту проблему, или вы можете работать с другим кодом, который будет работать более эффективно, чем это –

+1

@AceAkatsuki ... Я обновил свой ответ, который, безусловно, поможет вам –

Смежные вопросы