Android Kamera: veri amacı boş döndürüyor


132

Birden fazla aktivite içeren bir android uygulamam var.

Bunlardan birinde, cihaz kamerasını arayacak bir düğme kullanıyorum:

public void onClick(View view) {
    Intent photoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(photoIntent, IMAGE_CAPTURE);
}

Aynı aktivitede OnActivityResult, görüntü sonucu için yöntemi çağırıyorum :

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == IMAGE_CAPTURE) {
        if (resultCode == RESULT_OK) {
            Bitmap image = (Bitmap) data.getExtras().get("data");
            ImageView imageview = (ImageView) findViewById(R.id.pic);
            imageview.setImageBitmap(image);
        } else if (resultCode == RESULT_CANCELED) {
            Toast.makeText(this, "CANCELED ", Toast.LENGTH_LONG).show();
        }
    }
}

Sorun, niyetin databoş olması ve OnActivityResultyöntemin doğrudan (resultCode == RESULT_CANCELED)öğesine dönmesi ve uygulamanın önceki avtiviteye dönmesidir.

Bu sorunu nasıl düzeltebilirim ve kamerayı aradıktan sonra, uygulama, şu anki etkinliğe geri döner. ImageView çekilen resmi ?

Teşekkürler


Yanıtlar:


218

Varsayılan Android kamera uygulaması, yalnızca döndürülen Amaçta bir küçük resmi iletirken boş olmayan bir amaç döndürür. EXTRA_OUTPUTYazmak için bir URI ile geçerseniz , birnull amaç ve resim, ilettiğiniz URI'dadır.

Bunu, kamera uygulamasının GitHub'daki kaynak koduna bakarak doğrulayabilirsiniz:

Ya bir EXTRA_OUTPUTşekilde içeri giriyorsunuz ya da telefonunuzdaki kamera uygulaması farklı çalışıyor.


12
Eylemde kamerada boş olmayan bir niyet veren put Extra işlevselliğini nasıl düzeltirimActivitySonuç
Abdul Wahab

Gerçekten faydalı cevap Keşke başkalarının çözümü daha verimli bulmasını kabul edebilseydim.
user1160020

1
Harika! Açıklama için çok teşekkürler :) +100
Muhammad Riyaz

Gönderdiğiniz bağlantı artık geçerli değil.

4
Kamera sınıfını etkisiz hale getirip bu yöntemi ikisine birden izin verecek şekilde değiştirebilir miyiz, yoksa bundan daha mı zor?
Tanner Summers

16

Kolay bir cevap buldum. işe yarıyor!!

private void openCameraForResult(int requestCode){
    Intent photo = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    Uri uri  = Uri.parse("file:///sdcard/photo.jpg");
    photo.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, uri);
    startActivityForResult(photo,requestCode);
}

if (requestCode == CAMERA_REQUEST_CODE) {
        if (resultCode == Activity.RESULT_OK) {
            File file = new File(Environment.getExternalStorageDirectory().getPath(), "photo.jpg");
            Uri uri = Uri.fromFile(file);
            Bitmap bitmap;
            try {
                bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
                bitmap = cropAndScale(bitmap, 300); // if you mind scaling
                profileImageView.setImageBitmap(bitmap);
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    }

Bu resmi kırpmak ve ölçeklemek isterseniz

public static  Bitmap cropAndScale (Bitmap source, int scale){
    int factor = source.getHeight() <= source.getWidth() ? source.getHeight(): source.getWidth();
    int longer = source.getHeight() >= source.getWidth() ? source.getHeight(): source.getWidth();
    int x = source.getHeight() >= source.getWidth() ?0:(longer-factor)/2;
    int y = source.getHeight() <= source.getWidth() ?0:(longer-factor)/2;
    source = Bitmap.createBitmap(source, x, y, factor, factor);
    source = Bitmap.createScaledBitmap(source, scale, scale, false);
    return source;
}

4
FileUriExposedExceptionModern SDK sürümleri hakkında bilgi verir .
Souradeep Nanda

8

İnceliyordum, bu sorunu yaşamış intentboş ama bu yoluyla gönderilen bilgiler değil intentalınmazsaonActionActivit()

görüntü açıklamasını buraya girin

Bu, getContentResolver () kullanarak daha iyi bir çözümdür :

    private Uri imageUri;
    private ImageView myImageView;
    private Bitmap thumbnail;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

      ...
      ...    
      ...
      myImageview = (ImageView) findViewById(R.id.pic); 

      values = new ContentValues();
      values.put(MediaStore.Images.Media.TITLE, "MyPicture");
      values.put(MediaStore.Images.Media.DESCRIPTION, "Photo taken on " + System.currentTimeMillis());
      imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
      Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
      intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
      startActivityForResult(intent, PICTURE_RESULT);

  }

onActivityResult()tarafından saklanan bir bit eşlem almak ) getContentResolver ( :

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == REQUEST_CODE_TAKE_PHOTO && resultCode == RESULT_OK) {

            Bitmap bitmap;
            try {
                bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), imageUri);
                myImageView.setImageBitmap(bitmap);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }

la tanimlama de la imagen aquí tanıtımı la tanimlama de la imagen aquí tanıtımı

Github'daki örneğimi kontrol edin:

https://github.com/Jorgesys/TakePicture


6

Boş niyet probleminden kaçınan basit çalışan kamera uygulaması

- bu yanıta dahil edilen tüm değiştirilmiş kodlar; android eğiticisine yakın

Bu konuya çok zaman harcadığım için bir hesap oluşturmaya ve sonuçlarımı sizinle paylaşmaya karar verdim.

Resmi android öğreticisi "Sadece Fotoğraf Çekmek" söz verdiği şeyi pek tutmadı. Orada sağlanan kod cihazımda çalışmadı: Android 4.4.2 / KitKat / API Seviye 19 sürümünü çalıştıran bir Samsung Galaxy S4 Mini GT-I9195.

Ana sorunun, fotoğrafı çekerken kullanılan yöntemdeki aşağıdaki satır olduğunu anladım ( dispatchTakePictureIntenteğitimde):

takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);

onActivityResultNull olarak sonradan yakalanan niyet ile sonuçlandı .

Bu sorunu çözmek için, burada daha önce yanıtlar ve github ilgili bazı yararlı mesajların (çoğunlukla dışarı çok ilham çekti deepwinter tarafından bu bir - onun için büyük teşekkür, siz bir yakından ilişkili onun cevap kontrol etmek isteyebilirsiniz yazı sıra).

Bu hoş tavsiyelerin ardından, söz konusu putExtrasatırı silme ve bunun yerine onActivityResult () yöntemi ile çekilen fotoğrafı kameradan geri alma stratejisini seçtim . Resimle ilişkili bitmap'i geri almak için belirleyici kod satırları şunlardır:

        Uri uri = intent.getData();
        Bitmap bitmap = null;
        try {
            bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri);
        } catch (IOException e) {
            e.printStackTrace();
        }

Sadece resim çekme, SD karta kaydetme ve görüntüleme becerisine sahip örnek bir uygulama yarattım. Bu konuda tökezlediğimde benimle aynı durumdaki insanlara yardımcı olabileceğini düşünüyorum, çünkü mevcut yardım önerileri çoğunlukla söz konusu şeyi yapan ancak yeni başlayanlar için denetlenmesi çok kolay olmayan oldukça kapsamlı github gönderilerine atıfta bulunuyor. ben mi. Yeni bir proje oluştururken Android Studio'nun varsayılan olarak oluşturduğu dosya sistemi ile ilgili olarak, amacım için sadece üç dosyayı değiştirmek zorunda kaldım:

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.android.simpleworkingcameraapp.MainActivity">

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="takePicAndDisplayIt"
    android:text="Take a pic and display it." />

<ImageView
    android:id="@+id/image1"
    android:layout_width="match_parent"
    android:layout_height="200dp" />

</LinearLayout>

MainActivity.java:

package com.example.android.simpleworkingcameraapp;

import android.content.Intent;
import android.graphics.Bitmap;
import android.media.Image;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class MainActivity extends AppCompatActivity {

private ImageView image;
static final int REQUEST_TAKE_PHOTO = 1;
String mCurrentPhotoPath;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    image = (ImageView) findViewById(R.id.image1);
}

