2016-12-28 4 views
0

Я пытаюсь захватить изображение и загрузить его в Firebase. Проблема в том, что я получаю null от data.getData() в onActivityResult.Не удается получить Uri из data.getData()

Я посмотрел на Интернет и не нашел ничего, что сработало бы для меня в этом случае.

public void onClick(View v) { 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    startActivityForResult(intent, CAMERA_REQUEST_CODE); 
} 

это onActivityResult:

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
super.onActivityResult(requestCode, resultCode, data); 
Uri uri = data.getData(); 
StorageReference filePath = storageRef.child("labelPhoto").child(uri.getLastPathSegment()) 
filePath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
       @Override 
       public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
....rest of the code... } 

Я не могу отправить Ури, так как я получаю нуль на data.geData();

Я пытался несколько решений, таких как сохранение изображения в формате BMP и получить этот URI:

Bitmap bitmap= (Bitmap)data.getExtras().get("data"); 
      captureImage.setImageBitmap(bitmap); 
String mPath = Environment.getExternalStorageDirectory().toString() + "/Pictures/" + picName + ".jpg"; 
      File imageFile = new File(mPath); 
      FileOutputStream outputStream = null; 


      try { 
       outputStream = new FileOutputStream(imageFile); 
       bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream); 
       outputStream.flush(); 
       outputStream.close(); 
       String temp = Environment.getExternalStorageDirectory().getPath() + "/Pictures/"; 
       uri= Uri.fromFile(imageFile); 
       Log.d("TAG", uri.toString()); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
       java.net.URI javaUri = java.net.URI.create(uri.toString()); 
       android.net.Uri androidUri = android.net.Uri.parse(uri.toString()); 
       StorageReference filePath = storageRef.child("labelPhoto").child(androidUri.toString()); 
filePath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 

        @Override 
        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
....rest of the code...} 

добавить чеки, как:

if(resultCode != RESULT_CANCELED){ 

и

if(data!=null) 

манифесте :

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.CAMERA"/> 
<uses-feature android:name="android.hardware.camera" /> 

Без успеха. У кого-нибудь есть идея?

+0

, какой телефон и какая операционная система yoiu используется? – Godwin

+0

'ACTION_IMAGE_CAPTURE' не возвращает' Uri'. – CommonsWare

+0

Я использую Huawei MediaPad 10.1 Link – gabibrk

ответ

1

Если вы используете стандартные приложения Android камеры, вы должны передать URI, где вы хотите, чтобы фотография храниться как умысел EXTRA, как это:

Uri outputFileUri = Uri.fromFile(YOUR_FILE); 

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
intent(MediaStore.EXTRA_OUTPUT, outputFileUri); 
Смежные вопросы