2016-09-28 1 views
0

몇 가지 도움을 주시면 감사하겠습니다. 루프 내 startActivityForResults()와 동일한 인 텐트에서 3 장의 사진을 찍고 다시 3 개의 이미지 뷰에서 MarshMallow를 사용하여 onActivityResult() 및 특정 사용 권한 (나는 이것이 문제가 아니며 그것은 내 코드에서 해결되어야한다고 생각한다),StartActivityForResults를 사용하여 사진 3 장 찍기

문제는 응용 프로그램이이 세 개의 그림을 가져 와서 ArrayList 또는 URI를 만들고 있지만 도착하지 않는다는 것입니다 세 이미지 뷰에 실제로 세 장의 사진을 인쇄하는 경우

내 코드입니다. 미리 감사드립니다.

----------------- 
MainActivity.java 
----------------- 

    public class MainActivity extends AppCompatActivity { 


    //private int numFotos = 1; 
    //private Bitmap bitmap; 
    private ArrayList <Uri> uriFiles; 
    private ImageView imageView1, imageView2,imageView3; 
    private Button button_takePics; 



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



     button_takePics = (Button) findViewById(R.id.Butt_tiraFotos); 
     imageView1 = (ImageView) findViewById(R.id.image_1); 
     imageView2 = (ImageView) findViewById(R.id.image_2); 
     imageView3 = (ImageView) findViewById(R.id.image_3); 



     if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) 
       != PackageManager.PERMISSION_GRANTED) { 
      button_takePics.setEnabled(false); 
      ActivityCompat.requestPermissions(this, new String[] 
        { Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE }, 0); 
        } 


    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
     if (requestCode == 0) { 
      if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED 
        && grantResults[1] == PackageManager.PERMISSION_GRANTED) { 
       button_takePics.setEnabled(true); 
      } 
     } 
    } 


    public void takePictures(View view){ 

     uriFiles = new ArrayList<>(); 
     Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 




     for (int i=1; i<4; i++){ 

      uriFiles.add(Uri.fromFile(getOutputMediaFile())); 
      intent.putParcelableArrayListExtra(MediaStore.EXTRA_OUTPUT,uriFiles); 

      startActivityForResult(intent, 100); 

    } 


    } 

    private static File getOutputMediaFile() { 

     File mediaStorageDir=null; 
     File formattedFile = null; 


     mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
       Environment.DIRECTORY_PICTURES), "CameraDemo"); 

     if (!mediaStorageDir.exists()){ 
      if (!mediaStorageDir.mkdirs()){ 
       Log.d("CameraDemo", "failed to create directory"); 
       return null; 
      } 
     } 

     String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
     formattedFile= new File(mediaStorageDir.getPath() + File.separator + 
       "IMG_"+ timeStamp + ".jpg"); 

     return formattedFile; 

    } 

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

     if (requestCode == 100) { 
      if (resultCode == RESULT_OK) { 

       uriFiles = data.getParcelableArrayListExtra(MediaStore.EXTRA_OUTPUT); 


       // AQUI EMPIEZA EL PROBLEMA //////// 

       imageView1.setImageURI(uriFiles.get(0)); 
       imageView2.setImageURI(uriFiles.get(1)); 
       imageView3.setImageURI(uriFiles.get(2)); 


      } 

     } 
    } 


    } 


------------------- 
activity_main.xml 
------------------- 

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:orientation="vertical" 
    tools:context="com.example.faustocheca.photochooseshare.MainActivity"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_marginBottom="18dp" 
     android:layout_marginTop="18dp" 
     android:textSize="18sp" 
     android:text="Tira, escoge y comparte Fotos" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:hint="Tira 3 Fotos" 
     android:id="@+id/Butt_tiraFotos" 
     android:onClick="takePictures" 
     /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="48dp" 
     android:orientation="horizontal" 
     > 

     <ImageView 
      android:id="@+id/image_1" 
      android:layout_weight="1" 
      android:layout_width="80dp" 
      android:layout_height="120dp" 
      android:layout_margin="1dp" 
      android:background="#feafea"/> 

     <ImageView 
      android:id="@+id/image_2" 
      android:layout_weight="1" 
      android:layout_width="80dp" 
      android:layout_height="120dp" 
      android:layout_margin="1dp" 
      android:background="#feafea"/> 

     <ImageView 
      android:id="@+id/image_3" 
      android:layout_weight="1" 
      android:layout_width="80dp" 
      android:layout_height="120dp" 
      android:layout_margin="1dp" 
      android:background="#feafea"/> 


    </LinearLayout> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:hint="Comparte" 
     android:id="@+id/Butt_comparte" 
     /> 




</LinearLayout> 
+0

카메라 앱이 세 장의 사진을 찍은 다음 ActivationResult에 대한 트리거를 반환하는 것을 본 적이 없습니다. 이것은 실제로 일어나는가? 카메라가 닫히기 전에 세 장의 사진을 찍을 수 있습니까? – greenapps

+0

'응용 프로그램은 세 장의 사진을 찍습니다 .' ?? 어떤 응용 프로그램입니까? 카메라 앱이 사진을 찍습니다. 앱이 아닙니다. 무슨 소리 야? – greenapps

+0

'세 장의 사진에 실제로 세 장의 사진을 인쇄하는 데 도착하지 않았습니다. ' 그 전화를하지 말아주세요. 하나는 이미지보기에서 이미지를로드합니다. '도착하지 않는다'는 것은 무엇을 의미합니까? onActivityResult가 trigered 되었습니까? 일어나는 일과 일어나지 않는 일을 훨씬 더 잘 설명하십시오. – greenapps

답변

1

이것은 작동하지 않습니다. 단일 startActivityForResult는 onActivityResult를 한 번 호출하게됩니다.

ACTION_IMAGE_CAPTURE 문서 또는 시스템의 다른 곳에서 여러 번 발행하고 3 개의 URI로 하나의 결과를 얻을 수 있다고하는 계약서는 없습니다. 당신이 결과를 기다린 결과를 기다릴 한 의도를 발사 두 번째 의도를 발사 있도록 루프를해야합니다

당신은 3 개 의도를 해고 할 수 있습니다 이런 루프에서는, 응답하는 카메라 애플리케이션이 실제로 3 번 호출 될 것이라고 나는 확신 할 수 없다. 그렇더라도 그렇다고해도 3 개의 onActivityResult 호출을받을 수 있습니다.

+0

답변 해 주셔서 감사합니다.하지만 한 장의 그림과 이 과정을 세 번 반복하면 대부분의 예제가 수행하지만 의도하지는 않습니다. 내가 원하는 것은 X 코드를 X 코드처럼 실행하도록하고, 예를 들어 세 번 말한 다음 Uris를 ArrayList에 넣어 모든 인쇄물을 관리하도록하는 것입니다. –

+0

@FaustoCheca : "나는 응용 프로그램에 내 코드에서와 같이 X 배를하도록 지시하는 것이 좋겠다 "- 그것은 ACTION_IMAGE_CAPTURE를 통해 가능하지 않습니다. 이 기능을 제공하는 자체 API가있는 특정 카메라 앱을 찾아서 모든 사용자가 해당 카메라 앱을 설치하도록 할 수 있습니다. 또는 카메라 API를 직접 사용하십시오. – CommonsWare