내 전체 코드 읽기. Marshmallow
및 Lollipop
을 제외한 모든 전화에서 완벽하게 작동합니다. Marshmallow
및 Lollipop
전화에서만 문제가 발생합니다 data.getData()
null
의 경우에만 의 경우에만 캡처 됨. 갤러리에서 사진을 선택onActivityResult가 인 텐트를 반환 함 data.getData(); 마시멜로와 롤리팝에서만 항상 널입니다.
및
Imageview
에서의 썸네일 표시 - - 작동 미세 조정을 내가 비디오 .I를 캡처 할 경우 4 케이스가 잘 작동된다.Marshmallow
및Lollipop
에 작동하지 -- 카메라에서
캡처 사진 및
Imageview
은 그것의 축소판을 보여줍니다. 갤러리에서 비디오를 선택하고 섬네일을
Imageview
- Working Fine에 표시하십시오.3. 카메라에서 비디오를 캡처하고 섬네일을
Imageview
- Working Fine으로 표시하십시오.
지금 많은 솔루션이 있지만 코드가 왜 이미지 캡처 작동하지 자사의 비디오 캡처의 경우에는 벌금을 작동하면 그 중 어느 것도 만족스러운 모습? 그것은 버그인가, 아니면 내가 잘못 어딘가에하고 있는가?
여기가 내 코드입니다. 충돌 그것은 산들을 제외한 모든 전화에 완벽하게 작동하고 롤리팝있다 적 있었
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
int THUMBSIZE = 120;
switch (requestCode){
case RESULT_LOAD_IMAGE:
if (resultCode==RESULT_OK){
String column_Name= MediaStore.Images.Media.DATA;
String picturePath=getPath(column_Name,data.getData());
Bitmap orientedBitmap = ExifUtil.rotateBitmap(picturePath, BitmapFactory.decodeFile(picturePath));
Drawable fullpic=new BitmapDrawable(getResources(),ThumbnailUtils.extractThumbnail(orientedBitmap, THUMBSIZE, THUMBSIZE));
thumbnailview.setBackground(fullpic);
editText.setText(picturePath);
picker.setVisibility(View.VISIBLE);
thumbnailview.setClickable(false);
}
break;
case REQUEST_IMAGE_CAPTURE:
if (resultCode==RESULT_OK){
String picturePath="";
String column_Name=MediaStore.Images.Media.DATA;
picturePath=getPath(column_Name,data.getData());
//My app Crashes here because in Marshmallow data.getData() is always null.
Bitmap orientedBitmap = ExifUtil.rotateBitmap(picturePath, BitmapFactory.decodeFile(picturePath));
Drawable fullpic=new BitmapDrawable(getResources(),ThumbnailUtils.extractThumbnail(orientedBitmap, THUMBSIZE, THUMBSIZE));
thumbnailview.setBackground(fullpic);
editText.setText(picturePath);
picker.setVisibility(View.VISIBLE);
thumbnailview.setClickable(false);
}
break;
case RESULT_LOAD_VIDEO:
if (resultCode==RESULT_OK){
String column_Name=MediaStore.Video.Media.DATA;
String videoPath=getPath(column_Name,data.getData());
Drawable fullpic=new BitmapDrawable(getResources(),ThumbnailUtils.createVideoThumbnail(videoPath,MediaStore.Video.Thumbnails.MINI_KIND));
thumbnailview.setBackground(fullpic);
editText.setText(videoPath);
picker.setVisibility(View.VISIBLE);
thumbnailview.setClickable(false);
}
break;
case REQUEST_VIDEO_CAPTURE:
if (resultCode==RESULT_OK){
String column_Name=MediaStore.Video.Media.DATA;
String videoPath=getPath(column_Name,data.getData());
Drawable fullpic=new BitmapDrawable(getResources(),ThumbnailUtils.createVideoThumbnail(videoPath,MediaStore.Video.Thumbnails.MINI_KIND));
thumbnailview.setBackground(fullpic);
editText.setText(videoPath);
picker.setVisibility(View.VISIBLE);
thumbnailview.setClickable(false);
}
break;
}
if (picker != null) {
picker.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
OpenDialog();
}
});
}
}
private String getPath(String column_Name,Uri uri){
String[] projection = {column_Name};
String path = "";
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
int column_index_data ;
if (cursor != null) {
column_index_data = cursor.getColumnIndexOrThrow(column_Name);
cursor.moveToFirst();
path = cursor.getString(column_index_data);
cursor.close();
}
return path;
}
private void OpenDialog(){
dialogBox.setTitle("Select an Action");
dialogBox.setMessage("Choose Picture or Video");
dialogBox.setPositiveButton("Picture", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (check_Permissions()){
OpenCameraDialog();
}
else {
request_Permissions();
CAMERA_DIALOG_PERMISSION=1;
}
}
});
dialogBox.setNegativeButton("Video", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (check_Permissions()){
OpenVideoDialog();
}
else {
request_Permissions();
VIDEO_DIALOG_PERMISSION=1;
}
}
});
dialogBox.show();
}
private void OpenCameraDialog(){
dialogBox.setTitle("Select an Action");
dialogBox.setMessage("Choose Picture From");
dialogBox.setPositiveButton("Gallery", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
final Intent galleryintent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(galleryintent, RESULT_LOAD_IMAGE);
}
});
dialogBox.setNegativeButton("Camera", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
final Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
});
dialogBox.show();
}
private void OpenVideoDialog(){
dialogBox.setTitle("Select an Action");
dialogBox.setMessage("Choose Video From");
dialogBox.setPositiveButton("Gallery", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
final Intent galleryintent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Video.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(galleryintent, RESULT_LOAD_VIDEO);
}
});
dialogBox.setNegativeButton("Camera", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
final Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
if (takeVideoIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE);
}
}
});
dialogBox.show();
}
private boolean check_Permissions(){
boolean GRANTED;
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) +
ContextCompat.checkSelfPermission(this,Manifest.permission.READ_EXTERNAL_STORAGE) +
ContextCompat.checkSelfPermission(this,Manifest.permission.RECORD_AUDIO) +
ContextCompat.checkSelfPermission(this,Manifest.permission.CAMERA)!= PackageManager.PERMISSION_GRANTED){
GRANTED=false;
}
else {
GRANTED=true;
}
return GRANTED;
}
private void request_Permissions(){
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.CAMERA,Manifest.permission.RECORD_AUDIO},
REQUEST_FOR_PERMISSION);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode){
case REQUEST_FOR_PERMISSION:
if ((grantResults.length>0)&& (grantResults[0] +grantResults[1]+grantResults[2]+grantResults[3]== PackageManager.PERMISSION_GRANTED)){
if (CAMERA_DIALOG_PERMISSION==1){
OpenCameraDialog();
CAMERA_DIALOG_PERMISSION=0;
}
else if (VIDEO_DIALOG_PERMISSION==1){
OpenVideoDialog();
VIDEO_DIALOG_PERMISSION=0;
}
}
else {
Toast.makeText(this, "Please GRANT Permissions", Toast.LENGTH_SHORT).show();
}
}
}
지금보기 나는 내가 만약 다른 사용하고 있지 않다 내 코드를 업데이트 한 .. 내가 잘못 죄송 게시 –
EXTRA OUTPUT과 함께 putExtra에서 무엇을 전달해야합니까? @CommonsWare –
@KarandeepAtwal : 이상적으로는'ContentProvider'에 의해 지원되는'Uri'를 사용하십시오. 'file :''Uri'를 사용할 수는 있지만 Android 7.0+에서는 targetSdkVersion이 24+ 이상에서는 작동하지 않습니다. 예제는 [이 샘플 프로젝트] (https://github.com/commonsguy/cw-omnibus/tree/master/Camera/FileProvider)를 참조하십시오. – CommonsWare