У меня есть приложение, в котором я выбираю изображение из камеры, используя намерение «Intent takePhotoIntent = new Intent (MediaStore.ACTION_IMAGE_CAPTURE);»
На большинстве устройств работает, но на моем Samsung Galaxy view 18,4 (Android 5.1.1) работать не будет. OnActivityResult вызывается с кодом результата -1 (RESULT_CANCELED), и я вижу, что изображение размещено правильно там, где я ожидал, но поскольку действие отменено, приложение перезапускается и приложение перестает работать. Если бы был способ не перезапускать приложение после вызова onActivityResult, я мог бы позволить ему работать, но перезапуск приложения приводил к сбою приложения.
В моем основном приложении:
private static final int PICK_IMAGE_ID1 = 234; // the number doesn't matter
public void onPickImage(View view) {
//// MODEL=getModel(4);
PicView=view;
layoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
Intent chooseImageIntent = com.npwithgrap.ImagePicker.getPickImageIntent(context);
startActivityForResult(chooseImageIntent, PICK_IMAGE_ID1);
}
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
String fejl="";
if(resultCode != RESULT_CANCELED)
{
fejl ="error";
}
switch (requestCode)
{
case PICK_IMAGE_ID1:
// MODEL = getModel(4);
bitmap = com.npwithgrap.ImagePicker.getImageFromResult(this, resultCode, data);
imageManager.showImage(bitmap);
searchTitel.np.AtRes(bitmap,CV); //call to a place where the bitmap is used
break;
default:
super.onActivityResult(requestCode, resultCode, data);
break;
}
}
В ImagePicker:
public class ImagePicker {
private static final int DEFAULT_MIN_WIDTH_QUALITY = 1100; // min pixels
private static final String TAG = "ImagePicker";
private static final String TEMP_IMAGE_NAME = "tempImage";
private static final int [] picsize={2100,2970};
public static int minWidthQuality = DEFAULT_MIN_WIDTH_QUALITY;
public static Intent getPickImageIntent(Context context)
{
Intent chooserIntent = null;
Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
takePhotoIntent.putExtra("return-data", true);
takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(getTempFile(context)));
takePhotoIntent.putExtra(MediaStore.EXTRA_SIZE_LIMIT,picsize);
chooserIntent = Intent.createChooser(takePhotoIntent, "NodeProgram Grap Billede");
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentList.toArray(new Parcelable[]{}));
}
return chooserIntent;
}
public static File getTempFile(Context context)
{
File imageFile = new File(context.getExternalCacheDir(), TEMP_IMAGE_NAME);
imageFile.getParentFile().mkdirs();
return imageFile;
}
// getImageFromResult is for use also if it not was for Camera)
public static Bitmap getImageFromResult(Context context, int resultCode, Intent imageReturnedIntent)
{
Log.d(TAG, "getImageFromResult, resultCode: " + resultCode);
Bitmap bm = null;
File imageFile = getTempFile(context);
if (resultCode == Activity.RESULT_OK)
{
Uri selectedImage;
boolean isCamera = (imageReturnedIntent == null || imageReturnedIntent.getData() == null || imageReturnedIntent.getData().equals(Uri.fromFile(imageFile)));
if (isCamera)
{ /** CAMERA **/
selectedImage = Uri.fromFile(imageFile);
}
else
{ /** ALBUM **/
selectedImage = imageReturnedIntent.getData();
}
Log.d(TAG, "selectedImage: " + selectedImage);
bm = getImageResized(context, selectedImage);
// int rotation = getRotation(context, selectedImage, isCamera);
int rotation=0;
if(bm.getWidth()>bm.getHeight())
rotation=90;
bm = rotate(bm, rotation);
}
return bm;
}