// copied from the android development pages; just added a Toast to show the storage location
private File createImageFile() throws IOException {
    // Create an image file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmm").format(new Date());
    String imageFileName = "JPEG_" + timeStamp + "_";
    File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
    File image = File.createTempFile(
            imageFileName,  /* prefix */
            ".jpg",         /* suffix */
            storageDir      /* directory */
    );

    // Save a file: path for use with ACTION_VIEW intents
    mCurrentPhotoPath = image.getAbsolutePath();
    Toast.makeText(this, mCurrentPhotoPath, Toast.LENGTH_LONG).show();
    return image;
}

public void takePicAndDisplayIt(View view) {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (intent.resolveActivity(getPackageManager()) != null) {
        File file = null;
        try {
            file = createImageFile();
        } catch (IOException ex) {
            // Error occurred while creating the File
        }

        startActivityForResult(intent, REQUEST_TAKE_PHOTO);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultcode, Intent intent) {
    if (requestCode == REQUEST_TAKE_PHOTO && resultcode == RESULT_OK) {
        Uri uri = intent.getData();
        Bitmap bitmap = null;
        try {
            bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri);
        } catch (IOException e) {
            e.printStackTrace();
        }
        image.setImageBitmap(bitmap);
    }
}
}

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.simpleworkingcameraapp">


<!--only added paragraph-->
<uses-feature
    android:name="android.hardware.camera"
    android:required="true" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  <!-- only crucial line to add; for me it still worked without the other lines in this paragraph -->
<uses-permission android:name="android.permission.CAMERA" />


<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

</manifest>

Sorun için bulduğum çözümün aynı zamanda android manifest dosyasının basitleştirilmesine de yol açtığını unutmayın: Android öğreticisi tarafından bir sağlayıcı ekleme açısından önerilen değişikliklere artık java kodumda herhangi birini kullanmadığım için gerekli değildir. Bu nedenle, bildirim dosyasına yalnızca birkaç standart satır - çoğunlukla izinlerle ilgili - eklenmesi gerekiyordu.

Ayrıca, Android Studio'nun otomatik içe aktarmasının java.text.SimpleDateFormatve java.util.Date. Her ikisini de manuel olarak içe aktarmak zorunda kaldım.


bu çözümler DEPOLAMA iznini gerektirir ki bu çok iyi bir yaklaşım değildir.
shanraisshan

4
Soru, onActivityResult () 'a iletilen "data" adlı Intent parametresinin boş olduğunu belirtirken, çözümünüz daha sonra devam eder ve onu kullanmaya çalışır.
Maks

2

Muhtemelen böyle bir şeyin olduğu için mi?

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);                        
Uri fileUri =  CommonUtilities.getTBCameraOutputMediaFileUri();                  
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);                        
startActivityForResult(takePictureIntent, 2);

Ancak, ekstra çıktıyı amaca koymamalısınız, çünkü o zaman veriler veri değişkeni yerine URI'ye gider. Bu nedenle, ortadaki iki satırı dışarı çıkarmanız gerekir, böylece

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(takePictureIntent, 2);

Benim için soruna neden olan buydu, umarım yardımcı olur.


12
Bu cevap yanıltıcıdır. MediaStore.EXTRA_OUTPUT koymadan tam boyutlu fotoğraf yerine küçük resim alacaksınız. Dokümanlarda ve diğer yanıtlarda vurgulanmıştır.
user2417480

2
Bu cevap kesinlikle yanıltıcıdır.
IndexOutOfDevelopersException

bu yanıltıcı bir cevaptır.
Abdulla Thanseeh

0

Aşağıdaki kod benim için çalışıyor:

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, 2);

Ve işte sonuç:

protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent)
{ 
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent);

    if(resultCode == RESULT_OK)
    {
        Uri selectedImage = imageReturnedIntent.getData();
        ImageView photo = (ImageView) findViewById(R.id.add_contact_label_photo);
        Bitmap mBitmap = null;
        try
        {
            mBitmap = Media.getBitmap(this.getContentResolver(), selectedImage);
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}

Test ettim ama aynı sorun :(
soft_developer

1
imageReturnedIntent.getData()boş değer alıyorum . Ben de seninkiyle aynı niyet yaratıyorum. Fazladan parametre koymaz.
Jaydip Kalkani


0

Benim için çalışan Kotlin kodu:

 private fun takePhotoFromCamera() {
          val intent = Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE)
        startActivityForResult(intent, PERMISSIONS_REQUEST_TAKE_PICTURE_CAMERA)
      }

Ve Sonuç alın:

 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
 if (requestCode == PERMISSIONS_REQUEST_TAKE_PICTURE_CAMERA) {
         if (resultCode == Activity.RESULT_OK) {
           val photo: Bitmap? =  MediaStore.Images.Media.getBitmap(this.contentResolver, Uri.parse( data!!.dataString)   )
            // Do something here : set image to an ImageView or save it ..   
              imgV_pic.imageBitmap = photo 
        } else if (resultCode == Activity.RESULT_CANCELED) {
            Log.i(TAG, "Camera  , RESULT_CANCELED ")
        }

    }

}

ve istek kodunu beyan etmeyi unutmayın:

companion object {
 const val PERMISSIONS_REQUEST_TAKE_PICTURE_CAMERA = 300
  }

0

Çok uğraşıp çalıştıktan sonra bunu çözebildim. İlk olarak, !nullIntent'teki değişken veriler her zaman boş olacaktır, bu nedenle, startActivityForResult'a bir URI geçirdiğiniz kadar uzun süre uygulamanızı kontrol etmek , uygulamanızı çökertecektir. Kotlin kullanacağım.

  1. Kamera amacını açın

    fun addBathroomPhoto(){
    addbathroomphoto.setOnClickListener{
    
        request_capture_image=2
    
        var takePictureIntent:Intent?
        takePictureIntent =Intent(MediaStore.ACTION_IMAGE_CAPTURE)
        if(takePictureIntent.resolveActivity(activity?.getPackageManager()) != null){
    
            val photoFile: File? = try {
                createImageFile()
            } catch (ex: IOException) {
                // Error occurred while creating the File
    
                null
            }
    
            if (photoFile != null) {
                val photoURI: Uri = FileProvider.getUriForFile(
                    activity!!,
                    "ogavenue.ng.hotelroomkeeping.fileprovider",photoFile)
                takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                    photoURI);
                startActivityForResult(takePictureIntent,
                    request_capture_image);
            }
    
    
        }
    
    }

    } '

  2. CreateImageFile () öğesini oluşturun. Ancak imageFilePath değişkenini global yapmanız GEREKİR. Nasıl oluşturulacağına dair örnek Android resmi belgelerinde ve oldukça basit

  3. Niyet Alın

     override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    
    if (requestCode == 1 && resultCode == RESULT_OK) {
        add_room_photo_txt.text=""
        var myBitmap=BitmapFactory.decodeFile(imageFilePath)
        addroomphoto.setImageBitmap(myBitmap)
        var file=File(imageFilePath)
        var fis=FileInputStream(file)
        var bm = BitmapFactory.decodeStream(fis);
        roomphoto=getBytesFromBitmap(bm) }}
  4. GetBytesFromBitmap yöntemi

      fun getBytesFromBitmap(bitmap:Bitmap):ByteArray{
    
      var stream=ByteArrayOutputStream()
      bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
      return stream.toByteArray();
      }

Umarım bu yardımcı olur.


0

Android'de Kameradan görüntüyü yakaladığımızda Uri veya data.getdata()boş gelir. bu sorunu çözmek için iki çözümümüz var.

  1. URI yolunu Bitmap Görüntüsünden alabiliriz
  2. URI yolunu imleçten alabiliriz.

Burada tüm yöntemleri uygulayacağım, Lütfen bunları dikkatlice izleyin ve okuyun: -

Öncelikle Bitmap Image'dan Uri'yi nasıl alacağımı anlatacağım: Tam kod:

Öncelikle, her iki yöntem için de aynı olacak olan Niyet aracılığıyla görüntü yakalayacağız, bu nedenle bu kodu burada yalnızca bir kez yazacağım:

// Capture Image
captureImg.setOnClickListener(new View.OnClickListener(){
    @Override public void onClick(View view){
        Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if(intent.resolveActivity(getPackageManager())!=null){
            startActivityForResult(intent,reqcode);
        }

    }
});  

