2015-12-02 12 views
1

Я пытаюсь использовать камеру для съемки в своем приложении, а затем обрезать полученные изображения.Android Jelly bean camera return null URI

Все работает для последних версий для Android, но не для Android Kitkat 4.4.2.

Камера возвращает нулевой URI.

получить URI onActivityReslult:

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == CAMERA_CODE && resultCode == RESULT_OK) { 
      Bundle extras = data.getExtras(); 
      Bitmap imageBitmap = (Bitmap) extras.get("data"); 

      picUri = data.getData(); 
      Intent i = new Intent(PublierActivity.this, CropActivity.class); 
      i.putExtra("Uri", picUri); 
      startActivityForResult(i, CROP_CODE); 

     } 

Вот как я называю намерение камеры:

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       if (takePictureIntent.resolveActivity(getPackageManager()) != null) { 
        startActivityForResult(takePictureIntent, CAMERA_CODE); 
       } 

есть ли способ, чтобы сделать исключение для старых версий для андроида, чтобы решить эту проблему?

ответ

1

Из вашего кода, похоже, вы пытаетесь использовать ACTION_IMAGE_CAPTURE. В этом случае должно быть никогда не должно быть Uridata.getData() должно всегда возвращаться null. Если приложение для камеры будет возвращено Uri, то может быть быть изображением, но с ACTION_IMAGE_CAPTURE не задокументировано, чтобы вернуть Uri, у вас нет способа узнать, для чего это Uri.

Если вы используете EXTRA_OUTPUT на ACTION_IMAGE_CAPTUREIntent, вы знаете, где должно храниться изображение, потому что вы сказали приложению камеры, где его хранить. Обратите внимание, что некоторые приложения для камеры работают неправильно и не могут оценить EXTRA_OUTPUT, помещая изображение туда, где они хотят.

Если вы не используете EXTRA_OUTPUT, тогда вы получите эскиз назад в "data" дополнительных.

Кроме того, помните, что это не имеет ничего общего с версией ОС Android и всем, что связано с приложением камеры, которое пользователь хочет использовать. Есть тысячи моделей устройств Android. Эти корабли с дюжинами, если не сотнями, разных предустановленных приложений для камер. Пользователь может также выбрать установку стороннего приложения для камеры. Любой из них может обрабатывать ваш запрос.