Android otwórz aparat z przyciskiem


Mam nadzieję, że to nie jest powtórzone pytanie, ale tworzę aplikację, w której chcę, aby przycisk otwierał aplikację aparatu (domyślnie kamera androida osobno). Jak mam to zrobić? Wiem, że jest funkcja:
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE)

Czy muszę tego używać? Jak wywołać przycisk z pliku xml?
Czy muszę się też martwić o przechowywanie tego obrazu lub wideo, czy też zadba o to domyślna aplikacja aparatu?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Aby zadzwonić do kamery, możesz użyć:
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
startActivity(intent);

Obraz zostanie automatycznie zapisany w domyślnym katalogu.
Musisz ustawić uprawnienia do kamery w pliku AndroidManifest.xml:
<uses-permission android:name="android.permission.CAMERA"> </uses-permission>
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Button b = (Button)findViewById(R.id.Button01); b.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);
}
});
}protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_PIC_REQUEST) {
Bitmap image = (Bitmap) data.getExtras().get("data");
ImageView imageview = (ImageView) findViewById(R.id.ImageView01);//sets imageview as the bitmap
imageview.setImageBitmap(image);
}
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Możesz utworzyć intencję kamery i nazwać ją startActivityForResult (intent).
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// start the image capture Intent
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Wiem, że to trochę późna odpowiedź, ale możesz użyć poniższej składni, ponieważ działała świetnie
Camera=(Button)findViewById(R.id.CameraID);
Camera.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent Intent3=new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA);
startActivity(Intent3);
}
});
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

poniższy kod robi dokładnie to, co chcesz
// użyj tej intencji dla zdarzenia kliknięcia
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent,CAMERA_REQUEST);
// powyższy kod jest używany w sekcji „o wyniku działania”.
protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data); if (requestCode == CAMERA_REQUEST) {
Bitmap photo = (Bitmap) data.getExtras().get("data");
image.setImageBitmap(photo);
}
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

U mnie zadziałało doskonale.
Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivity(intent);

i dodaj to uprawnienie do swojego pliku manifestu:
<uses-permission android:name="android.permission.CAMERA">

Otwiera aparat, po przechwyceniu obrazu zapisuje obraz do galerii z nowym zestawem obrazów.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Masz rację co do działania zastosowanego w zamiarze, ale to nie jedyna rzecz, którą powinieneś zrobić. Będziesz musiał również dodać
startActivityForResult(intent, YOUR_REQUEST_CODE);

Aby to wszystko zrobić i uzyskać prawdziwy obraz, możesz sprawdzić następujący wątek.
Android Photo Capture
https://coderoad.ru/3491961/
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

