2016-07-21 2 views
0

Захват изображения с камеры и Выберите изображение из галереи телефона Android с помощью Android Studio

package com.sourcey.materiallogindemo; 
 

 
import android.content.DialogInterface; 
 
import android.content.Intent; 
 
import android.database.Cursor; 
 
import android.graphics.Bitmap; 
 
import android.graphics.BitmapFactory; 
 
import android.net.Uri; 
 
import android.os.Environment; 
 
import android.provider.MediaStore; 
 
import android.support.v7.app.AlertDialog; 
 
import android.support.v7.app.AppCompatActivity; 
 
import android.os.Bundle; 
 
import android.util.Log; 
 
import android.view.Menu; 
 
import android.view.View; 
 
import android.widget.Button; 
 
import android.widget.ImageView; 
 

 
import java.io.File; 
 
import java.io.FileNotFoundException; 
 
import java.io.FileOutputStream; 
 
import java.io.IOException; 
 
import java.io.OutputStream; 
 

 
public class Profile extends AppCompatActivity { 
 

 
    ImageView viewImage; 
 
    Button b; 
 

 
    @Override 
 
    protected void onCreate(Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 
     setContentView(R.layout.activity_profile); 
 
     b=(Button)findViewById(R.id.btnSelectPhoto); 
 
     viewImage=(ImageView)findViewById(R.id.viewImage); 
 
     b.setOnClickListener(new View.OnClickListener() { 
 
      @Override 
 
      public void onClick(View v) { 
 
       selectImage(); 
 
      } 
 
     }); 
 
    } 
 

 

 

 
    private void selectImage() { 
 

 
     final CharSequence[] options = { "Take Photo", "Choose from Gallery","Cancel" }; 
 

 
     AlertDialog.Builder builder = new AlertDialog.Builder(Profile.this); 
 
     builder.setTitle("Add Photo!"); 
 
     builder.setItems(options, new DialogInterface.OnClickListener() { 
 
      @Override 
 
      public void onClick(DialogInterface dialog, int item) { 
 
       //boolean result=Utility.checkPermission(Profile.this); 
 
       if (options[item].equals("Take Photo")) 
 
       { 
 

 

 
        // startActivityForResult(intent, REQUEST_CAMERA); 
 
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
 
        File f = new File(android.os.Environment.getExternalStorageDirectory(), "temp.jpg"); 
 
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f)); 
 
        startActivityForResult(intent,1); 
 
       } 
 
       else if (options[item].equals("Choose from Gallery")) 
 
       { 
 
        Intent intent = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
 
        startActivityForResult(intent, 2); 
 

 
       } 
 
       else if (options[item].equals("Cancel")) { 
 
        dialog.dismiss(); 
 
       } 
 
      } 
 
     }); 
 
     builder.show(); 
 
    } 
 

 
    @Override 
 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
 
     super.onActivityResult(requestCode, resultCode, data); 
 
     if (resultCode == RESULT_OK) { 
 
      if (requestCode == 1) { 
 
       File f = new File(Environment.getExternalStorageDirectory().toString()); 
 
       for (File temp : f.listFiles()) { 
 
        if (temp.getName().equals("temp.jpg")) { 
 
         f = temp; 
 
         break; 
 
        } 
 
       } 
 
       try { 
 
        Bitmap bitmap; 
 
        BitmapFactory.Options bitmapOptions = new BitmapFactory.Options(); 
 

 
        bitmap = BitmapFactory.decodeFile(f.getAbsolutePath(), 
 
          bitmapOptions); 
 

 
        viewImage.setImageBitmap(bitmap); 
 

 
        String path = android.os.Environment 
 
          .getExternalStorageDirectory() 
 
          + File.separator 
 
          + "Phoenix" + File.separator + "default"; 
 
        f.delete(); 
 
        OutputStream outFile = null; 
 
        File file = new File(path, String.valueOf(System.currentTimeMillis()) + ".jpg"); 
 
        try { 
 
         outFile = new FileOutputStream(file); 
 
         bitmap.compress(Bitmap.CompressFormat.JPEG, 85, outFile); 
 
         outFile.flush(); 
 
         outFile.close(); 
 
        } catch (FileNotFoundException e) { 
 
         e.printStackTrace(); 
 
        } catch (IOException e) { 
 
         e.printStackTrace(); 
 
        } catch (Exception e) { 
 
         e.printStackTrace(); 
 
        } 
 
       } catch (Exception e) { 
 
        e.printStackTrace(); 
 
       } 
 
      } else if (requestCode == 2) { 
 

 
       Uri selectedImage = data.getData(); 
 
       String[] filePath = { MediaStore.Images.Media.DATA }; 
 
       Cursor c = getContentResolver().query(selectedImage,filePath, null, null, null); 
 
       c.moveToFirst(); 
 
       int columnIndex = c.getColumnIndex(filePath[0]); 
 
       String picturePath = c.getString(columnIndex); 
 
       c.close(); 
 
       Bitmap thumbnail = (BitmapFactory.decodeFile(picturePath)); 
 
       Log.w("path of image from gallery......******************.........", picturePath+""); 
 
       viewImage.setImageBitmap(thumbnail); 
 
      } 
 
     } 
 
    } 
 
}

Я новичок в android.In мое приложение, мне нужно настроить изображение с камеры или галереи, так что я использовал это код (упоминается). вариант галереи работает нормально, но когда я выбираю камеру, приложение, к сожалению, останавливается, пожалуйста, помогите исправить его, и я также сохраню изображение в галерее, которое было снято камерой.

+0

whats your targetSdk? – Nisarg

+0

ссылка ссылка https://github.com/coomar2841/image-chooser-library – iAndroid

+0

Проверьте это [Ответ] (http://stackoverflow.com/questions/5991319/capture-image-from-camera-and-display-in -Мероприятия). Надеюсь, это поможет вам. –

ответ

0

Если у вас возникли проблемы с изображением с камеры, вы можете использовать следующую функцию.

public void fromCamera(){ 

String path= Environment.getExternalStorageDirectory().getPath() + "/DCIM/Camera/"; 
File file = new File(path,"IMG_"+System.currentTimeMillis()+".jpg"); 
file.getParentFile().mkdirs(); 
try { 
    file.createNewFile(); 
}catch (IOException e) { 
    e.printStackTrace(); 
} 
mPicCaptureUri = Uri.fromFile(file); 
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
intent.putExtra(MediaStore.EXTRA_OUTPUT, mPicCaptureUri); 
startActivityForResult(intent, REQUEST_CAMERA); 

} 

И на вашем OnActivityResult вы можете получить изображение и делать то, что вам нужно сделать:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
super.onActivityResult(requestCode, resultCode, data); 

if(resultCode == RESULT_OK){ 
    if(requestCode == REQUEST_CAMERA){ 

     if(mPicCaptureUri!=null){ 
      //do try to set image here .... 
     } 
    } 
} 
} 

И да действительно определяют в верхней mPicCaptureUri как:

private Uri mPicCaptureUri = null; 

Это сработало для меня .. надеюсь, что это поможет.

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