recherche

Maison  >  Questions et réponses  >  le corps du texte

android - Questions sur la méthode intent.putExtra(MediaStore.EXTRA_OUTPUT, uri)

Pourquoi cette méthode a-t-elle pour fonction de spécifier l'adresse de sortie de la prise de photos ? Le prototype de cette méthode est

public Intent putExtra(String name, Parcelable value)

Cela ne signifie-t-il pas stocker des données sous forme de paires clé-valeur ? Pourquoi pouvez-vous spécifier l'adresse de sortie de l'image ?
Ce qui suit est le code complet. L'objectif principal est de cliquer sur le bouton pour accéder à l'interface de prise de photo, puis de sauvegarder la photo prise dans le répertoire associé à l'application. Cependant, pendant le processus d'apprentissage, je n'ai pas compris comment. pour enregistrer la photo sur l'uri spécifié par moi.

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梦2798 Il y a quelques jours1122

répondre à tous(2)je répondrai

  • 習慣沉默

    習慣沉默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);
                    }

    N'est-ce pas ici que vous spécifiez l'emplacement de sauvegarde de l'image ?

    répondre
    0
  • 巴扎黑

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

    putExtra est utilisé pour transmettre des paramètres. Je pense que l'auteur n'a pas compris le véritable objectif d'Intent

    .

    En appelant la méthode intent.putExtra(String name, Parcelable value), vous transmettez le chemin de l'image que vous souhaitez enregistrer. Après avoir ouvert l'appareil photo, cliquez sur le bouton photo et le système enregistrera l'image en fonction de l'adresse que vous avez. fourni

    répondre
    0
  • Annulerrépondre