【问题标题】:onActivityResult is not calling from tab fragmentonActivityResult 不是从选项卡片段调用
【发布时间】:2018-01-10 16:42:53
【问题描述】:

我在 MainActivity 中实现了 3 个选项卡。第一个选项卡是实现了 2 个按钮的图像片段。第一个是打开相机,第二个是打开画廊。我想在名为 Upload Activity 的新 Activity 中显示捕获或选择的图像。

图像片段

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    //  return inflater.inflate(R.layout.fragment_images, container, false);
    View v = inflater.inflate(R.layout.fragment_images, container, false);
    FloatingActionButton btnCamera = (FloatingActionButton) v.findViewById(R.id.btnCamera);
    FloatingActionButton btnFolder = (FloatingActionButton) v.findViewById(R.id.btnFolder);

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

            File imageFolder = new File(Environment.getExternalStorageDirectory(), "/My Children");
            imageFolder.mkdir();
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-mm-dd");
            String timestamp = simpleDateFormat.format(new Date());
            File image = new File(imageFolder, timestamp+ ".jpg");
            //    Uri uriImage = Uri.fromFile(image);
            Uri uriImage = FileProvider.getUriForFile(getActivity(), BuildConfig.APPLICATION_ID +  ".provider", image);
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, uriImage);
            getActivity().startActivityForResult(intent, TAKE_PICTURE);
        }
    });
    btnFolder.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent();
            intent.setType("image/*");
            intent.setAction(Intent.ACTION_GET_CONTENT);
            getActivity().startActivityForResult(intent, SELECT_PICTURE);
        }
    });
    return v;

}
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
 try {
if (requestCode == TAKE_PICTURE && resultCode == RESULT_OK) {
    Bundle extras = data.getExtras();
    Bitmap cam = (Bitmap) extras.get("data");
    Intent i = new Intent().setClass(getActivity(), Upload.class);
    i.putExtra("image", cam);
    startActivity(i);
}
if (requestCode == SELECT_PICTURE && requestCode == RESULT_OK) {
    Bitmap bitmap = (Bitmap) data.getExtras().get("data");
    Intent i = new Intent(getActivity(), Upload.class);
    i.putExtra("image", bitmap);
    startActivity(i);
}
}catch (Exception e){
e.printStackTrace();
}

也在MainActivity中添加了这段代码

 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Fragment page = getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.vp_pages + ":" + vp_pages.getCurrentItem() );
    if (page != null){
        page.onActivityResult(requestCode, resultCode, data);
    }
}

这是我要显示图片的上传类

public class Upload extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_upload);

    Button btnUpload = (Button) findViewById(R.id.btnUpload);

    ImageView imageview = (ImageView) findViewById(R.id.imageview);
    Intent intent = getIntent();
    Bitmap bitmap = (Bitmap) intent.getParcelableExtra("image");
    imageview.setImageBitmap(bitmap);
 }
 }

捕获或选择图像后,将打开图像片段而不是上传活动。

【问题讨论】:

    标签: android image android-fragments android-intent


    【解决方案1】:

    由于您是从图像片段启动相机或图库图像捕获,因此您只能从那里启动 Intent。

    但问题是当你设置

    intent.putExtra(MediaStore.EXTRA_OUTPUT, uriImage);
    

    onActivityResult 中的数据将为空,因为您已经给出了自己的 uri。 因此,对于相机请求,您可以通过全局存储来检查相机的 temp uri。

    Uri cameraUri;
    

    然后

    cameraUri = FileProvider.getUriForFile(getActivity(), BuildConfig.APPLICATION_ID +  ".provider", image);
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                intent.putExtra(MediaStore.EXTRA_OUTPUT, cameraUri);
                getActivity().startActivityForResult(intent, TAKE_PICTURE);
    

    此时 uri 指的是一些临时文件。相机只需单击并覆盖文件即可。

    所以现在得到如下结果。

    @Override
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
                    super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == TAKE_PICTURE && resultCode == RESULT_OK) {
             Intent i = new Intent().setClass(getActivity(), Upload.class);
             //here pass the original uri that we stored while starting camera
             i.putExtra("image", cameraUri.toString());
             startActivity(i);
          }
          if (requestCode == SELECT_PICTURE && requestCode == RESULT_OK) {
             Intent i = new Intent(getActivity(), Upload.class);
             //this will return you data in case of open gallery
             i.putExtra("image", data.getData().toString());
             startActivity(i);
         }
        }
    

    现在在另一个活动中接收并显示

    public class Upload extends AppCompatActivity {
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_upload);
    
        Button btnUpload = (Button) findViewById(R.id.btnUpload);
    
        ImageView imageview = (ImageView) findViewById(R.id.imageview);
        Intent intent = getIntent();
        if(intent==null){
         return;
        }
        Uri imageUri = Uri.parse(intent.getStringExtra("image"));
        imageview.setImageURI(imageUri);
     }
     }
    

    【讨论】:

    • Thanxx 兄弟.. 它工作正常。现在我需要一点帮助。我编写了将此图像上传到服务器的代码,但它是用于位图的,现在我们正在使用 Uri。所以请给我一点提示,我如何使用 volley 上传?
    • 我想从显示图片的上传活动中上传,如果用户想要上传,则有一个按钮。
    • 你有 uri 只需使用 uri 创建一个文件并上传它。 stackoverflow.com/questions/2975197/…
    猜你喜欢
    • 1970-01-01
    • 2015-11-16
    • 2019-12-05
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多