2
final List<Intent> cameraIntents = new ArrayList<Intent>(); final Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); final PackageManager packageManager = getPackageManager(); final List<ResolveInfo> listCam = packageManager.queryIntentActivities(captureIntent, 0); for (ResolveInfo res : listCam) { final String packageName = res.activityInfo.packageName; final Intent intent = new Intent(captureIntent); intent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name)); intent.setPackage(packageName); cameraIntents.add(intent); } Intent galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); galleryIntent.setAction(Intent.ACTION_GET_CONTENT); final Intent chooserIntent = Intent.createChooser(galleryIntent, "Select Source"); chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, cameraIntents.toArray(new Parcelable[]{})); startActivityForResult(chooserIntent, 1);
所以,這就是我怎麼叫,即可開啓相機或拍照。我如何在onactivityresult上閱讀它們?檢查下面的代碼。問題是,從照片中選擇的圖像起作用時,從相機拍攝它的作品。但是,從圖庫文件夾中選擇時,由於某種原因它不起作用。還有一些客戶在索尼xperia e4手機上報告我的問題。形象並不總是工作
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); try { if (resultCode == Activity.RESULT_OK && requestCode == 1 ) { Bitmap bm = null; try { Bundle extras = data.getExtras(); bm = (Bitmap) extras.get("data"); } catch(Exception e) { try { Uri selectedImage = data.getData(); BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = false; options.inPreferredConfig = Bitmap.Config.RGB_565; options.inDither = true; String[] filePathColumn = {MediaStore.Images.Media.DATA}; Cursor cursor = getContentResolver().query( selectedImage, filePathColumn, null, null, null); cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); String filePath = cursor.getString(columnIndex); cursor.close(); Common.setBitmap(null); bm = BitmapFactory.decodeFile(filePath); BitmapFactory.decodeFile(Common.getRealPathFromURI(data.getData(), rootView.getContext()), bounds); if(bm == null) bm = BitmapFactory.decodeFile(Common.getRealPathFromURI(selectedImage, AddStoreActivity.this), options); if(bm == null) bm = MediaStore.Images.Media.getBitmap(getContentResolver(), selectedImage); } catch(Exception e1) { } } } } catch (Exception e) { } } public static String getRealPathFromURI(Uri contentURI, Context cont) { Cursor cursor = cont.getContentResolver().query(contentURI, null, null, null, null); if (cursor == null) { // Source is Dropbox or other similar local file path return contentURI.getPath(); } else { cursor.moveToFirst(); int idx = cursor.getColumnIndex(MediaColumns.DATA); return cursor.getString(idx); } }