2016-12-28 63 views
0

我試圖捕獲圖像並將其上傳到Firebase。 問題是我在onActivityResult中從data.getData()變爲null。無法從data.getData獲取Uri

我看着網絡,在這種情況下找不到任何適合我的東西。

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... } 

我無法發送到URI,因爲我對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

我使用華爲MediaPad 10.1鏈接 – gabibrk

回答

1

如果您使用的是標準的Android相機應用程序,你應該通過URI在您想要的照片存儲爲一個額外的意圖是這樣的:

Uri outputFileUri = Uri.fromFile(YOUR_FILE); 

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
intent(MediaStore.EXTRA_OUTPUT, outputFileUri);