Android Comment puis-je appeler l'objectif de la caméra ou de la galerie ensemble

Si je veux capturer l'image de la caméra native, je peux faire:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); startActivityForResult(intent, IMAGE_CAPTURE); 

Si je veux obtenir de l'image de la galerie, je peux faire:

  • Quelle est la précision du monde réel des accéléromètres du téléphone lorsqu'il est utilisé pour le positionnement?
  • Java.lang.ClassCastException: android.widget.LinearLayout ne peut pas être diffusé sur android.widget.ListView
  • Comment exécuter des applications externes, téléchargées mais pas installées sur Android?
  • Identifiant unique Android
  • Obtenir l'emplacement GPS dans un récepteur de diffusion / ou un service pour diffuser le transfert de données du récepteur
  • Plus icône dans le bouton d'action flottante
  •  Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(Intent.createChooser(intent, "Select Picture"), SELECT_PICTURE); 

    Je me demande comment rassembler les deux ci-dessus.
    Cela signifie GET IMAGE FROM GALLERY OU CAPTURE PHOTO Sélectionnez une action

    Existe-t-il un exemple de code pour le faire? Merci.

    5 Solutions collect form web for “Android Comment puis-je appeler l'objectif de la caméra ou de la galerie ensemble”

    Si vous souhaitez prendre une photo de Camera ou Gallery Intent Together, puis cliquez sur le lien ci-dessous. La même question a également été publiée ici.

    Capture d'image de la galerie et de l'appareil photo dans Android

    CODE MIS À JOUR:

    Vérifiez le code ci-dessous, Dans ce code, pas le même que vous le souhaitez dans la liste, mais cela donne l'option dans la boîte de dialogue Choisir l'image de Gallary OU de la caméra.

     public class UploadImageActivity extends Activity { ImageView img_logo; protected static final int CAMERA_REQUEST = 0; protected static final int GALLERY_PICTURE = 1; private Intent pictureActionIntent = null; Bitmap bitmap; String selectedImagePath; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main1); img_logo= (ImageView) findViewById(R.id.imageView1); img_logo.setOnClickListener(new OnClickListener() { public void onClick(View v) { startDialog(); } }); } private void startDialog() { AlertDialog.Builder myAlertDialog = new AlertDialog.Builder( getActivity()); myAlertDialog.setTitle("Upload Pictures Option"); myAlertDialog.setMessage("How do you want to set your picture?"); myAlertDialog.setPositiveButton("Gallery", new DialogInterface.OnClickListener() { public void onClick(DialogInterface arg0, int arg1) { Intent pictureActionIntent = null; pictureActionIntent = new Intent( Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult( pictureActionIntent, GALLERY_PICTURE); } }); myAlertDialog.setNegativeButton("Camera", new DialogInterface.OnClickListener() { public void onClick(DialogInterface arg0, int arg1) { 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, CAMERA_REQUEST); } }); myAlertDialog.show(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); bitmap = null; selectedImagePath = null; if (resultCode == RESULT_OK && requestCode == CAMERA_REQUEST) { File f = new File(Environment.getExternalStorageDirectory() .toString()); for (File temp : f.listFiles()) { if (temp.getName().equals("temp.jpg")) { f = temp; break; } } if (!f.exists()) { Toast.makeText(getBaseContext(), "Error while capturing image", Toast.LENGTH_LONG) .show(); return; } try { bitmap = BitmapFactory.decodeFile(f.getAbsolutePath()); bitmap = Bitmap.createScaledBitmap(bitmap, 400, 400, true); int rotate = 0; try { ExifInterface exif = new ExifInterface(f.getAbsolutePath()); int orientation = exif.getAttributeInt( ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); switch (orientation) { case ExifInterface.ORIENTATION_ROTATE_270: rotate = 270; break; case ExifInterface.ORIENTATION_ROTATE_180: rotate = 180; break; case ExifInterface.ORIENTATION_ROTATE_90: rotate = 90; break; } } catch (Exception e) { e.printStackTrace(); } Matrix matrix = new Matrix(); matrix.postRotate(rotate); bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); img_logo.setImageBitmap(bitmap); //storeImageTosdCard(bitmap); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } else if (resultCode == RESULT_OK && requestCode == GALLERY_PICTURE) { if (data != null) { 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]); selectedImagePath = c.getString(columnIndex); c.close(); if (selectedImagePath != null) { txt_image_path.setText(selectedImagePath); } bitmap = BitmapFactory.decodeFile(selectedImagePath); // load // preview image bitmap = Bitmap.createScaledBitmap(bitmap, 400, 400, false); img_logo.setImageBitmap(bitmap); } else { Toast.makeText(getApplicationContext(), "Cancelled", Toast.LENGTH_SHORT).show(); } } } } 

    Ajoutez également pemission:

     <uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera.autofocus" android:required="false" /> <uses-feature android:name="android.hardware.camera" android:required="false" /> 

    Magasin Image to sdcard:

     private void storeImageTosdCard(Bitmap processedBitmap) { try { // TODO Auto-generated method stub OutputStream output; // Find the SD Card path File filepath = Environment.getExternalStorageDirectory(); // Create a new folder in SD Card File dir = new File(filepath.getAbsolutePath() + "/appName/"); dir.mkdirs(); String imge_name = "appName" + System.currentTimeMillis() + ".jpg"; // Create a name for the saved image File file = new File(dir, imge_name); if (file.exists()) { file.delete(); file.createNewFile(); } else { file.createNewFile(); } try { output = new FileOutputStream(file); // Compress into png format image from 0% - 100% processedBitmap .compress(Bitmap.CompressFormat.PNG, 100, output); output.flush(); output.close(); int file_size = Integer .parseInt(String.valueOf(file.length() / 1024)); System.out.println("size ===>>> " + file_size); System.out.println("file.length() ===>>> " + file.length()); selectedImagePath = file.getAbsolutePath(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } 

    Si vous souhaitez afficher toutes les applications installées dans le téléphone qui peuvent traiter des photos telles que Camera, Gallery, Dropbox, etc.

    Vous pouvez faire quelque chose comme:

    1.- Demandez toutes les intentions disponibles:

      Intent camIntent = new Intent("android.media.action.IMAGE_CAPTURE"); Intent gallIntent=new Intent(Intent.ACTION_GET_CONTENT); gallIntent.setType("image/*"); // look for available intents List<ResolveInfo> info=new ArrayList<ResolveInfo>(); List<Intent> yourIntentsList = new ArrayList<Intent>(); PackageManager packageManager = context.getPackageManager(); List<ResolveInfo> listCam = packageManager.queryIntentActivities(camIntent, 0); for (ResolveInfo res : listCam) { final Intent finalIntent = new Intent(camIntent); finalIntent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name)); yourIntentsList.add(finalIntent); info.add(res); } List<ResolveInfo> listGall = packageManager.queryIntentActivities(gallIntent, 0); for (ResolveInfo res : listGall) { final Intent finalIntent = new Intent(gallIntent); finalIntent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name)); yourIntentsList.add(finalIntent); info.add(res); } 

    2.- Afficher une boîte de dialogue personnalisée avec la liste des éléments:

      AlertDialog.Builder dialog = new AlertDialog.Builder(context); dialog.setTitle(context.getResources().getString(R.string.select_an_action)); dialog.setAdapter(buildAdapter(context, activitiesInfo), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { Intent intent = intents.get(id); context.startActivityForResult(intent,1); } }); dialog.setNeutralButton(context.getResources().getString(R.string.cancel), new android.content.DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); dialog.show(); 

    Ceci est un exemple complet: https://gist.github.com/felixgborrego/7943560

    Créez un bouton dans votre mise en page XML et ajoutez l'attribut android:onClick="takeAPicture" puis dans votre activité principale, créez une méthode avec le même nom de l'attribut onClick .

     public void takeAPicture(View view){ Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); startActivityForResult(intent, IMAGE_CAPTURE); } 

    Et faites simplement une autre méthode pour quand vous souhaitez obtenir l'image de la galerie:

     public void getImageFromGallery(View view) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(Intent.createChooser(intent, "Select Picture"), SELECT_PICTURE); } 

    Je pense que j'ai rencontré votre cas auparavant. Une idée est que nous allons créer une boîte de dialogue d'alerte de liste d'éléments unique avec un élément sélectionnable, et chaque élément fera une fonction unique définie par votre propre intention. Si vous voulez une icône pour chaque élément dans la liste des éléments, il faudrait un peu plus de travail à faire. J'espère que cela vous sera utile.

      String title = "Open Photo"; CharSequence[] itemlist ={"Take a Photo", "Pick from Gallery", "Open from File"}; AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setIcon(R.drawable.icon_app); builder.setTitle(title); builder.setItems(itemlist, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { switch (which) { case 0:// Take Photo // Do Take Photo task here break; case 1:// Choose Existing Photo // Do Pick Photo task here break; case 2:// Choose Existing File // Do Pick file here break; default: break; } } }); AlertDialog alert = builder.create(); alert.setCancelable(true); alert.show(); 

    Vous pouvez utiliser IntentMapnip pour fusionner les intentions ensemble et le montrer à l'utilisateur.

     List<ResolveIntent> resolveIntentList = mergeIntents(this, MediaIntents.newSelectPictureIntent(), MediaIntents.cameraIntent()); LaunchIntent.withButtomSheetAsList(this, resolveIntentList, "launch using", new ResolvedIntentListener<ResolveIntent>() { @Override public void onIntentSelected(ResolveIntent resolveIntent) { } }); 

    Vous pouvez fusionner autant d'intention que vous voulez en un seul appel.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.