2016-09-28 9 views
0

私はいくつかの助けてくれてありがとうと思います。ループ内でstartActivityForResults()を使って同じIntentで3枚の写真を撮って、3枚の写真をMarshMallowでプリントするonActivityResult()StartActivityForResultsで3枚の写真を撮る

問題は、アプリケーションが3つの画像を取得し、ArrayListまたはURIを作成するが、到着しないということです(問題は解決しないと思います)。実際に3つの写真を3つの画像に印刷すると、

私のコードは、ありがとうございます。

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

カメラアプリが3枚の写真を撮った後で、その結果をonActivityResultのトリガーとして返すことはありませんでした。これは本当に起こっていますか?カメラが閉じる前に3枚の写真を撮ることはできますか? – greenapps

+0

「アプリケーションは3枚の写真を撮る」??どのアプリケーションですか?カメラアプリが撮影します。あなたのアプリではありません。どういう意味ですか? – greenapps

+0

「3つの画像ビューでこれらの3つの写真を実際に印刷することに到着しません」。その通話印刷はしないでください。画像ビューに画像を読み込みます。 「到着しない」とどういう意味ですか? onActivityResultはトリガーされていますか?起こることと起こらないことをはるかに良く説明してください。 – greenapps

答えて

1

これは機能しません。単一のstartActivityForResultはonActivityResultを1回呼び出すことになります。

ACTION_IMAGE_CAPTUREのドキュメントまたはシステム内の他の場所に、何回も発行して3つのURIで1つの結果を得るという契約はありません。あなたが結果を待って、その結果を待ち、1人の意図を発射する第二の意図を発射するようにあなたがループにそれをする必要があります

など

あなたは 3つのインテントを発射することができるかもしれませんこのようなループでは、私は本当に応答するカメラアプリケーションが実際に3回呼び出されるだろうと確信しています。しかし、そうであっても、3つのonActivityResult呼び出しを受け取ることになります。

+0

回答ありがとうございます。このプロセスを3回繰り返します。これはほとんどの例で行われていますが、それは意図されていません。私が望むのは、コードにXをX回実行するようにアプリケーションに指示することです。例えば、3回言いましょう。その後、UrisをArrayListに入れて、すべての印刷を管理します。 –

+0

@FaustoCheca: "私は何ですか?私のコードのようにX回実行するようにアプリケーションに指示することが欲しい " - これは' ACTION_IMAGE_CAPTURE 'では不可能である。あなたは、これを提供する独自のAPIを持ついくつかの特定のカメラアプリを見つけて、すべてのユーザにそのカメラアプリをインストールさせることを歓迎します。または、カメラAPIを直接使用してください。 – CommonsWare

関連する問題