2017-09-27 28 views
0

カメラからの画像とギャラリーからファイアベースを保存する必要があります。ギャラリーからアップロードしている私のプロジェクトでは、カメラからアップロードしようとすると何も起こりません。ボタンをクリックするとギャラリーまたはカメラのいずれかを選択しました。写真を撮ったりギャラリーからイメージを選んだら、イメージビューで写真を撮る。次に保存をクリックし、ギャラリーからの写真がストレージに保存され、データベースに子を作成しますが、写真がカメラからのものであれば動作しません。この問題の解決方法はありますか?カメラの画像をファイアベースにアップロード

MainActivity.java

public class MainActivity extends AppCompatActivity { 
    private Uri mImageUri = null; 
    private Button btn,mSubmitBtn; 
    private ImageView imageview; 
    private int GALLERY = 1, CAMERA = 2; 

    private StorageReference mStorage; 
    private DatabaseReference mDatabase; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     btn = (Button) findViewById(R.id.btn); 
     mSubmitBtn = (Button)findViewById(R.id.submit); 
     imageview = (ImageView) findViewById(R.id.iv); 

     mStorage = FirebaseStorage.getInstance().getReference(); 
     mDatabase = FirebaseDatabase.getInstance().getReference().child("Upload"); 
     btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       showPictureDialog(); 
      } 
     }); 

     mSubmitBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       startPosting(); 
      } 
     }); 

    } 

    private void showPictureDialog(){ 
     AlertDialog.Builder pictureDialog = new AlertDialog.Builder(this); 
     pictureDialog.setTitle("Select Action"); 
     String[] pictureDialogItems = { 
       "Select photo from gallery", 
       "Capture photo from camera" }; 
     pictureDialog.setItems(pictureDialogItems, 
       new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         switch (which) { 
          case 0: 
           choosePhotoFromGallary(); 
           break; 
          case 1: 
           takePhotoFromCamera(); 
           break; 
         } 
        } 
       }); 
     pictureDialog.show(); 
    } 

    public void choosePhotoFromGallary() { 
     Intent galleryIntent = new Intent(Intent.ACTION_PICK, 
       android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 

     startActivityForResult(galleryIntent, GALLERY); 
    } 

    private void takePhotoFromCamera() { 
     Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
     startActivityForResult(intent, CAMERA); 
    } 

    //////////////////////////// 
    private void startPosting(){ 

     if (mImageUri !=null){ 

      StorageReference filepath = mStorage.child("Images").child(mImageUri.getLastPathSegment()); 


      filepath.putFile(mImageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
       @Override 
       public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 

        Uri downloadUrl = taskSnapshot.getDownloadUrl(); 

        DatabaseReference newPost = mDatabase.push();//push kreira uniq random id 


        newPost.child("image").setValue(downloadUrl.toString()); 

       } 
      }); 
     } 
    } 

    //////////////////////// 
    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 

     super.onActivityResult(requestCode, resultCode, data); 
     if (resultCode == this.RESULT_CANCELED) { 
      return; 
     } 
     if (requestCode == GALLERY) { 
      if (data != null) { 
       mImageUri = data.getData(); 
       imageview.setImageURI(mImageUri); 
      } 

     } else if (requestCode == CAMERA) { 
      Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); 
      imageview.setImageBitmap(thumbnail); 
      imageview.setImageURI(mImageUri); 

     } 
    } 


} 
+0

これはnaugat以上のアンドロイドバージョンで起こっていますか? –

+0

はい、ノーガット版 –

答えて

0

私は同じ問題に直面し、これは画像を直接ビットマップファイルを取得するよりも、クリックされたキットカットと下version.Whenにほとんどが起こるかは以下の方法でやろう、

Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); 
     ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
     thumbnail.compress(Bitmap.CompressFormat.JPEG, 90, bytes); 
     File destination = new File(Environment.getExternalStorageDirectory(), 
       System.currentTimeMillis() + ".jpg"); 
     FileOutputStream fo; 
     try { 
      destination.createNewFile(); 
      fo = new FileOutputStream(destination); 
      fo.write(bytes.toByteArray()); 
      fo.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     imageview.setImageBitmap(thumbnail); 

また、マニフェストファイルであなたもREAD_EXTERNAL

と一緒に以下の許可を宣言していることを確認してください

この問題の原因は、Android 4.4(KitKat)がSDカードのアクセス許可を変更したためです。そのため、SDカードに独自のディレクトリを作成して、アプリケーションが書き込む必要のあるすべてのファイルを処理することをお勧めします。これはすべての上位バージョンでも機能します。

これが役に立ちます。

関連する問題