2016-09-28 4 views
0

Я был бы признателен за помощь, я хочу сделать три фотографии под одним и тем же намерением с помощью startActivityForResults() в цикле и вернуться к onActivityResult(), который печатает эти три фотографии в трех изображениях, с MarshMallow, и его конкретные разрешения (я думаю, что это не проблема, и это должно быть разрешено в моем коде),Принимая 3 фотографии с StartActivityForResults

Проблема в том, что приложение принимает эти три изображения и делает 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

Я никогда не видел, чтобы приложение камеры занимало три фотографии, а затем возвращало триггеры onActivityResult. Действительно ли это происходит? Можете ли вы сделать три снимка до закрытия камеры? – greenapps

+0

'приложение принимает эти три фотографии' ?? Какое приложение? Приложение «Камера» сделает снимок. Не ваше приложение. Что вы имеете в виду? – greenapps

+0

'не приходите на печать этих трех фотографий в трех изображениях. Пожалуйста, не делайте этого вызова. Один загружает изображение в виде изображения. Что значит «не приходит»? Включен ли onActivityResult или нет? Объясните гораздо лучше, что происходит, а что - нет. – greenapps

ответ

1

Это не сработает; один startActivityForResult приведет к одному вызову onActivityResult.

В документации ACTION_IMAGE_CAPTURE или в другом месте системы отсутствует договор, в котором говорится, что вы можете выдать его несколько раз и получить один результат с тремя URI.

Вам придется петлю так, что вы стрелять один умысел, ждать результата, огонь второго намерения, ждать результата и т.д.

Вы может быть в состоянии стрелять 3 намерения в таком цикле, но я не уверен, что верю, что приложение для реагирования на камеру фактически будет вызываться 3 раза. Но даже в этом случае вы получите 3 отдельных вызова onActivityResult, если это работает.

+0

Спасибо за ответ, но то, что вы предлагаете, похоже на то, чтобы сделать это для одной картинки и повторяя процесс три раза, что и есть в большинстве примеров, но это не предназначено. Я хотел бы сказать, что приложение должно сделать это в X раз, как в моем коде, скажем, три раза, например, а затем поместить результат Uris в ArrayList для управления всей печатью. –

+0

@FaustoCheca: «Что я хотелось бы сказать, что приложение должно сделать это в X раз, как в моем коде »- это невозможно с помощью' ACTION_IMAGE_CAPTURE'. Вы можете найти какое-то конкретное приложение для камеры, у которого есть свой собственный API, который предлагает это, а затем заставить всех ваших пользователей установить это приложение для камеры. Или используйте API-интерфейсы камеры напрямую. – CommonsWare

 Смежные вопросы

  • Нет связанных вопросов^_^