możesz użyć następującego kodu
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); pic = new File(Environment.getExternalStorageDirectory(),
mApp.getPreference().getString(Common.u_id, "") + ".jpg"); picUri = Uri.fromFile(pic); cameraIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, picUri); cameraIntent.putExtra("return-data", true);
startActivityForResult(cameraIntent, PHOTO);
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Stworzyłem bibliotekę, aby wybrać obraz z kamery lub kuchni i również przyciąć
Spróbuj,
ImagePro.Java
public class ImagePro
{
public static String TAG = "ImagePro";
Activity activity;
Uri mImageCaptureUri;
public static int CAMERA_CODE = 64;
public static int GALLERY_CODE = 74;
public static int CROPPING_CODE = 84;
private final static int REQUEST_PERMISSION_REQ_CODE = 704; public ImagePro(Activity activity) { this.activity = activity;
this.outPutFile = new File(android.os.Environment.getExternalStorageDirectory(), "temp.jpg"); if (ContextCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_PERMISSION_REQ_CODE);
}
} private void LogToast(String message) { try {
Toast.makeText(activity, message, Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
} Log.d(TAG, message);
} private void Toast(String message) { try {
Toast.makeText(activity, message, Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
}
} private void Log(String message) { Log.d(TAG, message);
}/**
* This function return captured image path
*
* @param requestCode on activity result requestCode
* @param resultCode on activity result resultCode
* @param intent on activity result intent
* @return ImageDetails values
*/
public ImageDetails getImagePath(int requestCode, int resultCode, Intent intent) { ImageDetails imageDetails = new ImageDetails(); if(resultCode == Activity.RESULT_OK) { if(requestCode == CAMERA_CODE) {
imageDetails.setUri(mImageCaptureUri);
imageDetails.setPath(mImageCaptureUri.getPath());
Bitmap bitmap = null; try {
bitmap = MediaStore.Images.Media.getBitmap(activity.getContentResolver(), mImageCaptureUri);
} catch (IOException e) {
LogToast(e.getMessage());
e.printStackTrace();
}
imageDetails.setBitmap(bitmap);
imageDetails.setFile(new File(mImageCaptureUri.getPath())); } else if(requestCode == GALLERY_CODE) { Uri uri = intent.getData(); imageDetails.setUri(uri);
Bitmap bitmap = null; try {
bitmap = MediaStore.Images.Media.getBitmap(activity.getContentResolver(), uri);
} catch (IOException e) {
LogToast(e.getMessage());
e.printStackTrace();
} imageDetails.setBitmap(bitmap);
imageDetails.setFile(new File(uri.getPath()));
imageDetails.setPath(uri.getPath()); } else if(requestCode == CROPPING_CODE) {
try {
if(outPutFile.exists()){ imageDetails.setUri(Uri.fromFile(outPutFile));
imageDetails.setFile(outPutFile);
imageDetails.setPath(outPutFile.getPath());
Bitmap photo = decodeFile(outPutFile);
imageDetails.setBitmap(photo);
}
else {
LogToast("Error while save image");
}
} catch (Exception e) { e.printStackTrace();
LogToast(e.getMessage());
}
} } else {
LogToast("user cancelled.");
} return imageDetails;
}/**
* Open image pick dialog.
* CAMERA_CODE</br>
* GALLERY_CODE
*/
public void openImagePickOption() { final CharSequence[] items = { "Capture Photo", "Choose from Gallery", "Cancel" }; AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setTitle("Add Photo!");
builder.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item) { if (items[item].equals("Capture Photo")) { captureImage(); } else if (items[item].equals("Choose from Gallery")) { pickImage(); } else if (items[item].equals("Cancel")) {
dialog.dismiss();
}
}
});
builder.show();
}/**
* decode from file to bitmap
* @param f file
* @return Bitmap data
*/
private Bitmap decodeFile(File f) {
try {
// decode image size
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(new FileInputStream(f), null, o);// Find the correct scale value. It should be the power of 2.
final int REQUIRED_SIZE = 512;
int width_tmp = o.outWidth, height_tmp = o.outHeight;
int scale = 1;
while (true) {
if (width_tmp/2 < REQUIRED_SIZE || height_tmp/2 < REQUIRED_SIZE)
break;
width_tmp/= 2;
height_tmp/= 2;
scale *= 2;
}// decode with inSampleSize
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
} catch (FileNotFoundException e) { Log(e.getMessage());
}
return null;
}/**
* Capture image using camera
* REQUEST_CODE = ImagePro.CAMERA_CODE
*/
public void captureImage() { if(activity != null) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File f = new File(android.os.Environment.getExternalStorageDirectory(), "temp1.jpg");
mImageCaptureUri = Uri.fromFile(f);
intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
activity.startActivityForResult(intent, CAMERA_CODE); } else { LogToast("Activity not assigned");
}
}/**
* pick image from gallery
*/
public void pickImage() { Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
activity.startActivityForResult(i, GALLERY_CODE);
}/**
* cropping the uri image
* @param uri - open cropping dialog using the uri data
*/
public void croppingImage(Uri uri) { CroppingIMG(uri);
} int CROP_IMG_X=512;
int CROP_IMG_Y=512; public void croppingImage(Uri uri, int cropX, int cropY) { CROP_IMG_X = cropX;
CROP_IMG_Y = cropY; CroppingIMG(uri);
} File outPutFile=null; private void CroppingIMG(Uri uri) { final ArrayList<CroppingOption> cropOptions = new ArrayList<>(); Intent intent = new Intent("com.android.camera.action.CROP");
intent.setType("image/*"); List<ResolveInfo> list = activity.getPackageManager().queryIntentActivities( intent, 0 );
int size = list.size();
if (size == 0) {
LogToast("Can't find image croping app");
} else {
intent.setData(uri);
intent.putExtra("outputX", CROP_IMG_X);
intent.putExtra("outputY", CROP_IMG_Y);
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("scale", true);//Create output file here
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(outPutFile)); if (size == 1) {
Intent i = new Intent(intent);
ResolveInfo res = list.get(0); i.setComponent( new ComponentName(res.activityInfo.packageName, res.activityInfo.name)); activity.startActivityForResult(i, CROPPING_CODE);
} else {
for (ResolveInfo res : list) {
final CroppingOption co = new CroppingOption(); co.title = activity.getPackageManager().getApplicationLabel(res.activityInfo.applicationInfo);
co.icon = activity.getPackageManager().getApplicationIcon(res.activityInfo.applicationInfo);
co.appIntent = new Intent(intent);
co.appIntent.setComponent( new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
cropOptions.add(co);
} CropingOptionAdapter adapter = new CropingOptionAdapter(activity.getApplicationContext(), cropOptions); AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setTitle("Choose Cropping App");
builder.setCancelable(false);
builder.setAdapter( adapter, new DialogInterface.OnClickListener() {
public void onClick( DialogInterface dialog, int item ) {
activity.startActivityForResult( cropOptions.get(item).appIntent, CROPPING_CODE);
}
}); builder.setOnCancelListener( new DialogInterface.OnCancelListener() {
@Override
public void onCancel( DialogInterface dialog ) { if (mImageCaptureUri != null ) {
activity.getContentResolver().delete(mImageCaptureUri, null, null );
mImageCaptureUri = null;
}
}
} ); AlertDialog alert = builder.create();
alert.show();
}
}
}/**
* Capture image using camera
* REQUEST_CODE = User defined code
*
* @param iRequestCode User defined code
*/
public void captureImage(int iRequestCode) { CAMERA_CODE = iRequestCode;
captureImage();
}/**
* get path, bitmap, file and uri from image details object
*/
public class ImageDetails { String path="";
Bitmap bitmap=null;
File file=null;
Uri uri=null; public Uri getUri() {
return uri;
} public void setUri(Uri uri) {
this.uri = uri;
} public String getPath() {
return path;
} public void setPath(String path) {
this.path = path;
} public Bitmap getBitmap() {
return bitmap;
} public void setBitmap(Bitmap bitmap) {
this.bitmap = bitmap;
} public File getFile() {
return file;
} public void setFile(File file) {
this.file = file;
}
}/**
* Created by DP on 7/12/2016.
*/
public class CroppingOption {
public CharSequence title;
public Drawable icon;
public Intent appIntent;
} public class CropingOptionAdapter extends ArrayAdapter {
private ArrayList<CroppingOption> mOptions;
private LayoutInflater mInflater; public CropingOptionAdapter(Context context, ArrayList<CroppingOption> options) { super(context, R.layout.croping_selector, options);
mOptions = options;
mInflater = LayoutInflater.from(context);
} @Override
public View getView(int position, View convertView, ViewGroup group) {
if (convertView == null)
convertView = mInflater.inflate(R.layout.croping_selector, null); CroppingOption item = mOptions.get(position); if (item != null) {
((ImageView) convertView.findViewById(R.id.img_icon)).setImageDrawable(item.icon);
((TextView) convertView.findViewById(R.id.txt_name)).setText(item.title); return convertView;
} return null;
}
}
}

MainActivity.java
ImagePro imagePro; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imagePro = new ImagePro(this);
} public void onClickUploadImageButton(View view) { imagePro.openImagePickOption();
}

onActivityResult
if(requestCode == CAMERA_CODE && resultCode == RESULT_OK) { imageDetails = imagePro.getImagePath(CAMERA_CODE, RESULT_OK, data);
ivCrop.setImageBitmap(imageDetails.getBitmap());
//imageDetails.getPath(), imageDetails.getBitmap(), imageDetails.getUri(), imageDetails.getFile
}

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się