android - Questions sur la méthode intent.putExtra(MediaStore.EXTRA_OUTPUT, uri)
过去多啦不再A梦
过去多啦不再A梦 2017-05-16 13:32:33
0
2
1114

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梦

répondre à tous(2)
習慣沉默
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 ?

巴扎黑

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

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal