当我在19 API库中打开我的图库时,没有看到但在23API它显示画廊在Android工作室?

时间:2017-01-19 14:37:44

标签: android image-gallery android-api-levels

当我在19 API画廊中打开我的图库时没有看到但在23API它显示画廊在android工作室有什么问题请帮助。我有19 api和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 个答案:

答案 0 :(得分:0)

有任何许可问题吗?

什么是目标api?

如果目标api> = 23,则应使用运行时权限

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