0
votes

in my fragment I select photo from gallery

in Manifest.xml

   <uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_GPS"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.GET_TASKS"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

beforе this my app show permission dialog. I press Allow

enter image description here

public class EditProfileFragment extends androidx.fragment.app.Fragment {
 private void choosePhotoFromGallery() {
        Intent photoPickerIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        photoPickerIntent.setType("image/*");
        startActivityForResult(photoPickerIntent, SELECT_PHOTO);
}

but method

 @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (BuildConfig.DEBUG)
            Log.d(TAG, "onActivityResult_requestCode = " + requestCode + ", resultCode = " + resultCode + ", data = "
                    + AndroidUtil.intent2String(data));

not call in Fragment after return to my app

Not print text : onActivityResult_requestCode

But method onActivityResult(int requestCode, int resultCode, Intent data) call in Activity. But I need to call this method in fragment.

here request permission dialog:

  private boolean checkAndRequestPermissions() {
        int writeExternalStorage = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE);
        int readExternalStorage = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE);
        int camera = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA);
        List<String> listPermissionsNeeded = new ArrayList<>();
        if (writeExternalStorage != PackageManager.PERMISSION_GRANTED) {
            listPermissionsNeeded.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
        }
        if (readExternalStorage != PackageManager.PERMISSION_GRANTED) {
            listPermissionsNeeded.add(Manifest.permission.READ_EXTERNAL_STORAGE);
        }
        if (camera != PackageManager.PERMISSION_GRANTED) {
            listPermissionsNeeded.add(Manifest.permission.CAMERA);
        }
        if (BuildConfig.DEBUG)
            Log.d(TAG, "checkAndRequestPermissions_listPermissionsNeeded(" + listPermissionsNeeded.size() + ")");
        if (!listPermissionsNeeded.isEmpty()) {
            if (BuildConfig.DEBUG)
                Log.d(TAG, "checkAndRequestPermissions_REQUEST_WRITE_EXTERNAL_STORAGE_REQ_CODE");
            ActivityCompat.requestPermissions(getActivity(), listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()])
                    , WRITE_EXTERNAL_STORAGE_REQ_CODE);
            return false;
        }
        return true;
    }
2
Did you specified these permissions in manifest and read external storage?? - Shivam Oberoi
Yes, I updated my post - Alex
put log and check any exception is occurred. - APP
put permission read external storage in manifest... - Shivam Oberoi
are you using fragment? from where choosePhotoFromGallery() is called - APP

2 Answers

5
votes

put this in your Activity on Activity Result

   Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.frameLayout);
        fragment.onActivityResult(requestCode, resultCode, data);

what it will do is to call the fragment onActivityResult of your fragment. So you will have selection data in your fragment

Inside Fragment Start Activity For Result

getActivity().startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);


Now in Activity

   @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.frameLayout);
        fragment.onActivityResult(requestCode, resultCode, data);
    }

Inside Fragment

 @Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        //  super.onActivityResult(requestCode, resultCode, data);
        Log.d(TAG, "Activit Result");
        if (resultCode == -1) {
        }
}

Hoping that will help

1
votes

Since you are calling from fragment then try this

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.your_tag);
    fragment.onActivityResult(requestCode, resultCode, data);
}