Kamera Android: data niat mengembalikan null

132

Saya memiliki aplikasi android yang berisi beberapa kegiatan.

Di salah satu dari mereka saya menggunakan tombol yang akan memanggil kamera perangkat:

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

Dalam aktivitas yang sama saya memanggil OnActivityResultmetode untuk hasil gambar:

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

Masalahnya adalah bahwa maksudnya dataadalah nol dan OnActivityResultmetode beralih langsung ke (resultCode == RESULT_CANCELED)dan aplikasi kembali ke aktivitas sebelumnya.

Bagaimana saya bisa memperbaiki masalah ini dan setelah memanggil kamera, aplikasi kembali ke aktivitas saat ini yang berisi ImageViewyang akan berisi gambar yang diambil?

Terima kasih

soft_developer
sumber
lihat jawaban ini stackoverflow.com/questions/18120775/…
Praveen Sharma

Jawaban:

218

Aplikasi kamera Android default mengembalikan niat tidak nol hanya ketika mengirimkan kembali thumbnail di Intent yang dikembalikan. Jika Anda lulus EXTRA_OUTPUTdengan URI untuk menulis, itu akan menghasilkan nullniat dan gambar di URI yang Anda lewati.

Anda dapat memverifikasi ini dengan melihat kode sumber aplikasi kamera di GitHub:

Saya kira Anda entah EXTRA_OUTPUTbagaimana sedang lewat , atau aplikasi kamera di ponsel Anda bekerja berbeda.

Brian Slesinsky
sumber
12
bagaimana saya akan memperbaiki fungsi ekstra menempatkan, yang memberikan non nol niat dalam kamera onActivityResult
Abdul Wahab
Jawaban yang sangat membantu. Saya berharap saya bisa menerimanya untuk orang lain untuk menemukan solusi lebih efisien.
user1160020
1
Luar biasa! Terima kasih banyak untuk penjelasannya :) +100
Muhammad Riyaz
Tautan yang Anda poskan, tidak lagi valid.
4
Bisakah kita memperkenalkan kelas kamera dan hanya mengubah satu metode untuk memungkinkan keduanya, atau lebih sulit dari itu?
Tanner Summers
16

Saya menemukan jawaban yang mudah. berhasil!!

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

        }
    }

jika Anda ingin memotong dan skala gambar ini

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;
}
izakos
sumber
4
Ini memberikan FileUriExposedExceptionpada versi SDK modern.
Souradeep Nanda
8

Saya pernah mengalami masalah ini, intentini bukan nol tetapi informasi yang dikirim melalui ini intenttidak diterima masukonActionActivit()

masukkan deskripsi gambar di sini

Ini adalah solusi yang lebih baik menggunakan getContentResolver () :

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

  }

yang onActivityResult()mendapatkan bitmap disimpan oleh 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();
            }

        }
    }

pengantar untuk deskriptor de la imagen aquí pengantar untuk deskriptor de la imagen aquí

Lihat contoh saya di github:

https://github.com/Jorgesys/TakePicture

Jorgesys
sumber
6

Aplikasi kamera yang berfungsi sederhana menghindari masalah niat nol

- semua kode yang diubah termasuk dalam balasan ini; dekat dengan tutorial android

Saya telah menghabiskan banyak waktu untuk masalah ini, jadi saya memutuskan untuk membuat akun dan membagikan hasil saya dengan Anda.

Tutorial android resmi "Mengambil Foto Secara Sederhana" ternyata tidak cukup sesuai dengan yang dijanjikan. Kode yang disediakan di sana tidak berfungsi pada perangkat saya: Samsung Galaxy S4 Mini GT-I9195 yang menjalankan Android versi 4.4.2 / KitKat / API Level 19.

Saya menemukan bahwa masalah utama adalah baris berikut dalam metode yang dipanggil saat mengambil foto ( dispatchTakePictureIntentdalam tutorial):

takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);

Akibatnya niat kemudian ditangkap dengan onActivityResultmenjadi nol.

Untuk mengatasi masalah ini, saya menarik banyak inspirasi dari balasan sebelumnya di sini dan beberapa posting bermanfaat di github (sebagian besar yang ini oleh deepwinter - terima kasih besar kepadanya; Anda mungkin ingin memeriksa jawabannya di posting yang berkaitan erat juga).

Mengikuti saran yang menyenangkan ini, saya memilih strategi menghapus putExtragaris yang disebutkan dan melakukan hal yang sesuai untuk mendapatkan kembali gambar yang diambil dari kamera dalam metode onActivityResult () sebagai gantinya. Baris-baris kode yang menentukan untuk mendapatkan kembali bitmap yang terkait dengan gambar adalah:

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

Saya membuat aplikasi contoh yang hanya memiliki kemampuan untuk mengambil gambar, menyimpannya di kartu SD dan menampilkannya. Saya pikir ini mungkin bermanfaat bagi orang-orang dalam situasi yang sama dengan saya ketika saya menemukan masalah ini, karena saran bantuan saat ini kebanyakan merujuk pada posting github yang agak luas yang melakukan hal tersebut tetapi tidak terlalu mudah untuk diawasi bagi pemula seperti saya. Sehubungan dengan sistem file yang dibuat Android Studio per default saat membuat proyek baru, saya hanya perlu mengubah tiga file untuk tujuan saya:

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>

