2

我有两个问题:startActivityForResult在片段

第一:我想知道的Cuz当我使用方法1我的应用程序运行在确定2法的向度,但我改变方法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); 

    } 

感谢

回答

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

它;仍然否认。 cuz当我调试我看到caemra片段== 0 resultCode; (Toast =取消)。我认为我的问题在startActivityForResult和onActivityResult。 –

+0

@ AceAkatsuki..okay ...现在告诉我你的主要关注,以解决这个问题,或者你可以使用一些其他的代码,这将运行更高效,然后 –

+1

@AceAkatsuki ...我已经更新了我的答案,这肯定会帮助你 –