2016-03-31 4 views
0

Я разрабатываю приложение для Android и мое приложение имеет кнопку для съемки камеры. Раньше я попал в состояние, в котором возвращались данные в onActivityResult после снятия картинки null. Это ожидаемое поведение камеры, в результате чего, если мы поместим EXTRA_OUTPUT в намерение, оно вернет null. По этой причине я сделал нулевой код проверки, и все прошло отлично.Android-камера возвращается с пустой целью

Теперь снова через несколько дней, и я тестировал. Я все еще попал в одну и ту же проблему. Но на этот раз data не null. data имеет пустые намерения, такие как intent и data.getData(). null. Я установил это, проверив data.getData() == null, и он снова работает. Я не понимаю, почему это так. Просто интересно, что происходит. По этой причине мне приходится снова загружать на производство. :-(

//camera intent 
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
takePictureIntent.putExtra("requestCode", Constants.REQUEST_IMAGE_CAPTURE); 

Intent chooseImageIntent = new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
chooseImageIntent.setType("image/* video/*"); 
chooseImageIntent.putExtra(Intent.EXTRA_LOCAL_ONLY, true); 
chooseImageIntent.putExtra("requestCode", Constants.REQUEST_CHOOSE_FROM); 

//app can use camera 
if (takePictureIntent.resolveActivity(mContext.getPackageManager()) != null) { 
    //add output file path which camera will save image to 
    takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Helpers.getOutputMediaFileUri()); 
    //create choose 
    Intent chooser = Intent.createChooser(chooseImageIntent, "Select From"); 
    //add take camera intent as first intent 
    chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS,new Intent[]{takePictureIntent}); 
    //open up dialog 
    ((Activity) mContext).startActivityForResult(chooser, Constants.REQUEST_CHOOSE_FROM); 
} else { 
    ((Activity) mContext).startActivityForResult(chooseImageIntent, Constants.REQUEST_IMAGE_GALLERY); 
} 

EDITED

Я знаю, что я, как решить эту проблему. Что я не понимаю, вернуть data должен быть null если я ставлю в EXTRA_OUTPUT. В основном важно код, который я реализовал несколько недель назад, я вполне уверен, что data возвращает null, и внезапно это значение не равно null.

+0

Не используйте 'data.getData()', вместо этого используйте 'data.getExtras(). Get (" data ");', См., Если проблема снова возникает. –

+0

Причина, по которой я не использую 'data.getExtras()' is cuz, если я передаю extra_output в намерении, 'data' становятся' null'. Это факт, если я не ошибаюсь – Sanny

ответ

0
Actually the camera intent doesnot return the data in intent because after getting image it kill the activity. 

so try this 


void opencameraForPicture(int requestCode, Uri fileUri) { 
     checkPermissionForMarshMello(Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE); 


     Intent intent = new Intent(Constants.CAMERA_INTERNAL_CLASS); 

     intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 
     /* start activity for result pass intent as argument and request code */ 
     startActivityForResult(intent, requestCode); 

    } 

    /** 
    * This method set the path for the captured image from camera for adding 
    * the new picture in the list 
    */ 
    private Uri getOutputMediaFile() { 

     File mediaStorageDir = new File(
       Environment.getExternalStorageDirectory(), "." 
       + Constants.CONTAINER); 

     // Create the storage directory if it does not exist 
     if (!mediaStorageDir.exists()) { 
      mediaStorageDir.mkdirs(); 
     } 

     File mediaFile = new File(mediaStorageDir.getPath() + File.separator 
       + "IMG_" + System.currentTimeMillis() + ".png"); 
     Uri uri = null; 
     if (mediaFile != null) { 
      uri = Uri.fromFile(mediaFile); 

     } 
     return uri; 
    } 

in @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

     super.onActivityResult(requestCode, resultCode, data); 

String imagePath = fileUri.getPath(); 

//you can decode this path as bitmap 

} 
+0

Спасибо за ответ @Rohit, но я не вижу никакой разницы с моим кодом. Можете ли вы указать, почему возвращаемые данные 'намерения' внезапно становятся ненулевыми? – Sanny

Смежные вопросы