MediaStore.EXTRA_OUTPUT macht Daten null, andere Möglichkeit, Fotos zu speichern?

Google bietet diesen vielseitigen Code für die Aufnahme von Fotos über eine Absicht:

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // create Intent to take a picture and return control to the calling application Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); // create a file to save the image intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name // start the image capture Intent startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE); } 

Das Problem ist, dass, wenn Sie wie ich sind und Sie wollen die Fotos als Extras passieren, mit EXTRA_OUTPUT scheinbar läuft mit den Foto-Daten und macht nachfolgende Aktionen denken, die Absicht Daten ist null.

  • Genymotion VirtualBox Fehler
  • Java.lang.IncompatibleClassChangeError bei der Aufnahme von Espresso-Beitrag: 2.0
  • Android-Anwendung verschieben zu sdcard Option ist deaktiviert
  • Zugriff auf Integer-Ressourcen in XML
  • ListView zufällige IndexOutOfBoundsException auf Froyo
  • Android Studio 0.2.8 TODO Farben haben sich geändert
  • Es scheint, das ist ein großer Bug mit Android.

    Ich versuche, ein Foto zu machen und es dann als Thumbnail in einer neuen Ansicht anzuzeigen. Ich hätte gern in der Galerie des Nutzers als vollformatiges Bild gespeichert. Kennt jemand eine Möglichkeit, den EXTRA_OUTPUT ohne EXTRA_OUTPUT ?

    Hier habe ich gerade:

     public void takePhoto(View view) { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); // takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); startActivityForResult(takePictureIntent, CAMERA_REQUEST_CODE); } /** Create a file Uri for saving an image or video */ private static Uri getOutputMediaFileUri(int type){ return Uri.fromFile(getOutputMediaFile(type)); } /** Create a File for saving an image or video */ @SuppressLint("SimpleDateFormat") private static File getOutputMediaFile(int type){ File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES), "JoshuaTree"); if (! mediaStorageDir.exists()){ if (! mediaStorageDir.mkdirs()){ Log.d("JoshuaTree", "failed to create directory"); return null; } } // Create a media file name String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); File mediaFile; if (type == MEDIA_TYPE_IMAGE){ mediaFile = new File(mediaStorageDir.getPath() + File.separator + "IMG_"+ timeStamp + ".jpg"); } else { return null; } return mediaFile; } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == CAMERA_REQUEST_CODE) { if (resultCode == RESULT_OK) { handleSmallCameraPhoto(data); } } } private void handleSmallCameraPhoto(Intent intent) { Bundle extras = intent.getExtras(); mImageBitmap = (Bitmap) extras.get("data"); Intent displayIntent = new Intent(this, DisplayPhotoActivity.class); displayIntent.putExtra("BitmapImage", mImageBitmap); startActivity(displayIntent); } 

    }

  • Eclipse android gemeinsamen XML-Editor stoppt Rendering Text korrekt (zufällig)
  • Tablet oder Telefon - Android
  • Bereitstellung von Android App
  • Android-Fehler: java.lang.IllegalStateException: versuchen, einen bereits geschlossenen Cursor anzufordern
  • Firebase 2.0 - wie man mit mehreren Aromen (Umgebungen) einer Android-App umgehen kann?
  • Unterschied zwischen statischen und gemeinsamen Bibliotheken in Android NDK?
  • 4 Solutions collect form web for “MediaStore.EXTRA_OUTPUT macht Daten null, andere Möglichkeit, Fotos zu speichern?”

    Wenn Sie MediaStore.EXTRA_OUTPUT angegeben haben, wird das aufgenommene Bild auf diesen Pfad geschrieben und es werden keine Daten an onActivityResult übergeben. Sie können das Bild von dem ablesen, was Sie angegeben haben.

    Siehe eine andere Lösung derselben Frage hier: Android Kamera: Datenabsicht gibt null zurück

    Hier ist, wie Sie erreichen können, was Sie wollen:

     public void onClick(View v) { switch(v.getId()) { case R.id.iBCamera: File image = new File(appFolderCheckandCreate(), "img" + getTimeStamp() + ".jpg"); Uri uriSavedImage = Uri.fromFile(image); Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); i.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage); i.putExtra("return-data", true); startActivityForResult(i, CAMERA_RESULT); break; } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch(requestCode) { case CAMERA_RESULT: if(resultCode==RESULT_OK) { handleSmallCameraPhoto(uriSavedImage); } break; } } private void handleSmallCameraPhoto(Uri uri) { Bitmap bmp=null; try { bmp = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri)); } catch (FileNotFoundException e) { e.printStackTrace(); } Intent displayIntent = new Intent(this, DisplayPhotoActivity.class); displayIntent.putExtra("BitmapImage", bmp); startActivity(displayIntent); } private String appFolderCheckandCreate(){ String appFolderPath=""; File externalStorage = Environment.getExternalStorageDirectory(); if (externalStorage.canWrite()) { appFolderPath = externalStorage.getAbsolutePath() + "/MyApp"; File dir = new File(appFolderPath); if (!dir.exists()) { dir.mkdirs(); } } else { showToast(" Storage media not found or is full ! "); } return appFolderPath; } private String getTimeStamp() { final long timestamp = new Date().getTime(); final Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(timestamp); final String timeString = new SimpleDateFormat("HH_mm_ss_SSS").format(cal.getTime()); return timeString; } 

    Bearbeiten:

    Fügen Sie diese zu Manifest:

    Das Starten von Api 19 und darüber READ_EXTERNAL_STORAGE sollte explizit deklariert werden

      *<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />* <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

    Zu manifestieren

    Grundsätzlich gibt es zwei Möglichkeiten, das Bild von der Kamera abzurufen, wenn du das aufgenommene Bild durch Absicht Extras schickst, kannst du es nicht auf ActivityResult auf intent.getData () abrufen, weil es die Bilddaten durch Extras speichert.

    Also die Idee ist:

     Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE); 

    Und das Abrufen auf ActivityResults Überprüfung der abgerufenen Absicht:

      @Override public void onActivityResult(int requestCode, int resultCode, Intent intent) { if (resultCode == RESULT_OK) { if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) { if (intent.getData() != null) { ParcelFileDescriptor parcelFileDescriptor = context.getContentResolver().openFileDescriptor(intent.getData()), "r"); FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor(); Bitmap image = BitmapFactory.decodeFileDescriptor(fileDescriptor); parcelFileDescriptor.close(); } else { Bitmap imageRetrieved = (Bitmap) intent.getExtras().get("data")); } } } } 

    Versuchen Sie diese ein android.provider.MediaStore.EXTRA_OUTPUT Hoffnung wird Ihr Bug lösen. Der folgende Code funktioniert für mich:

     Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, fileUri); startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE); 

    Ich war vor dem gleichen Problem, jedes Mal immer null beim Abrufen von Daten über andere Aktivitäten mit getIntent().getData() dann gelöst durch writting komplette android.provider.MediaStore.EXTRA_OUTPUT Dies löste mein Bug.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.