【问题标题】:Taking 3 photos with StartActivityForResults使用 StartActivityForResult 拍摄 3 张照片
【发布时间】:2016-09-28 18:13:46
【问题描述】:

我希望能得到一些帮助,我想在一个循环中使用 startActivityForResults() 在同一个 Intent 下拍摄三张照片,然后返回 onActivityResult (),它使用 MarshMallow 及其特定权限(我认为这不是问题,应该在我的代码中解决),

问题在于应用程序获取了这三张照片,并制作了 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>

【问题讨论】:

  • 我从未见过相机应用会拍摄三张照片,然后返回触发器 onActivityResult。这真的发生了吗?你能在相机关闭前拍三张照片吗?
  • the application takes those three pictures ??哪个应用程序?相机应用程序将拍照。不是你的应用程序。什么意思?
  • not arrive to actually printing those three photos in the three imageviews。请不要调用打印。在图像视图中加载图像。你是什​​么意思'没有到达'? onActivityResult 是否触发?更好地解释发生了什么和没有发生什么。
  • // AQUI EMPIEZA EL PROBLEMA ////////。但问题是什么?你确实在那个意图中得到了三个 uris 吗?
  • 当我调试 onActivityResult 时,我确实得到了三个 uriFiles (Uris),但现在我更仔细地看...这三个是相同的 ¡¡¡ 嗯嗯

标签: android android-camera startactivityforresult


【解决方案1】:

这行不通;单个 startActivityForResult 将导致对 onActivityResult 的单个调用。

ACTION_IMAGE_CAPTURE 文档或系统中的其他地方没有规定您可以多次发出它并使用 3 个 URI 获得一个结果。

你必须循环它,以便你触发一个意图,等待结果,触发第二个意图,等待结果,等等。

也许可以像这样在循环中触发 3 个意图,但我不确定我是否相信响应的相机应用程序实际上会被调用 3 次。但即便如此,如果可行,您仍会收到 3 个单独的 onActivityResult 调用。

【讨论】:

  • 感谢您的回答,但您的建议类似于对一张图片执行此操作并重复该过程三遍,这是大多数示例所做的,但这不是故意的。我想告诉应用程序在我的代码中执行 X 次,例如说 3 次,然后将结果 Uris 放入 ArrayList 以管理所有打印..
  • @FaustoCheca:“我想告诉应用程序按照我的代码执行 X 次”——这通过 ACTION_IMAGE_CAPTURE 是不可能的。欢迎您找到一些具有自己的 API 的特定相机应用程序,然后强制您的所有用户安装该相机应用程序。或者,直接使用相机 API。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-20
相关资源
最近更新 更多