4

I know this question has been answered many a times in stack overflow but none of the solutions worked for me. I need to choose a pdf file from the device. The startActivityResult() gets called, I am able to choose a pdf file but then the onActivityResult is never called. The strange thing is it was working before perfectly but suddenly it is no more responding.

MainActivity.java

@Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            for (Fragment fragment : getSupportFragmentManager().getFragments()) {
                fragment.onActivityResult(requestCode, resultCode, data);
            }
        }

Fragment.java

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
         if (requestCode == PICKFILE_REQUEST_CODE && resultCode == Activity.RESULT_OK && data != null && data.getData() != null )

//do something

        }

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        ConnectivityManager CM = (ConnectivityManager) getActivity().getSystemService(CONNECTIVITY_SERVICE);
        NetworkInfo ninfo = CM.getActiveNetworkInfo();

        if (item.getItemId() == R.id.upload_prax && ninfo!=null && ninfo.isConnected() ) {

            if (permissionexternal == PackageManager.PERMISSION_GRANTED) {
            Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
            intent.setType("*/pdf");
            fragment.startActivityForResult(intent, PICKFILE_REQUEST_CODE);
        } 
digital_pro
  • 183
  • 2
  • 13

3 Answers3

3

In your fragment, use

startActivityForResult(intent, PICKFILE_REQUEST_CODE);

And you don't need to add onActivityResult() for your activity . Just remove

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        for (Fragment fragment : getSupportFragmentManager().getFragments()) {
            fragment.onActivityResult(requestCode, resultCode, data);
        }
    }

and in your fragment,

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
         if (requestCode == PICKFILE_REQUEST_CODE && resultCode == Activity.RESULT_OK && data != null && data.getData() != null )
             //do something
           }

         Toast.makeText(getActivity(), "On Activity Result Called", Toast.LENGTH_SHORT).show();
          // add toast to check whether it is working or not

 }
piet.t
  • 11,718
  • 21
  • 43
  • 52
Jyoti JK
  • 2,141
  • 1
  • 17
  • 40
0

Request which you made in fragment. Response of that request you can retrieve in activity which you set the fragment.

@Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
             if (requestCode == PICKFILE_REQUEST_CODE && resultCode == Activity.RESULT_OK && data != null && data.getData() != null )

    //do something

            }

this code should be in parent activity of fragment.

patel dhaval r
  • 1,237
  • 1
  • 8
  • 17
0

Try this in activity

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        for (Fragment fragment : getSupportFragmentManager().getFragments()) {
            if (fragment != null) {
                switch (fragment.getTag()) {
                    case "Set your fragment name":
                        int PICKFILE_REQUEST_CODE  = 138;
                        fragment.onActivityResult(PICK_IMAGE_SINGLE_MULTI, resultCode, data);
                        break;
                }
            }
        }
Siddharth Patel
  • 205
  • 1
  • 13