Perhatikan bahwa solusi yang saya temukan untuk masalah ini juga menyebabkan penyederhanaan file manifes android: perubahan yang disarankan oleh tutorial android dalam hal menambahkan penyedia tidak lagi diperlukan karena saya tidak menggunakan apapun dalam kode java saya. Oleh karena itu, hanya beberapa baris standar - terutama tentang izin - yang harus ditambahkan ke file manifes.

Mungkin juga bermanfaat untuk menunjukkan bahwa autoimport Android Studio mungkin tidak mampu menangani java.text.SimpleDateFormatdan java.util.Date. Saya harus mengimpor keduanya secara manual.

HGM
sumber
solusi ini memerlukan izin PENYIMPANAN, yang bukan pendekatan yang sangat baik.
shanraisshan
4
Pertanyaannya dengan jelas menyatakan bahwa parameter Intent bernama "data" yang diteruskan ke onActivityResult () adalah nol, sementara solusi Anda kemudian berjalan dan mencoba untuk menggunakannya.
Maks
2

Mungkin karena Anda punya sesuatu seperti ini?

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

Namun Anda tidak boleh memasukkan output ekstra ke maksud, karena dengan demikian data masuk ke URI alih-alih variabel data. Untuk alasan itu, Anda harus mengambil dua garis di tengah, jadi Anda harus

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

Itulah yang menyebabkan masalah bagi saya, harapan yang membantu.

Marius Lucu
sumber
12
Jawaban ini menyesatkan. Anda akan mendapatkan thumbnail alih-alih foto ukuran penuh tanpa meletakkan MediaStore.EXTRA_OUTPUT. Itu disorot dalam dokumen dan jawaban lainnya.
user2417480
2
Tentu saja jawaban ini menyesatkan.
IndexOutOfDevelopersException
ini adalah jawaban yang menyesatkan.
Abdulla Thanseeh
0

Kode berikut ini berfungsi untuk saya:

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

Dan inilah hasilnya:

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();
        }
    }
}
Manitoba
sumber
Saya mengujinya tetapi itu masalah yang sama :(
soft_developer
1
saya mendapatkan imageReturnedIntent.getData()nilai nol. Saya membuat maksud yang sama dengan Anda. Tidak menempatkan params tambahan.
Jaydip Kalkani
0

Kode Kotlin yang berfungsi untuk saya:

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

Dan dapatkan Hasil:

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

    }

}

dan jangan lupa untuk mendeklarasikan kode permintaan:

companion object {
 const val PERMISSIONS_REQUEST_TAKE_PICTURE_CAMERA = 300
  }
Hamed Jaliliani
sumber
0

Setelah banyak mencoba dan belajar, saya bisa mengetahuinya. Pertama, data variabel dari Intent akan selalu nol jadi, oleh karena itu, memeriksa !nullakan crash aplikasi Anda selama Anda melewati URI untuk memulaiActivityForResult. Ikuti contoh di bawah ini. Saya akan menggunakan Kotlin.

  1. Buka maksud kamera

    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. Buat createImageFile (). Tetapi Anda HARUS membuat variabel imageFilePath global. Contoh tentang cara membuatnya ada di dokumentasi resmi Android dan cukup mudah

  3. Dapatkan Intent

     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. Metode getBytesFromBitmap

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

Saya harap ini membantu.

Gstuntz
sumber
0

Ketika kita akan mengambil gambar dari Camera di android maka Uri atau data.getdata()null. kami memiliki dua solusi untuk mengatasi masalah ini.

  1. Kita bisa mendapatkan jalur Uri dari Gambar Bitmap
  2. Kita bisa mendapatkan jalur Uri dari kursor.

Saya akan menerapkan semua metode di sini, Harap hati-hati menonton dan membaca ini: -

Pertama saya akan memberi tahu cara mendapatkan Uri dari Bitmap Image: Kode lengkapnya adalah:

Pertama kita akan menangkap gambar melalui Intent yang akan sama untuk kedua metode sehingga kode ini saya akan menulis satu kali hanya di sini:

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

    }
});  

Sekarang kita akan Menerapkan OnActivityResult :-( Ini akan sama untuk kedua metode di atas): -

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

Sekarang kita akan membuat semua metode di atas untuk membuat Uri dari metode Gambar dan Kursor melalui kelas:

Sekarang jalur URI dari Bitmap Image

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

\ Uri dari jalur nyata dari gambar yang disimpan

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);
}
Pradeep Kumar
sumber
-1

Ketika kita menangkap gambar dari kamera di Android kemudian Uriatau data.getdata()menjadi nol. Kami memiliki dua solusi untuk mengatasi masalah ini.

  1. Ambil jalur Uri dari Gambar Bitmap
  2. Ambil jalur Uri dari kursor.

Ini adalah cara mengambil Uri dari Gambar Bitmap. Pertama ambil gambar melalui Intent yang akan sama untuk kedua metode:

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

Sekarang implementasikan OnActivityResult, yang akan sama untuk kedua metode:

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

Sekarang buat semua metode di atas untuk membuat Uri dari metode Gambar dan Kursor:

Jalur Uri dari Gambar Bitmap:

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

Uri dari jalur asli gambar yang disimpan:

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);
}
Pradeep Sheoran
sumber
Adakah yang bisa menyelesaikan ini? Mohon kirimkan solusi Anda. Android doc jelas belum dapat menyelesaikan ini
Gstuntz