Şimdi OnActivityResult'u uygulayacağız :-( Bu, her iki yöntem için de aynı olacaktır): -

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == reqcode && resultCode == RESULT_OK)
    {

        Bitmap photo = (Bitmap) data.getExtras().get("data");
        ImageView.setImageBitmap(photo);

        // CALL THIS METHOD TO GET THE URI FROM THE BITMAP
        Uri tempUri = getImageUri(getApplicationContext(), photo);

        //Show Uri path based on Image
        Toast.makeText(LiveImage.this, "Here " + tempUri, Toast.LENGTH_LONG).show();

        //Show Uri path based on Cursor Content Resolver
        Toast.makeText(this, "Real path for URI : " + getRealPathFromURI(tempUri), Toast.LENGTH_SHORT).show();
    }
    else
    {
        Toast.makeText(this, "Failed To Capture Image", Toast.LENGTH_SHORT).show();
    }
}     

Şimdi, Image ve Cursor yöntemlerinden sınıflar aracılığıyla Uri oluşturmak için yukarıdaki tüm yöntemi oluşturacağız:

Şimdi Bitmap Görüntüsünden URI yolu

private Uri getImageUri(Context applicationContext, Bitmap photo)
{
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    photo.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
    String path = MediaStore.Images.Media.insertImage(LiveImage.this.getContentResolver(), photo, "Title", null);
    return Uri.parse(path);
}

\ Kaydedilen görüntünün Gerçek yolundan Uri

public String getRealPathFromURI(Uri uri)
{
    Cursor cursor = getContentResolver().query(uri, null, null, null, null);
    cursor.moveToFirst();
    int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
    return cursor.getString(idx);
}

-1

Görüntüyü Android'de Kameradan yakaladığımızda Uriveya data.getdata()sıfır olur. Bu sorunu çözmek için iki çözümümüz var.

  1. URI yolunu Bitmap görüntüsünden alın
  2. URI yolunu imleçten alın.

Bu, URI'nin Bitmap Görüntüsünden nasıl alınacağıdır. İlk olarak, her iki yöntem için de aynı olacak olan Intent aracılığıyla görüntü yakalayın:

// Capture Image
captureImg.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if (intent.resolveActivity(getPackageManager()) != null) {
            startActivityForResult(intent, reqcode);
        }
    }
});

Şimdi OnActivityResulther iki yöntem için de aynı olacak şekilde uygulayın :

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if(requestCode==reqcode && resultCode==RESULT_OK)
    {
        Bitmap photo = (Bitmap) data.getExtras().get("data");
        ImageView.setImageBitmap(photo);

        // CALL THIS METHOD TO GET THE URI FROM THE BITMAP
        Uri tempUri = getImageUri(getApplicationContext(), photo);

        // Show Uri path based on Image
        Toast.makeText(LiveImage.this,"Here "+ tempUri, Toast.LENGTH_LONG).show();

        // Show Uri path based on Cursor Content Resolver
        Toast.makeText(this, "Real path for URI : "+getRealPathFromURI(tempUri), Toast.LENGTH_SHORT).show();
    }
    else
    {
        Toast.makeText(this, "Failed To Capture Image", Toast.LENGTH_SHORT).show();
    }
}

Şimdi, Görüntü ve İmleç yöntemlerinden Uri oluşturmak için yukarıdaki tüm yöntemleri oluşturun:

Bitmap Görüntüsünden Uri yolu:

private Uri getImageUri(Context applicationContext, Bitmap photo) {
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    photo.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
    String path = MediaStore.Images.Media.insertImage(LiveImage.this.getContentResolver(), photo, "Title", null);
    return Uri.parse(path);
}

Kaydedilen görüntünün Gerçek yolundan Uri:

public String getRealPathFromURI(Uri uri) {
    Cursor cursor = getContentResolver().query(uri, null, null, null, null);
    cursor.moveToFirst();
    int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
    return cursor.getString(idx);
}

Bunu çözebilecek biri var mı? Lütfen çözümünüzü gönderin. Açıkçası Android dokümanı bunu çözemedi
Gstuntz
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.