Android 카메라 : 데이터 의도가 null을 반환


132

여러 활동이 포함 된 안드로이드 응용 프로그램이 있습니다.

그중 하나에서 장치 카메라를 호출하는 버튼을 사용하고 있습니다.

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

동일한 활동 OnActivityResult에서 이미지 결과에 대한 메소드를 호출합니다 .

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

문제는 인 텐트 data가 null이고 OnActivityResult메서드가로 직접 바뀌고 (resultCode == RESULT_CANCELED)응용 프로그램이 이전 avtivity로 돌아 간다는 것입니다.

이 문제를 어떻게 해결하고 카메라를 호출 한 후 응용 프로그램은 ImageView촬영 한 사진이 포함 된 현재 활동으로 돌아 갑니까?

감사


이 답변에 대해 살펴보십시오 stackoverflow.com/questions/18120775/…
Praveen Sharma

답변:


218

기본 Android 카메라 애플리케이션은 리턴 된 의도에서 썸네일을 다시 전달할 때만 널이 아닌 의도를 리턴합니다. EXTRA_OUTPUT쓸 URI를 전달 하면 null의도 를 반환 하고 그림은 전달한 URI에 있습니다.

GitHub에서 카메라 앱의 소스 코드를 보면이를 확인할 수 있습니다.

당신이 EXTRA_OUTPUT어떻게 든 지나가 거나 휴대 전화의 카메라 앱이 다르게 작동 한다고 생각합니다 .


12
어떻게 카메라하여 onActivityResult에서 의도되지 않은 널 (null)을 제공하는, 풋 추가 기능을 해결하는 것입니다
압둘 와하 브

정말 도움이되는 답변 다른 사람들이 솔루션을보다 효율적으로 찾을 수 있도록 수용하고 싶습니다.
user1160020

1
대박 ! 감사합니다 설명 : +100 대한 많은
무하마드 Riyaz

게시 한 링크가 더 이상 유효하지 않습니다.

4
우리는 카메라 클래스를 상실하고 두 방법을 모두 허용하도록 하나의 방법을 변경할 수 있습니까?
Tanner Summers

16

나는 쉬운 대답을 찾았습니다. 효과가있다!!

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

        }
    }

이 이미지를 자르고 크기를 조정하려면

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
FileUriExposedException최신 SDK 버전을 제공합니다 .
Souradeep Nanda

8

이 문제가 발생 intent했지만 null이 아니지만이를 통해 전송 된 정보 intent는 수신되지 않습니다.onActionActivit()

여기에 이미지 설명을 입력하십시오

이것은 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);

  }

onActivityResult()에 저장된 비트 맵 수 ) 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();
            }

        }
    }

라 데크 리피 시온 드 라 이미지 라 데크 리피 시온 드 라 이미지

github에서 내 예를 확인하십시오.

https://github.com/Jorgesys/TakePicture


6

null 의도 문제를 피하는 간단한 작동 카메라 앱

-이 회신에 포함 된 모든 변경된 코드; 안드로이드 튜토리얼에 가깝다

이 문제에 대해 많은 시간을 보냈으므로 계정을 만들고 결과를 귀하와 공유하기로 결정했습니다.

공식 안드로이드 튜토리얼 "간단히 사진 찍기" 는 약속 한 것을 지키지 않는 것으로 나타났습니다. 제공된 코드는 내 장치에서 작동하지 않습니다 : 안드로이드 버전 4.4.2 / KitKat / API 레벨 19를 실행하는 Samsung Galaxy S4 Mini GT-I9195.

주요 문제는 사진을 캡처 할 때 호출 된 메소드의 다음 줄이라는 것을 알았습니다 ( dispatchTakePictureIntent자습서에서).

takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);

결과적 onActivityResult으로 널 (null) 로 인해 의도를 포착했습니다 .

(대부분이 문제를 해결하기 위해, 나는 여기에 이전 응답에서 많은 영감을 뽑아 GitHub의에 유용한 게시물 deepwinter하여이 일 -, 당신은 밀접하게 관련에 자신의 답변을 확인 할 수 있습니다 그에게 큰 덕분에 포스트 아니라).

이 유쾌한 조언을 따라 언급 한 putExtra줄 을 삭제하고 대신 onActivityResult () 메서드 내에서 카메라에서 찍은 사진을 가져 오는 전략을 선택했습니다 . 그림과 관련된 비트 맵을 다시 얻는 결정적인 코드는 다음과 같습니다.

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

사진을 찍고 SD 카드에 저장하고 표시하는 기능을 갖춘 모범적 인 앱을 만들었습니다. 현재 도움 제안은 주로 문제가있는 일을하지만 너무 초보자를 감독하기 쉽지 않은 광범위한 github 게시물을 참조하기 때문에이 문제를 우연히 발견했을 때 나와 같은 상황에있는 사람들에게 이것이 도움이 될 것이라고 생각합니다. 나를. 새 프로젝트를 만들 때 Android Studio가 기본적으로 생성하는 파일 시스템과 관련하여 목적을 위해 세 개의 파일을 변경해야했습니다.

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>

