-3

when i open my image gallery in 19 API gallery is not seen but in 23API It shows gallery In android studio what is the issue please help.I have shared images for 19 api and 23 api. API19 gallery result API23 gallery result

    public class DocumentsFragment extends Fragment implements View.OnClickListener, DocumentImageEventListener {
    // TODO: Rename parameter arguments, choose names that match
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";

    // TODO: Rename and change types of parameters
    private String mParam1;
    private String mParam2;

    private OnFragmentInteractionListener mListener;
    FragmentDocumentsBinding fragmentDocumentsBinding;
    private int PICK_IMAGE_REQUEST = 1;
    private int PICK_VIDEO_REQUEST = 2;
    private int PICK_MULTIPLE_IMAGE_REQUEST = 3;
    CountDownTimer countDownTimer;
    int currentItemPosition = 0;
    private DocumentImagesAdapter documentImagesAdapter;

    public DocumentsFragment() {
        // Required empty public constructor
    }

    /**
     * Use this factory method to create a new instance of
     * this fragment using the provided parameters.
     *
     * @param param1 Parameter 1.
     * @param param2 Parameter 2.
     * @return A new instance of fragment DocumentsFragment.
     */
    // TODO: Rename and change types and number of parameters
    public static DocumentsFragment newInstance(String param1, String param2) {
        DocumentsFragment fragment = new DocumentsFragment();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        fragmentDocumentsBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_documents, container, false);
        ((AppCompatActivity) getActivity()).getSupportActionBar().setTitle("Media");
        setListeners();
        return fragmentDocumentsBinding.getRoot();
    }

    private void setListeners() {
        fragmentDocumentsBinding.selectPhoto.setOnClickListener(this);
        fragmentDocumentsBinding.selectVideo.setOnClickListener(this);

        fragmentDocumentsBinding.video.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                mp.setOnVideoSizeChangedListener(new MediaPlayer.OnVideoSizeChangedListener() {
                    @Override
                    public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
                /*
                 * add media controller
                 */
                        MediaController mc = new MediaController(getActivity());
                        fragmentDocumentsBinding.video.setMediaController(mc);
                /*
                 * and set its position on screen
                 */
                        mc.setAnchorView(fragmentDocumentsBinding.video);
                    }
                });
            }
        });
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

//        if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
//
//            Uri uri = data.getData();
//
//            try {
//                Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), uri);
//                // Log.d(TAG, String.valueOf(bitmap));
//
//                fragmentDocumentsBinding.image.setImageBitmap(bitmap);
//                fragmentDocumentsBinding.image.setVisibility(View.VISIBLE);
//                fragmentDocumentsBinding.video.setVisibility(View.GONE);
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//        }
        if (requestCode == PICK_MULTIPLE_IMAGE_REQUEST && resultCode == RESULT_OK && data != null) {
            ArrayList<Uri> images = new ArrayList<>();
            if (data.getClipData() != null) {
                try {
                    for (int i = 0; i < data.getClipData().getItemCount(); i++) {
                        Uri uri = data.getClipData().getItemAt(i).getUri();
//                    Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), uri);
                        images.add(uri);
                    }
                    startTimer(data.getClipData().getItemCount());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } else if (data.getData() != null) {
                images.add(data.getData());
            }
            documentImagesAdapter = new DocumentImagesAdapter(getActivity(), images, this);
            fragmentDocumentsBinding.imagePager.setAdapter(documentImagesAdapter);
            fragmentDocumentsBinding.circleIndicator.setViewPager(fragmentDocumentsBinding.imagePager);
//                fragmentDocumentsBinding.circleIndicator.setOnPageChangeListener(fragmentDocumentsBinding.imagePager);
//                fragmentDocumentsBinding.imagePager.setImageBitmap(bitmap);
            fragmentDocumentsBinding.imagePager.setVisibility(View.VISIBLE);
            fragmentDocumentsBinding.video.setVisibility(View.GONE);
            fragmentDocumentsBinding.noDataMessage.setVisibility(View.GONE);

        } else if (requestCode == PICK_VIDEO_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
            Uri selectedImageUri = data.getData();

            // OI FILE Manager
            String filemanagerstring = selectedImageUri.getPath();

            // MEDIA GALLERY
            String selectedImagePath = getRealPathFromURI(selectedImageUri);
            fragmentDocumentsBinding.video.setVideoPath(selectedImagePath);
            fragmentDocumentsBinding.imagePager.setVisibility(View.GONE);
            fragmentDocumentsBinding.video.setVisibility(View.VISIBLE);
            fragmentDocumentsBinding.video.start();
            fragmentDocumentsBinding.noDataMessage.setVisibility(View.GONE);
        }
    }

    void startTimer(final int itemCount) {
        long millisInFuture = (itemCount + 1) * 3000;
        countDownTimer = new CountDownTimer(millisInFuture, 3000) {
            @Override
            public void onTick(long l) {
                fragmentDocumentsBinding.circleIndicator.setCurrentItem(currentItemPosition++);
            }

            @Override
            public void onFinish() {
                currentItemPosition = 0;
                startTimer(itemCount);
            }
        }.start();
    }

//    public String getRealPathFromURI(Uri uri) {
//        String[] projection = {MediaStore.Video.Media.DATA};
//        Cursor cursor = getActivity().managedQuery(uri, projection, null, null, null);
//        if (cursor != null) {
//            // HERE YOU WILL GET A NULLPOINTER IF CURSOR IS NULL
//            // THIS CAN BE, IF YOU USED OI FILE MANAGER FOR PICKING THE MEDIA
//            int column_index = cursor
//                    .getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
//            cursor.moveToFirst();
//            return cursor.getString(column_index);
//        } else
//            return null;
//    }

    private String getRealPathFromURI(Uri contentURI) {
        // acquisition
        String[] projection = {
                MediaStore.Video.Media._ID,
                MediaStore.Video.Media.DISPLAY_NAME,
                MediaStore.Video.Media.DURATION,
                MediaStore.Video.Media.DATA
        };

        Cursor cursor = getActivity().getContentResolver().query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, projection, MediaStore.Video.Media._ID + "=" + contentURI.getLastPathSegment().split(":")[1], null, null);
        if (cursor == null) { // Source is Dropbox or other similar local file path
            return contentURI.getPath();
        } else {
            cursor.moveToFirst();
            int idx = cursor.getColumnIndex(MediaStore.Video.VideoColumns.DATA);
            return cursor.getString(idx);
        }
    }

    // TODO: Rename method, update argument and hook method into UI event
    public void onButtonPressed(Uri uri) {
        if (mListener != null) {
            mListener.onFragmentInteraction(uri);
        }
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof OnFragmentInteractionListener) {
            mListener = (OnFragmentInteractionListener) context;
        } else {
//            throw new RuntimeException(context.toString()
//                    + " must implement OnFragmentInteractionListener");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }

    @Override
    public void onClick(View view) {
        if (view == fragmentDocumentsBinding.selectPhoto) {
            currentItemPosition = 0;
            if (countDownTimer != null)
                countDownTimer.cancel();
            callGalleryForImage();
        } else if (view == fragmentDocumentsBinding.selectVideo) {
            currentItemPosition = 0;
            if (countDownTimer != null)
                countDownTimer.cancel();
            callGalleryForVideo();
        }
    }

    void callGalleryForImage() {
        Intent intent = new Intent();
// Show only images, no videos or anything else
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
// Always show the chooser (if there are multiple options available)
        startActivityForResult(Intent.createChooser(intent, "Select Pictures"), PICK_MULTIPLE_IMAGE_REQUEST);
    }

    void callGalleryForVideo() {

        Intent intent = new Intent();
// Show only images, no videos or anything else
        intent.setType("video/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
// Always show the chooser (if there are multiple options available)
        startActivityForResult(Intent.createChooser(intent, "Select Video"), PICK_VIDEO_REQUEST);
    }

    @Override
    public void onImageClick(View view, Uri uri) {
        Intent imageViewer = new Intent(getActivity(), ImageViewerActivity.class);
        imageViewer.putExtra("imageUri", uri.toString());
        startActivity(imageViewer);
    }

    /**
     * This interface must be implemented by activities that contain this
     * fragment to allow an interaction in this fragment to be communicated
     * to the activity and potentially other fragments contained in that
     * activity.
     * <p>
     * See the Android Training lesson <a href=
     * "http://developer.android.com/training/basics/fragments/communicating.html"
     * >Communicating with Other Fragments</a> for more information.
     */
    public interface OnFragmentInteractionListener {
        // TODO: Update argument type and name
        void onFragmentInteraction(Uri uri);
    }
}

1 Answers1

0

is there any permisson problem?

what is target api?

if target api >= 23 you should use runtime permission

https://developer.android.com/training/permissions/requesting.html

hugerde
  • 919
  • 1
  • 12
  • 27