Intereting Posts
Viewpager во фрагменте не отображается (восстанавливается) при возврате из другого фрагмента Как перечислить все файлы и папки, находящиеся на SD-карте Как вы редактируете зависимость / внешнюю библиотеку в студии Android? Светодиодный фонарик не работает на Samsung Galaxy Nexus Android: как программно обновить селектор (StateListDrawable) Android: «BadTokenException: невозможно добавить окно; Ваша активность работает? »При отображении диалога в PreferenceActivity NavigationView не отображается, но нажатие кнопки Как определить, работает ли данный запрос? Как определить, включен или выключен экран, если уровень API равен 4? Почему Cordova / Phonegap добавляет 8 в мой код версии Android? Как внедрить конфигурацию Android в каждый подпроект с помощью Gradle? SQLiteQueryBuilder.query () и SQLiteDatabase.query () Удаленная отладка Android не работает в Windows 7 Почему одна поточная модель используется для обновления пользовательского интерфейса в качестве основного потока? Как использовать StateListAnimator?

Android Как я могу позвонить вместе с камерой или галереей?

Если я хочу захватить изображение с родной камеры, я могу сделать:

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); 

Если я хочу получить изображение из галереи, я могу сделать:

 Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(Intent.createChooser(intent, "Select Picture"), SELECT_PICTURE); 

Мне интересно, как можно свести эти два вместе.
Это означает, что вы получаете изображение из галереи или фотографии Выберите действие

Есть ли какой-нибудь пример кода для этого? Благодарю.

Solutions Collecting From Web of "Android Как я могу позвонить вместе с камерой или галереей?"

Если вы хотите сфотографироваться с помощью Camera или Gallery Intent Together, тогда проверьте ссылку ниже. Тот же вопрос также размещен здесь.

Захват изображения из галереи и камеры в android

ОБНОВЛЕННЫЙ КОД:

Проверьте код ниже. В этом коде не так, как вы хотите в listview, но он дает возможность в диалоговом окне выбрать изображение из Gallary OR Camera.

 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(); } } } } 

Также добавьте 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" /> 

Хранить изображение на 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(); } } 

Если вы хотите показать все приложения, установленные в телефоне, которые могут работать с фотографиями, такими как Camera, Gallery, Dropbox и т. Д.

Вы можете сделать что-то вроде:

1. Спросите все имеющиеся намерения:

  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.- Показать пользовательский диалог со списком элементов:

  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(); 

Это полный пример: https://gist.github.com/felixgborrego/7943560

Создайте кнопку в своем XML-макете и добавьте атрибут android:onClick="takeAPicture" затем в своем основном android:onClick="takeAPicture" создайте метод с тем же именем из атрибута 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); } 

И просто сделайте еще один способ, когда вы хотите получить изображение из галереи:

 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); } 

Я думаю, что раньше я столкнулся с твоим делом. Идея заключается в том, что мы создадим диалог оповещений по списку элементов с выбранным элементом, и каждый элемент будет выполнять уникальную функцию, определенную вашим собственным намерением. Если вам нужен значок для каждого элемента в списке элементов, ему потребуется немного больше работы. Надеюсь, это поможет.

  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(); 

Вы можете использовать IntentMapnip, чтобы объединить намерения вместе и показать его пользователю.

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

Вы можете объединить столько желаний, сколько хотите, за один звонок.