내가 찾은 솔루션은 안드로이드 매니페스트 파일을 단순화 시켰습니다. 내 자바 코드에서 아무것도 사용하지 않으므로 공급자 추가 측면에서 안드로이드 튜토리얼에서 제안한 변경 사항이 더 이상 필요하지 않습니다. 따라서 대부분의 사용 권한과 관련된 표준 행만 매니페스트 파일에 추가해야했습니다.

또한 안드로이드 Studio의 자동으로 가져 오기가 처리 할 수없는 수 있음을 지적하는 가치가있을 수도 java.text.SimpleDateFormatjava.util.Date. 둘 다 수동으로 가져와야했습니다.


이 솔루션에는 STORAGE 권한이 필요하며 이는 좋은 접근 방식이 아닙니다.
shanraisshan

4
이 질문은 onActivityResult ()에 전달 된 "data"라는 Intent 매개 변수가 null 인 반면 솔루션이 계속 사용하려고 시도한다는 것을 분명히 나타냅니다.
Maks

2

아마도 당신이 이와 같은 것을 가지고 있기 때문에?

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

그러나 추가 출력을 의도에 넣지 않아야합니다. 데이터가 데이터 변수 대신 URI로 이동하기 때문입니다. 따라서 중간에있는 두 줄을 가져와야합니다.

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

그것이 저에게 문제를 일으킨 것입니다. 그것이 도움이 되었기를 바랍니다.


12
이 답변은 잘못된 것입니다. MediaStore.EXTRA_OUTPUT을 넣지 않아도 전체 크기 사진 대신 축소판 그림이 표시됩니다. 문서와 다른 답변에서 강조 표시됩니다.
user2417480

2
이 답변은 오도의 소지가 있습니다.
IndexOutOfDevelopersException

이것은 잘못된 답변입니다.
압둘라 Thanseeh

0

다음 코드는 저에게 효과적입니다.

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

결과는 다음과 같습니다.

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

나는 그것을 테스트했지만 같은 문제 :(
soft_developer

1
내가 무엇입니까 imageReturnedIntent.getData()null 값을. 나는 당신과 같은 의도를 만들고 있습니다. 추가 매개 변수를 넣지 않았습니다.
Jaydip Kalkani


0

나를 위해 작동하는 코 틀린 코드 :

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

그리고 결과를 얻으십시오 :

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

    }

}

요청 코드를 선언하는 것을 잊지 마십시오.

companion object {
 const val PERMISSIONS_REQUEST_TAKE_PICTURE_CAMERA = 300
  }

0

많은 노력과 연구 끝에 나는 그것을 알아낼 수있었습니다. 먼저 Intent의 변수 데이터는 항상 null이므로 확인 !null하면 URI가 startActivityForResult에 전달되는 동안 앱이 중단됩니다. 아래 예를 따르십시오. 나는 Kotlin을 사용할 것입니다.

  1. 카메라 의도 열기

    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 ()을 작성하십시오. 그러나 imageFilePath 변수를 전역으로 작성해야합니다. 그것을 만드는 방법에 대한 예는 Android 공식 문서에 있으며 매우 간단합니다.

  3. 의도를 얻으십시오

     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 메소드

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

이게 도움이 되길 바란다.


0

우리가 안드로이드에서 카메라에서 이미지를 캡처 할 때 Uri 또는 data.getdata()null이됩니다. 이 문제를 해결하기위한 두 가지 솔루션이 있습니다.

  1. 비트 맵 이미지에서 Uri 경로를 얻을 수 있습니다
  2. 커서에서 Uri 경로를 가져올 수 있습니다.

여기에 모든 방법을 구현하겠습니다.주의 깊게보고 다음을 읽으십시오.

먼저 비트 맵 이미지에서 Uri를 얻는 방법을 알려 드리겠습니다. 전체 코드는 다음과 같습니다.

먼저 Intent를 통해 이미지를 캡처하여 두 방법 모두 동일 하므로이 코드는 한 번만 작성합니다.

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

    }
});  

이제 우리는 OnActivityResult를 구현할 것입니다 :-(이 두 가지 방법 모두 동일합니다) :

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

이제 클래스를 통해 Image 및 Cursor 메서드에서 Uri를 만드는 위의 모든 메서드를 만듭니다.

비트 맵 이미지의 URI 경로

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

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

우리는 안드로이드 카메라에서 이미지를 캡처 할 때 Uri또는 data.getdata()널 (null)이된다. 이 문제를 해결하기위한 두 가지 솔루션이 있습니다.

  1. 비트 맵 이미지에서 Uri 경로 검색
  2. 커서에서 Uri 경로를 검색하십시오.

비트 맵 이미지에서 Uri를 검색하는 방법입니다. Intent를 통한 첫 번째 캡처 이미지는 두 방법 모두 동일합니다.

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

이제 OnActivityResult두 가지 방법 모두 동일하게 구현하십시오 .

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

이제 위의 모든 메소드를 작성하여 이미지 및 커서 메소드에서 Uri를 작성하십시오.

비트 맵 이미지의 URI 경로 :

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 :

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

누구든지 이것을 해결할 수 있습니까? 친절하게 솔루션을 게시하십시오. 안드로이드 의사는 분명히 이것을 해결할 수 없었습니다
Gstuntz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.