[英]when i open my image gallery in 19 API gallery is not seen but in 23API It shows gallery In android studio?
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.当我在 19 API 画廊中打开我的图片库时没有看到,但在 23API 中它显示了画廊在 android studio 中是什么问题请帮忙。我已经共享了 19 api 和 23 api 的图像。 API19 gallery result API23 gallery result API19 画廊结果API23 画廊结果
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);
}
}
is there any permisson problem?有任何权限问题吗?
what is target api?什么是目标api?
if target api >= 23 you should use runtime permission如果目标 api >= 23 你应该使用运行时权限
https://developer.android.com/training/permissions/requesting.html https://developer.android.com/training/permissions/requesting.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.