suchen

Heim  >  Fragen und Antworten  >  Hauptteil

android – Fragen zur Methode intent.putExtra(MediaStore.EXTRA_OUTPUT, uri)

Warum besteht die Funktion dieser Methode darin, die Ausgabeadresse beim Aufnehmen von Bildern anzugeben? Der Prototyp dieser Methode ist

public Intent putExtra(String name, Parcelable value)

Bedeutet das nicht, dass Daten in Form von Schlüssel-Wert-Paaren gespeichert werden? Warum können Sie die Ausgabeadresse des Bildes angeben?
Das Folgende ist der vollständige Code. Der Hauptzweck besteht darin, auf die Schaltfläche zu klicken, um die Fotoaufnahmeoberfläche aufzurufen und das aufgenommene Foto dann im mit der Anwendung verknüpften Verzeichnis zu speichern. Während des Lernvorgangs habe ich jedoch nicht verstanden, wie um das Foto unter der von mir angegebenen URI zu speichern.

public class MainActivity extends AppCompatActivity
{

    public static final int TAKE_PHOTO = 1;
    private ImageView picture;
    private Uri imageUri;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button takePhoto= (Button) findViewById(R.id.take_photo);
        picture= (ImageView) findViewById(R.id.pircture);
        takePhoto.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                //创建File对象,用于存储拍照后的图片
                File outputImage = new File(getExternalCacheDir(),"output_image.jpg");
                if(outputImage.exists())
                {
                    outputImage.delete();
                    try
                    {
                        outputImage.createNewFile();
                    }
                    catch (IOException e)
                    {
                        e.printStackTrace();
                    }
                }

                if (Build.VERSION.SDK_INT>=24)
                {
                    imageUri = FileProvider.getUriForFile(MainActivity.this,"com.studio.cameraalbumtest.fileprovider",outputImage);
                }
                else
                {
                    imageUri = Uri.fromFile(outputImage);
                }

                //启动相机程序
                Intent intent=new Intent("android.media.action.IMAGE_CAPTURE");
                intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri);
                startActivityForResult(intent,TAKE_PHOTO);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        switch (requestCode)
        {
            case TAKE_PHOTO:
            {
                if(resultCode == RESULT_OK)
                {
                    //将拍摄的照片显示出来
                    try
                    {
                        Bitmap bitmap= BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));
                        picture.setImageBitmap(bitmap);
                    }
                    catch (FileNotFoundException e)
                    {
                        e.printStackTrace();
                    }
                }
            }
            break;
        }
    }
}
过去多啦不再A梦过去多啦不再A梦2743 Tage vor1075

Antworte allen(2)Ich werde antworten

  • 習慣沉默

    習慣沉默2017-05-16 13:34:33

    if (Build.VERSION.SDK_INT>=24)
                    {
                        imageUri = FileProvider.getUriForFile(MainActivity.this,"com.studio.cameraalbumtest.fileprovider",outputImage);
                    }
                    else
                    {
                        imageUri = Uri.fromFile(outputImage);
                    }

    这里不就指定了 图片的保存位置吗

    Antwort
    0
  • 巴扎黑

    巴扎黑2017-05-16 13:34:33

    putExtra 是用来传递参数的,我想作者是没有理解Intent 的真实用途

    通过调用 intent.putExtra(String name, Parcelable value) 这个方法,是传递你要保存的图片的路径,打开相机后,点击拍照按钮,系统就会根据你提供的地址进行保存图片

    Antwort
    0
  • StornierenAntwort