-3

我需要从相机捕获图像,并且需要从片段内部完成。我的问题是,onActivityResult永远不会被调用。以下是我的代码:从片段中捕获图像

private void dispatchTakePictureIntent(){ 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    startActivityForResult(intent, REQUEST_IMAGE_CAPTURE); 
    } 



@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data){ 
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK) { 
    Bundle extras = data.getExtras(); 
    Bitmap imageBitmap = (Bitmap) extras.get("data"); 
    im.setImageBitmap(imageBitmap); 
    } 
    Log.e(TAG,"hello"); 
    super.onActivityResult(requestCode, resultCode, data); 
} 

我在这个论坛上查找过几个主题,但他们都没有为我工作。

+0

[onActivityResult For Fragment](http://stackoverflow.com/questions/20038880/onactivityresult-for-fragment) – Pankaj

回答

0

您还必须在onActivityResult中传递super.onActivityResult(requestCode, resultCode, data);

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data){ 
super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK) { 
    Bundle extras = data.getExtras(); 
    Bitmap imageBitmap = (Bitmap) extras.get("data"); 
    im.setImageBitmap(imageBitmap); 
    } 
    Log.e(TAG,"hello"); 
    super.onActivityResult(requestCode, resultCode, data); 
} 
0

你可以做类似下面调用它的片段首先将代码放在你的activityonActivityResult()方法从已创建fragment如下:

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     Fragment fragment = getSupportFragmentManager().findFragmentByTag("Your Fragment Tag"); 
     fragment.onActivityResult(requestCode, resultCode, data); 
    } 

现在,在您的片段只是把onActivityResult()方法,它会被称为

1

我试过这样的,这个工作对我来说

public class CameraPic extends Fragment { 

    private static final int CAPTURE_PICCODE = 989; 
    Button button; 
    ImageView imageView; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     final View rootView = inflater.inflate(R.layout.cameralayout, 
       container, false); 

     button = (Button) rootView.findViewById(R.id.button1); 
     imageView = (ImageView) rootView.findViewById(R.id.imageview1); 

     button.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       startActivityForResult(intent, 
         CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE); 

      } 
     }); 

     return rootView; 

    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) { 
      if (resultCode == Activity.RESULT_OK) { 

       Bitmap bmp = (Bitmap) data.getExtras().get("data"); 
       ByteArrayOutputStream stream = new ByteArrayOutputStream(); 

       bmp.compress(Bitmap.CompressFormat.PNG, 100, stream); 
       byte[] byteArray = stream.toByteArray(); 



       Bitmap bitmap = BitmapFactory.decodeByteArray(byteArray, 0, 
         byteArray.length); 

       imageView.setImageBitmap(bitmap); 

      } 
     }   
    }  
}