Ich muss eine Absicht zu Standard-Kamera-Anwendung drücken, damit es ein Foto machen, speichern Sie es und einen URI zurück. Gibt es eine Möglichkeit, dies zu tun?Android Kamera Absicht
Antwort
private static final int TAKE_PICTURE = 1;
private Uri imageUri;
public void takePhoto(View view) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File photo = new File(Environment.getExternalStorageDirectory(), "Pic.jpg");
intent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(photo));
imageUri = Uri.fromFile(photo);
startActivityForResult(intent, TAKE_PICTURE);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case TAKE_PICTURE:
if (resultCode == Activity.RESULT_OK) {
Uri selectedImage = imageUri;
getContentResolver().notifyChange(selectedImage, null);
ImageView imageView = (ImageView) findViewById(R.id.ImageView);
ContentResolver cr = getContentResolver();
Bitmap bitmap;
try {
bitmap = android.provider.MediaStore.Images.Media
.getBitmap(cr, selectedImage);
imageView.setImageBitmap(bitmap);
Toast.makeText(this, selectedImage.toString(),
Toast.LENGTH_LONG).show();
} catch (Exception e) {
Toast.makeText(this, "Failed to load", Toast.LENGTH_SHORT)
.show();
Log.e("Camera", e.toString());
}
}
}
}
Gibt es die Möglichkeit, eine Frontkamera des Gerätes vorsätzlich zu öffnen? – Dimon
Das funktioniert gut, obwohl Sie möglicherweise benötigen: private statische int TAKE_PICTURE = 1; –
@Aleksander O. - toller Code, danke!Ich habe eine vollständige voll funktionsfähige Implementierung dieser bei http://StackOverflow.com/A/13446838/1166727 –
Versuchen Sie Folgendes ich here gefunden
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
startActivityForResult(intent, 0);
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK && requestCode == 0) {
String result = data.toURI();
// ...
}
}
Danke, aber die Bild der Einsparung ist nicht auf ein Gerät, so bekomme ich FileNotFoundException in Uri uri = Uri.parse (data.toURI()); bitmap = android.provider.MediaStore.Images.Media .getBitmap (contentResolver, uri); –
Sagst du, dass das Bild, das du machst, nicht auf dem Telefon/Gerät gespeichert wird oder etwas passiert und obwohl du sagst, dass es das Bild auf deinem Handy/Gerät speichern soll, verhält es sich so, als würde es nicht speichern? – Ryan
Ich sage, dass das Bild nicht automatisch auf dem Gerät gespeichert wird, sondern in onActivityResult() als Bitmap zurückgegeben wird. Ich habe jedoch eine Lösung gefunden, die ich in einer Antwort erwähnen werde. –
versuchen diesen Code
Intent photo= new Intent("android.media.action.IMAGE_CAPTURE");
startActivityForResult(photo, CAMERA_PIC_REQUEST);
Dieser Beitrag wird automatisch als minderwertig gekennzeichnet, da es sich nur um Code handelt. Würde es Ihnen etwas ausmachen, es zu erweitern, indem Sie etwas Text hinzufügen, um zu erklären, wie es das Problem löst? – gung
Es dauerte einige Stunden, um diese Funktion zu erhalten. Der Code ist fast eine Kopie-Paste von developer.android.com, mit einem kleinen Unterschied.
Antrag diese Erlaubnis auf der AndroidManifest.xml
:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Auf Ihrem Activity
, durch die Definition dieser beginnen:
static final int REQUEST_IMAGE_CAPTURE = 1;
private Bitmap mImageBitmap;
private String mCurrentPhotoPath;
private ImageView mImageView;
Dann feuern diese Intent
in ein onClick
:
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (cameraIntent.resolveActivity(getPackageManager()) != null) {
// Create the File where the photo should go
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException ex) {
// Error occurred while creating the File
Log.i(TAG, "IOException");
}
// Continue only if the File was successfully created
if (photoFile != null) {
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
startActivityForResult(cameraIntent, REQUEST_IMAGE_CAPTURE);
}
}
hinzufügen das folgende unterstützt mich thod:
private File createImageFile() throws IOException {
// Create an image file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
File storageDir = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(
imageFileName, // prefix
".jpg", // suffix
storageDir // directory
);
// Save a file: path for use with ACTION_VIEW intents
mCurrentPhotoPath = "file:" + image.getAbsolutePath();
return image;
}
erhalten dann das Ergebnis:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
try {
mImageBitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), Uri.parse(mCurrentPhotoPath));
mImageView.setImageBitmap(mImageBitmap);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Was die MediaStore.Images.Media.getBitmap(this.getContentResolver(), Uri.parse(mCurrentPhotoPath))
, es Arbeit ist gemacht, die aus dem Code von developer.android.com unterscheidet. Der ursprüngliche Code gab mir eine FileNotFoundException
.
Das gleiche für mich. Du hast mir ein paar Stunden gespart. Irgendeine Idee, warum der Android Dev-Code eine IO-Ausnahme gibt? – Coo
Versuchen Sie, die folgenden I a link
hier gefunden Wenn Ihre App Ziele M und vor und erklärt, wie die Kamera die Erlaubnis verwendet, die nicht erteilt wird, dann in einem Security führt diese Aktion zu nutzen versuchen.
EasyImage.openCamera(Activity activity, int type);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
EasyImage.handleActivityResult(requestCode, resultCode, data, this, new DefaultCallback() {
@Override
public void onImagePickerError(Exception e, EasyImage.ImageSource source, int type) {
//Some error handling
}
@Override
public void onImagesPicked(List<File> imagesFiles, EasyImage.ImageSource source, int type) {
//Handle the images
onPhotosReturned(imagesFiles);
}
});
}
Siehe den Link unten http://stackoverflow.com/questions/13977245/android-open-camera-from-button/40041381#40041381 –